在 Kubernetes 集群中,证书过期可能导致集群不可用,尤其是 API Server、Controller Manager、Scheduler 等组件所使用的证书。为了恢复集群的正常运行,您需要更新这些证书。以下是更新 Kubernetes 证书的基本步骤:
1. 检查证书状态
首先,确认哪些证书已经过期或即将过期。
sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "Not After"
您可以在 /etc/kubernetes/pki/ 目录下找到 Kubernetes 的证书文件,如 apiserver.crt、ca.crt、etcd/server.crt 等。
2. 自动更新证书(kubeadm 管理的集群)
如果您是使用 kubeadm 部署的 Kubernetes 集群,kubeadm 提供了更新证书的简便方法:
sudo kubeadm certs renew all
该命令会自动更新所有证书,包括 API Server、Controller Manager、Scheduler 等组件的证书。更新完成后,您可以查看新的证书有效期:
sudo kubeadm certs check-expiration
3. 手动更新证书
对于手动部署的 Kubernetes 集群,您可能需要自行生成和替换证书。以下是手动更新的步骤:
- 生成新的证书和私钥: 使用 openssl 或 cfssl 工具生成新的证书。例如,使用 openssl:
openssl genrsa -out apiserver.key 2048
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kube-apiserver"
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365
- 替换旧证书和密钥: 将生成的新的证书和密钥替换到 /etc/kubernetes/pki/ 目录下。注意确保文件名与旧的证书和密钥一致,如 apiserver.crt、apiserver.key 等。
重启相关 Kubernetes 组件: 替换证书后,您需要重启 Kubernetes 的组件,以便它们加载新的证书。
- 对于 kube-apiserver,使用以下命令:
sudo systemctl restart kube-apiserver
或者使用 Kubernetes 静态 Pod 文件的方式管理时,直接重启 kubelet 会自动重启这些组件。
4. 更新 kubelet 证书
kubelet 证书的更新稍有不同,您可以通过以下方式更新:
- 如果 kubelet 使用的是自动轮换的证书,您可以手动触发轮换:
sudo systemctl restart kubelet
- 如果 kubelet 没有自动轮换证书,您可以使用 kubeadm 重新生成:
sudo kubeadm certs renew kubelet
5. 检查证书更新状态
确保所有证书已正确更新并生效,可以再次检查证书的过期时间:
bash
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "Not After"
6. 备份新证书
在更新证书之后,建议将新生成的证书和密钥进行备份,以防日后需要恢复或排查问题。
总结
在 Kubernetes 集群中,证书的更新可以通过 kubeadm 工具自动完成,也可以通过手动生成和替换证书的方式来实现。对于使用 kubeadm 部署的集群,自动更新方法较为简单。对于非 kubeadm 管理的集群,则需要手动管理证书的生成和替换。无论哪种方法,更新后都需要重启相关的 Kubernetes 组件以使新证书生效。