如何将kubernetes的证书(ca、etcd-ca、front-proxy-ca)有效期更换成99年

Lance.Wu 发表于: 2025-08-15   最后更新时间: 2025-08-27 12:22:37  
{{totalSubscript}} 订阅, 180 游览

更新证书

更新证书前必须自定义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-ca100 年有效期

  • 所有子证书也更新为 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
更新于 2025-08-27

查看kubernetes更多相关的文章或提一个关于kubernetes的问题,也可以与我们一起分享文章