更新证书
更新证书前必须自定义
kubeadm
工具设置有效为100年
1. 备份原始证书
⚠️ 必须做备份,否则失败就无法恢复。
mkdir -p /etc/kubernetes/pki.bak_$(date +%Y%m%d)
cp -r /etc/kubernetes/pki/* /etc/kubernetes/pki.bak_$(date +%Y%m%d)/
cp -r /etc/kubernetes/*.conf /etc/kubernetes/pki.bak_$(date +%Y%m%d)/
2. 删除旧 CA 证书
只删除需要重新生成的 CA 证书(不要删除 pki 目录里所有东西!)
cd /etc/kubernetes/pki
rm -f ca.* etcd/ca.* front-proxy-ca.*
3. 重新生成 CA(100 年)
使用您编译过的 kubeadm:
# 生成 Kubernetes 主 CA
kubeadm init phase certs ca
# 生成 etcd CA
kubeadm init phase certs etcd-ca
# 生成 front-proxy CA
kubeadm init phase certs front-proxy-ca
4. 重新签发子证书
所有依赖新 CA 的证书都要更新:
kubeadm certs renew all
5. 重新生成 kubeconfig 文件
因为 admin.conf、controller-manager.conf、scheduler.conf 使用的 client-cert 也依赖 CA,需要重新生成:
kubeadm init phase kubeconfig all
6. 验证证书有效期
kubeadm certs check-expiration
此时应该看到:
ca
/etcd-ca
/front-proxy-ca
→ 100 年有效期所有子证书也更新为 100 年
7. 分发证书(多控制平面集群)
如果有多 Master 节点,需要分发:
scp -r /etc/kubernetes/pki/* root@<other-master>:/etc/kubernetes/pki/
scp -r /etc/kubernetes/*.conf root@<other-master>:/etc/kubernetes/
cp /etc/kubernetes/admin.conf ~/.kube/config
#或者
cat /etc/kubernetes/admin.conf >~/.kube/config
8. 重启组件
让 kube-apiserver、etcd、controller-manager、scheduler 重新加载证书。
docker
docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart
containerd:
crictl ps |grep -E 'kube-apiserver|kube-controller-manager|kube-scheduler|etcd' | awk -F ' ' '{print $1}' |xargs crictl stop
crictl ps -a |grep Exited |awk '{print $1}' |xargs crictl rm
Kubelet 会自动拉起新容器。
9. 验证集群
kubectl get nodes
kubectl get pods -A
确认集群工作正常。
还原证书
1. 恢复证书和 kubeconfig
把备份文件拷贝回来覆盖现有:
# 假设备份目录是 /etc/kubernetes/pki.bak_20250827
cp -r /etc/kubernetes/pki.bak_20250827/* /etc/kubernetes/pki/
cp -r /etc/kubernetes/pki.bak_20250827/*.conf /etc/kubernetes/
2. 分发到其他控制平面节点(多 Master 集群)
在所有 Master 节点执行相同的恢复,或者直接从主节点拷贝:
scp -r /etc/kubernetes/pki/* root@<other-master>:/etc/kubernetes/pki/
scp -r /etc/kubernetes/*.conf root@<other-master>:/etc/kubernetes/
让 kube-apiserver、etcd、controller-manager、scheduler 重新加载证书。
cp /etc/kubernetes/admin.conf ~/.kube/config
#或者
cat /etc/kubernetes/admin.conf >~/.kube/config
3. 重启组件
恢复完成后,让组件重新加载旧证书:
docker
docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart
containerd:
crictl ps |grep -E 'kube-apiserver|kube-controller-manager|kube-scheduler|etcd' | awk -F ' ' '{print $1}' |xargs crictl stop
crictl ps -a |grep Exited |awk '{print $1}' |xargs crictl rm
4. 验证
检查证书有效期是否恢复到原始(例如 9 年的 CA):
kubeadm certs check-expiration
检查集群是否恢复:
kubectl get nodes
kubectl get pods -A