概述
本文所述 “证书” 分为 “Rancher 自身证书” 和 “Rancher 启动的 Kubernetes 的证书” 两种。
默认情况下,Kubernetes 集群所需要的证书由 Rancher 生成,如果出现证书过期,或证书泄露等情况,则需要使用新的证书轮换掉有问题的证书。轮换证书后,Kubernetes 组件将自动重新启动。
以下服务支持证书轮换:
- etcd
- kubelet
- kube-apiserver
- kube-proxy
- kube-scheduler
- kube-controller-manager
警告:轮换 Kubernetes 证书可能会导致集群在重新启动组件时暂时不可用。对于生产环境,建议在维护时段内执行此操作。
为 K8s 轮换证书
通过 Rancher 启动的 Kubernetes 集群(RKE 集群)能够通过 UI 轮换自动生成的证书。
在全局视图中,导航到要轮换证书的集群》选择省略号(…)》 轮换证书》选择要轮换的证书。
- 轮换所有服务证书(保持相同的 CA)
- 轮换单个服务,然后从下拉菜单中选择一项服务
最后单击保存。
结果:所选证书将被轮换,相关服务将重新启动以开始使用新证书。
注意: 尽管 RKE CLI 可以为 Kubernetes 集群组件使用自定义证书,但目前 Rancher 不支持在 Rancher UI 中创建 RKE 集群时上传这些证书。
因为证书改变,相应的token也会变化,所以在完成集群证书更新后,需要对连接API SERVER的 Pod 进行重建,以获取新的token,否则会出现服务启动失败的情况(日志会显示 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 证书过期
正常情况下,Rancher 需要和 K8s 集群交互,K8s 集群中有 agent 需要和 Rancher 通讯,如果 Rancher 自身的证书已经过期,则会出现无法通讯的情况,在 UI 上体现的症状就是 k8s 集群出现错误提示无法被管理。
官方文档说:对于 v2.2.2+ 以后的 Rancher 它会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书。
不巧的是我独立容器运行的 Rancher 并没有自动为我更新证书,所以出现了错误,这里特别说一下证书已经过期后的处理方法。
1、将服务器的时间往后调,调到证书有效期之内。
2、docker exec 进入 rancher 容器,然后执行如下命令。
kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving
kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system
rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json
3、退出 docker 容器命令行,重启 rancher 容器 docker restart <rancher_server_id>
4、执行命令刷新参数 curl --insecure -sfL https://server-url/v3
5、再重启 rancher 容器 docker restart <rancher_server_id>
6、恢复并校准服务器时间。
官方文档: https://docs.rancher.cn/docs/rancher2/trending-topics/certificate-rotation/_index/