Kubernetes集群轮换证书操作指引
查看证书有效期
kubeadm安装的kubernetes集群查看证书有效期
kubeadm certs list
这个命令将列出所有当前使用的证书,包括其名称、状态和过期时间。
rke安装的kubernetes集群查看证书有效期
for i in /etc/kubernetes/ssl/*.pem; do echo $i; openssl x509 -noout -dates -in $i; done
rke2安装的kubernetes集群查看证书有效期
控制节点:
for i in /var/lib/rancher/rke2/server/tls/*.crt; do echo $i; openssl x509 -in $i -noout -dates; done
for i in /var/lib/rancher/rke2/server/tls/*/*.crt; do echo $i; openssl x509 -in $i -noout -dates; done
工作节点:
for i in /var/lib/rancher/rke2/agent/*.crt; do echo $i; openssl x509 -in $i -noout -dates; done
kubeadm安装的kubernetes集群轮换证书
使用 kubeadm
命令来完成证书轮换是 Kubernetes 集群管理中常见的操作。在之前的步骤中,我们使用 kubeadm init
命令初始化了集群,并生成了一组初始证书。随着时间的推移,这些证书可能会过期或被撤销,因此需要进行轮换。
使用 kubeadm certs
子命令可以管理集群的证书。以下是如何使用 kubeadm certs
命令来完成证书轮换:
首先,使用以下命令列出当前集群中的证书:
kubeadm certs list
这个命令将列出所有当前使用的证书,包括其名称、状态和过期时间。
- 确定要轮换的证书。如果有多个证书需要轮换,可以同时指定多个证书的名称。
使用以下命令轮换证书:
kubeadm certs rotate <certificate-name>
将
<certificate-name>
替换为要轮换的实际证书的名称。如果有多个证书需要轮换,可以使用通配符*
,例如:kubeadm certs rotate '*'
。- 执行上述命令后,Kubernetes 集群将自动生成新的证书并替换旧证书。这个过程通常会自动完成,无需人工干预。
- 最后,验证证书是否成功轮换。可以再次运行
kubeadm certs list
命令来确认新证书的状态和过期时间。
需要注意的是,在进行证书轮换之前,确保已经备份了旧的证书,以便在需要时进行恢复。此外,确保新的证书策略和密钥满足集群的安全需求,并在生产环境中经过充分测试和验证。
rke安装的kubernetes集群轮换证书
默认状态下,Kubenetes 集群使用由 RKE 自动生成的证书。当证书临近过期时,或当证书被泄露时,用户应该及时轮换证书。
完成证书轮换后,Kubernetes 组件会自动重启,重启后,新的证书就会生效。您可以为以下这些服务轮换证书:
- etcd
- kubelet (节点证书)
- kubelet (启用 Kubelet 选项后,可以轮换服务证书。)
- kube-apiserver
- kube-proxy
- kube-scheduler
- kube-controller-manager
RKE 具有轮换证书的能力,您可以使用rke cert命令轮换服务证书:
rke cert rotate
:轮换全部服务证书。rke cert rotate --service <ServiceName>
:轮换单个服务证书。rke cert rotate --rotate-ca
:轮换 CA 证书和全部服务证书。
只要您在进行证书轮换,都需要用到cluster.yml
文件。如果您修改了cluster.yml
默认的存储路径,在执行证书轮换的时候,您可以使用rke cert rotate --config /path/to/cluster.yml
指向cluster.yml
的路径。
轮换服务证书
轮换全部服务证书
运行rke cert rotate
命令,可以将所有服务正在使用的证书替换为同一证书签发机构颁发的新证书。在命令行工具输入该命令后,返回信息如下。完成证书轮换后,Kubernetes 组件会自动重启,然后新的证书就会生效。
轮换单个服务证书
运行rke cert rotate --service <ServiceName>
命令,可以将单个服务正在使用的证书替换为同一证书签发机构颁发的新证书。在命令行工具输入该命令后,返回信息如下。完成证书轮换后,Kubernetes 组件会自动重启,然后新的证书就会生效。
- etcd
- kubelet
- kube-apiserver
- kube-proxy
- kube-scheduler
- kube-controller-manager
以下代码示例演示的是替换kubelet组件使用的证书:
rke cert rotate --service kubelet
INFO[0000] Initiating Kubernetes cluster
INFO[0000] Rotating Kubernetes cluster certificates
INFO[0000] [certificates] Generating Node certificate
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0000] Rebuilding Kubernetes cluster with rotated certificates
.....
INFO[0033] [worker] Successfully restarted Worker Plane..
轮换 CA 证书
CA证书默认是10年有效期的,一般情况下无需轮换。如果需要轮换 CA 证书,您需要为所有的服务轮换证书。使用--rotate-ca选项,可以轮换 CA 证书和所有服务的证书。完成证书轮换后,Kubernetes 组件会自动重启,然后新的证书就会生效。
轮换 CA 证书会导致其他 system pods 重启,这些 pods 重启后也会使用新的 CA 证书:
- 网络组件 Pods(canal、calico、flannel 和 weave)
- Ingress Controller pods
- KubeDNS pods
rke cert rotate --rotate-ca
INFO[0000] Initiating Kubernetes cluster
INFO[0000] Rotating Kubernetes cluster certificates
INFO[0000] [certificates] Generating CA kubernetes certificates
INFO[0000] [certificates] Generating Kubernetes API server aggregation layer requestheader client CA certificates
INFO[0000] [certificates] Generating Kubernetes API server certificates
INFO[0000] [certificates] Generating Kube Controller certificates
INFO[0000] [certificates] Generating Kube Scheduler certificates
INFO[0000] [certificates] Generating Kube Proxy certificates
INFO[0000] [certificates] Generating Node certificate
INFO[0001] [certificates] Generating admin certificates and kubeconfig
INFO[0001] [certificates] Generating Kubernetes API server proxy client certificates
INFO[0001] [certificates] Generating etcd-xxxxx certificate and key
INFO[0001] [certificates] Generating etcd-yyyyy certificate and key
INFO[0001] [certificates] Generating etcd-zzzzz certificate and key
INFO[0001] Successfully Deployed state file at [./cluster.rkestate]
INFO[0001] Rebuilding Kubernetes cluster with rotated certificates
rke2安装的kubernetes集群轮换证书
默认情况下,RKE2 中的证书在 12 个月后过期。
轮换控制节点证书
如果证书已经过期或剩余的时间不足 90 天,则在 RKE2 重启时轮换证书。
从 v1.21.8+rke2r1 开始,你可以手动轮换证书。为此,建议先停止 rke2-server 进程,然后轮换证书,最后再次启动该进程:
systemctl stop rke2-server
rke2 certificate rotate
systemctl start rke2-server
注意:经过我的实践,systemctl stop rke2-server
会导致正在运行的 Pod 停止,如果你不想影响正在运行的 Pod,建议使用 systemctl restart rke2-server
你也可以通过传递 --service
标志来轮换单个服务,例如:rke2 certificate rotate --service api-server
。
轮换kube-controller-manager
和kube-scheduler
证书
rke2 certificate rotate
还有两个漏网之鱼kube-controller-manager
和kube-scheduler
,执行以下命令完成证书轮换。
echo "Rotating kube-controller-manager certificate"
rm -f /var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.{crt,key}
crictl rm -f $(crictl ps -q --name kube-controller-manager)
echo "Rotating kube-scheduler certificate"
rm -f /var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.{crt,key}
crictl rm -f $(crictl ps -q --name kube-scheduler)
参考链接:
https://github.com/rancher/rancher/issues/41125#issuecomment-1506620040
轮换工作节点证书
重启rke2-agent服务即可轮换工作节点证书。
systemctl restart rke2-agent
Rancher安装的kubernetes集群轮换证书
在Rancher中安装的Kubernetes集群进行证书轮换是一种常见的安全操作,可以确保集群的安全性。当证书过期或被撤销时,需要进行证书轮换。下面是Rancher安装的Kubernetes集群轮换证书的步骤:
- 进入Rancher管理界面,选择要进行证书轮换的Kubernetes集群。
- 在集群列表中,点击“三个点”按钮,选择“Rotate Certificates”或“轮换证书”。
- 在轮换证书页面中,可以选择轮换所有证书或者轮换单个服务的证书,点击“轮换”按扭。
- 完成证书轮换后,Kubernetes 组件会自动重启,然后新的证书就会生效。
注意事项:
Rancher拉起的rke2集群在UI界面操作轮换证书不能轮换所有证书,kube-controller-manager
和kube-scheduler
证书不会被轮换,参照前面的“rke2安装的kubernetes集群轮换证书”操作对这两个证书进行轮换。
证书轮换的过程中,Pod可能会被驱逐,因此最好在维护期间操作。