如何为 Rancher 轮换证书?
概述#
默认情况下,Kubernetes 集群所需要的证书由 Rancher 生成,如果出现证书过期,或证书泄露等情况,则需要使用新的证书轮换掉有问题的证书。轮换证书后,Kubernetes 组件将自动重新启动。
以下服务支持证书轮换:
- etcd
- kubelet
- kube-apiserver
- kube-proxy
- kube-scheduler
- kube-controller-manager
轮换 Kubernetes 证书可能会导致集群在重新启动组件时暂时不可用。对于生产环境,建议在维护时段内执行此操作。
Rancher v2.2.x 中的证书轮换#
Rancher 启动的 Kubernetes 集群(RKE 集群)能够通过 UI 轮换自动生成的证书。
-
在全局视图中,导航到要轮换证书的集群。
-
选择省略号(...)>轮换证书。
-
选择要轮换的证书。
- 轮换所有服务证书(保持相同的 CA)
- 轮换单个服务,然后从下拉菜单中选择一项服务
-
单击保存。
结果:所选证书将被轮换,相关服务将重新启动以开始使用新证书。
注意: 尽管 RKE CLI 可以为 Kubernetes 集群组件使用自定义证书,但目前 Rancher 不支持在 Rancher UI 中创建 RKE 集群时上传这些证书。
Rancher v2.1.x 和 v2.0.x 中的证书轮换#
在版本 v2.0.14 以及 v2.1.9 中支持
Rancher 启动的 Kubernetes 集群能够通过 API 轮换自动生成的证书。
1.在全局视图中,导航到要轮换证书的集群。
2.选择省略号(...)>在 API 中查看。
3.单击 RotateCertificates。
4.单击显示请求。
5.单击发送请求。
结果:所有 Kubernetes 证书将被轮换。
升级较旧的 Rancher 版本后轮换过期的证书#
如果要从 Rancher v2.0.13 或更早版本或 v2.1.8 或更早版本升级,并且您的集群已过期证书,则需要一些手动步骤来完成证书轮换。
-
对于
controlplane
和etcd
节点,登录到每个对应的主机,并检查证书kube-apiserver-requestheader-ca.pem
是否在以下目录中:如果证书不在目录中,请执行以下命令:
如果
.tmp
目录不存在,则可以将整个 SSL 证书复制到.tmp
中: -
轮换证书。对于 Rancher v2.0.x 和 v2.1.x,请使用 Rancher API,对于 Rancher 2.2.x 请使用Rancher UI。
-
命令完成后,检查
worker
节点是否处于活动状态。如果不是,请登录到每个worker
节点,然后重新启动 kubelet 和 agent。
RKE 证书轮换 (local 集群和业务集群通用)#
可用版本: rke v0.2.0+
注意 如果以前是通过
rke v0.2.0
之前的版本创建的 Kubernetes 集群,在轮换证书前先执行rke up
操作,参考证书管理
-
通过 RKE 轮换证书,目前支持的操作包括:
- 批量更新所有服务证书(CA 证书不变)
- 更新某个指定服务(CA 证书不变)
- 轮换 CA 和所有服务证书
-
批量更新所有服务证书(CA 证书不变)
-
更新指定服务(CA 证书不变)
-
轮换 CA 和所有服务证书
-
因为证书改变,相应的
token
也会变化,所以在完成集群证书更新后,需要对连接API SERVER
的 Pod 进行重建,以获取新的token
。- cattle-system/cattle-cluster-agent
- cattle-system/cattle-node-agent
- cattle-system/kube-api-auth
- ingress-nginx/nginx-ingress-controller
- kube-system/canal
- kube-system/kube-dns
- kube-system/kube-dns-autoscaler
- 其他应用 Pod
独立容器 Rancher Server 证书更新#
-
证书未过期
证书未过期时,rancher server 可以正常运行。升级到 Rancher v2.0.14+ 、v2.1.9+、v2.2.2+ 后会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书。所以独立容器运行的 Rancher Server,只需在证书过期前把 rancher 版本升级到支持自动更新 ssl 证书的版本即可,无需做其他操作。
-
证书已过期
如果证书已过期,那么 rancher server 无法正常运行。即使升级到 Rancher v2.0.14+ 、v2.1.9+、v2.2.2+ 也可能会提示证书错误。如果出现这种情况,可通过以下操作进行处理:
-
正常升级 rancher 版本到 v2.0.14+ 、v2.1.9+、v2.2.2+;
-
执行以下命令:
-
2.0 或 2.1 版本
-
2.2 +
-
2.3 +
-
2.4/2.5 +
- exec 到 rancher server
-
重启 rancher-server
-
执行以下命令刷新参数
-
-
重启 Rancher Server 容器
-
故障处理#
提示 CA 证书为空#
如果执行更新证书后出现如下错误提示,因为没有执行集群更新操作
解决方法
- 选择对应问题集群,然后查看浏览器的集群 ID,如下图:
- 执行命令
kubectl edit clusters <clusters_ID>
- 如果 Rancher 是 HA 安装,直接在 local 集群中,通过
rke
生成的kube
配置文件执行以上命令; - 如果 Rancher 是单容器运行,通过
docker exec -ti <容器ID> bash
进入容器中,然后执行apt install vim -y
安装 vim 工具,然后再执行以上命令;
- 如果 Rancher 是 HA 安装,直接在 local 集群中,通过
- 删除
spec.rancherKubernetesEngineConfig.rotateCertificates
层级下的配置参数:修改为 - 输入
:wq
保存 yaml 文件后集群将自动更新,更新完成后再进行证书更新。
证书已过期导致无法连接 K8S#
如果集群证书已经过期,那么即使升级到Rancher v2.0.14、v2.1.9
以及更高版本也无法轮换证书。rancher 是通过Agent
去更新证书,如果证书过期将无法与Agent
连接。
解决方法
可以手动设置节点的时间,把时间往后调整一些。因为Agent
只与K8S master
和Rancher Server
通信,如果 Rancher Server 证书未过期,那就只需调整K8S master
节点时间。
调整命令:
然后再对 Rancher Server 进行升级,接着按照证书轮换步骤进行证书轮换,等到证书轮换完成后再把时间同步回来。
检查证书有效期