概述

本文所述 “证书” 分为 “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/