Rancher 安装及使用
环境信息
- centos7 3.10.0
- kubernetes Server Version: v1.21.2
- Helm 3.10.0
- Rancher 2.6
安装
安装 Helm
helm 安装及使用安装 Ingress-nginx-controller
ingress-nginx 安装配置添加 Helm Chart 仓库
添加最新版本,生产环境建议使用稳定版本
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest |
为 Rancher 创建命名空间
你需要定义一个 Kubernetes 命名空间,用于安装由 Chart 创建的资源。这个命名空间的名称为 cattle-system:
kubectl create namespace cattle-system |
安装 cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml |
安装完 cert-manager 后,你可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:
kubectl get pods -n cert-manager |
通过 Helm 安装 Rancher
helm install rancher rancher-stable/rancher --namespace cattle-system \ |
安装成功后,输出结果如下
NAME: rancher |
根据提示,浏览器中访问 https://rancher.my.com/dashboard/?setup=admin,正常情况下,显示如下页面
根据页面提示,保持密码,登陆。
常见错误
helm 版本不支持最新的 kubernetes 版本
使用 helm 命令报错
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.my.org --set bootstrapPassword=admin |
最新版本 helm 不支持最新版本的 Kubernetes,需按照 helm 提示使用 相应版本
Error: INSTALLATION FAILED: execution error at (rancher/templates/validate-psp-install.yaml:4:5): The target cluster does not have the PodSecurityPolicy API resource. Please disable PSPs in this chart before proceeding.
环境信息
- centos7 5.4.242-1
- kubernetes v1.25.4
- helm v3.11.3
- rancher v2.7
执行以下命令安装 rancher,结果报错
helm install rancher rancher-latest/rancher \ |
对于 Kubernetes 版本等于或高于 1.25 的安装,需要添加选项 --set global.cattle.psp.enabled=false [2]
helm install rancher rancher-latest/rancher \ |
Rancher 中对 Pod 执行 Execute Shell 时无法连接到容器
Kubernetes 集群开启防火墙后,在 Rancher 中想通过 Execute Shell 进入 Pod 中的容器,但是一直无法连接到容器。关闭集群 iptables 防火墙后可以正常连接,可以确定问题出在 iptables 防火墙规则,为了定位到需要放通哪个源及端口,可以通过 iptables 的 日志功能 进行定位。
- 本示例中,iptables 防火墙的
filter表的INPUT链的默认规则为DROP,为了捕获最终被DROP的数据包,在 iptables 的filter表的INPUT链的最后添加记录日志的规则/etc/sysconfig/iptables -A INPUT -j LOG --log-prefix "iptables-input-DROP"
- 规则生效后,检查系统日志
/var/log/messages,看到了以下被DROP的数据包信息从以上数据包中可以看到,数据包流经的网卡为/var/log/messages iptables-input-DROPIN=cni0 SRC=10.244.0.5 DST=172.31.29.60 PROTO=TCP SPT=59196 DPT=6443 WINDOW=26733 RES=0x00 SYN URGP=0
iptables-input-DROPIN=cni0 SRC=10.244.0.5 DST=172.31.29.60 PROTO=TCP SPT=59196 DPT=6443 WINDOW=26733 RES=0x00 SYN URGP=0cni0,源 IP 为10.244.0.5,目的 IP 为172.31.29.60,目的端口为6443/tcp。继续查看源 IP ,发现其为cattle-cluster-agent,这是 Rancher 在集群中的 Agent由此可以看出,在开启了 iptables 防火墙后,是因为kubectl get pods -A -o wide | grep 10.244.0.5
cattle-system cattle-cluster-agent-7c7dd4b97f-9wcbh 1/1 Running 0 57d 10.244.0.5 master <none> <none>cattle-cluster-agent无法访问集群的 API Server 端口6443/tcp,从而导致 Rancher 无法通过其 Agent 连接到 Pod 中的容器。在 iptables 中添加防火墙规则允许此类数据包通过,开启 iptables 后 Rancher 可正常连接到 Pod 中的容器/etc/sysconfig/iptables -A INPUT -s 10.244.0.0/16 -p tcp -m multiport --dports 6443 -j ACCEPT -m comment --comment "for kubernetes API Server from Rancher Agent"
Cluster agent is not connected
Rancher 管理的集群状态 Unavailable,Rancher 显示的原因为 Cluster agent is not connected
Rancher Server 通过和 Kubernetes 集群中部署的 Rancher Agent (cattle-cluster-agent) 互相通信来获取集群状态及对集群进行操作,Rancher Agent (cattle-cluster-agent) 需要向 Rancher Server 上报心跳信息以使 Rancher Server 知道集群的状态。这个错误出现意味这 Rancher Server 和 Rancher Agent 之间的通信存在问题。Rancher Server 和 Rancher Agent 不直接通过固定端口通信,Rancher Server 和 Kubernetes 只需要和 Kubernetes API Server 通信,Rancher Agent 需要访问 Rancher Server 以上报心跳及集群状态信息
要定位此问题原因,首先检查 Rancher Agent (cattle-cluster-agent) 的日志
kubectl get pods -A -o wide | grep -i agent |
从 Rancher Agent (cattle-cluster-agent) 的日志中可以看出,Rancher Agent (cattle-cluster-agent) 无法访问 Rancher Server (https://rancher.test.com/ping) 以上报心跳,请求结果为 403。
本案例中是因为 Rancher Server 的访问域名有白名单限制,将 Kubernetes 集群中的节点添加到 Rancher Server 的域名加白后恢复正常。
certificate is valid for
Rancher 管理的集群状态 Unavailable,Rancher 显示的原因为 Cluster agent is not connected
检查集群上的 cattle-cluster-agent 日志。报错如下
level=fatal msg="looking up cattle-system/cattle ca/token: failed to find service account cattle-system/cattle: Get \"https://10.1.0.1:443/api/v1/namespaces/cattle-system/serviceaccounts/cattle\": x509: certificate is valid for 10.96.0.1, 172.31.16.114, 54.67.95.96, not 10.1.0.1" |
这个错误信息表明,kube-apiserver 的证书中,没有签发给 IP 10.1.0.1,此 IP 一般为 kubernetes 的 service 的 IP
kubectl get services |
因此要解决此问题,只需要更新 kube-apiserver 的证书,参考文档进行更新
常见配置
权限管理配置
配置只读 Role
本示例在 Rancher 上配置有对 Pod 只读权限的 Role,确保绑定了 Role 的用户可以通过 Rancher 读取到 Pod 信息,可以 exec 到 Pod,查看 Pod 日志,无其他 修改 权限。
在 Rancher 上创建具有对 Pod 只读权限的 Role,本示例中为其命名
PodReadOnlyRole在全局面板中进入
Users & Authentication,选择Roles

选择Project/Namespaces

点击Create Project/Namespaces Role,创建 Role,按照下图,填入对应信息

需要添加的Resource如下:pods
pods/attach
pods/exec
pods/portforward
pods/proxy
pods/log
pods/status权限选择:
get,list,watch。填写完成后点击Create创建,无误后会创建 Role :PodReadOnlyRole创建用户
在全局面板中进入
Users & Authentication,选择Users,创建新用户。

在Global Permissions中,选择系统预设的 Global Role :User-Base,此角色仅拥有登陆系统的权限。绑定 User 和 Project/Namespaces Role
Rancher 仅支持对 Rancher 中的
Project分配Project/Namespaces Role,所以为了分配权限,需要对不同的项目创建对应的Project。进入对应的 Cluster,选择要分配权限的
Project,点击Edit Config

在Members中选择Add为Project绑定User和Project Permissions,本示例中,权限选择PodReadOnlyRole

通过以上步骤创建及分配权限后,通过新创建的用户登陆 Rancher,检查新用户对 Pod 的权限。
为 Rancher 管理的 Kubernetes 集群分配管理员
Rancher 提供了一个集中的身份验证和授权机制来管理 Kubernetes 集群的访问。要为 Rancher 管理的 Kubernetes 集群分配管理员,可以按照以下步骤操作
登录 Rancher UI:
打开你的 Rancher UI 并进行登录。
选择你的集群:
在 Home 页面上,选择你想要授权的 Kubernetes 集群。
管理成员:
在集群的仪表盘上,找到并点击 “Cluster Members” 选项。这会显示集群的所有成员和他们的角色。
添加成员:
点击
Add Member。
在提供的搜索框中输入用户的名称或标识符来查找他们。这个用户可以是单独的用户、团队或组,取决于您的身份验证配置。
选择要分配给该成员的角色。对于管理员权限,您应该选择Cluster Owner或与之类似的角色。确认权限:
确保新添加的成员现在在成员列表中,并且他们已经被分配了正确的角色。
通知新管理员他们已经获得权限,并让他们登录 Rancher UI 以确认他们现在可以管理该集群。
Rancher 新增访问域名
为 Rancher web UI 新增其他可访问域名,参考以下步骤
使用
使用 cert-manager 申请证书的步骤cert-manager为新增域名申请证书修改 Rancher 的 Ingress 配置,添加新域名及证书到 Ingress
spec:
ingressClassName: nginx
rules:
- host: rancher.test.com
http:
paths:
- backend:
service:
name: rancher
port:
number: 80
pathType: ImplementationSpecific
- host: rancher1.test.com
http:
paths:
- backend:
service:
name: rancher
port:
number: 80
pathType: ImplementationSpecific
tls:
- hosts:
- rancher.test.com
secretName: tls-rancher-ingress
- hosts:
- rancher1.test.com
secretName: rancher1-test-com
nginx 反代 Rancher
在集群外部通过 Nginx 反代访问 Rancher,可以使用以下 Nginx 配置 [1]
map $http_upgrade $connection_upgrade { |