由于 CA 根证书的有效期通常为 10 年,本篇文章将详细介绍如何处理 CA 根证书过期问题,并提供替换过程的完整教程。
使用 kubeadm certs check-expiration
检查证书状态。
kubeadm certs check-expiration
输出中会列出所有证书的过期时间。
在进行任何证书更新操作之前,备份现有证书文件,以防止出现问题时可以恢复。
备份证书目录:
tar -czvf /root/kubernetes-pki-backup.tar.gz /etc/kubernetes/pki
备份kubelet:
tar -czvf /root/kubernetes-kubelet-pki-backup.tar.gz /var/lib/kubelet/pki
cp /etc/kubernetes/kubelet.conf /root/kubelet.conf.bak
删除需要替换的证书
rm -rf /etc/kubernetes/pki/ca.*
rm -rf /etc/kubernetes/pki/etcd/ca.*
rm -rf /etc/kubernetes/pki/front-proxy-ca.*
生成新的 CA 证书:
kubeadm init phase certs ca
这会在 /etc/kubernetes/pki
中生成新的 CA 证书:
ca.crt
ca.key
分发 CA 证书到其他节点:
/etc/kubernetes/pki
目录。scp /etc/kubernetes/pki/ca.* <node-ip>:/etc/kubernetes/pki/
生成新的 etcd-ca 证书:
kubeadm init phase certs etcd-ca
生成的文件位于:
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
分发 etcd-ca 文件到其他节点:
如果是多节点集群,将 etcd-ca 文件分发:
scp /etc/kubernetes/pki/etcd/ca.* <node-ip>:/etc/kubernetes/pki/etcd/
生成新的 etcd-ca 证书:
kubeadm init phase certs front-proxy-ca
分发 etcd-ca 文件到其他节点:
如果是多节点集群,将 etcd-ca 文件分发:
scp /etc/kubernetes/pki/front-proxy-ca.* <node-ip>:/etc/kubernetes/pki/
移除权限信息:
rm -rf /etc/kubernetes/kubelet.conf
rm -rf /var/lib/kubelet/pki/kubelet*
重新生产
注意,kubelet是对应的node用户,一般是当前机器的名字,如:
node01
也可以查看之前的kubelet用的是哪个用户权限:
cat /root/kubelet.conf.bak
kubeadm kubeconfig user --org system:nodes --client-name system:node:$NodeName > /etc/kubernetes/kubelet.conf
下发组件更新
kubeadm certs renew all
重启kubelet,让证书生效
systemctl restart kubelet
重新生成 kubectl 访问集群权限:
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
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
检查更新后的证书状态:
再次运行:
kubeadm certs check-expiration
确认所有证书的过期时间已正确更新。
检查集群健康状态:
确认节点和服务状态正常:
kubectl get nodes
kubectl get pods -A
/etc/kubernetes/pki
目录的备份。journalctl -u kubelet -f