k8s采坑記 - 證書過期之kubeadm重新生成證書
重新生成證書
檢查過期
新版本(1.15+):kubeadm certs check-expiration
或
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
其他同理
證書備份
cp -rp /etc/kubernetes /etc/kubernetes.bak
移除過期證書
rm -f /etc/kubernetes/pki/apiserver*
rm -f /etc/kubernetes/pki/front-proxy-client.*
rm -rf /etc/kubernetes/pki/etcd/healthcheck-client.*
rm -rf /etc/kubernetes/pki/etcd/server.*
rm -rf /etc/kubernetes/pki/etcd/peer.*
備注:可以使用命令
openssl x509 -in [證書全路徑] -noout -text查看證書詳情。
重新生成證書
老版本:kubeadm alpha certs renew all
或
新版本(1.15+):kubeadm certs renew all 使用該命令不用提前刪除過期證書
重新生成配置文件
kubeadm 在生成 kubeconfig 文件時,需要關聯 Kubernetes 集群的核心鏡像(如 apiserver、controller-manager 等),而這些鏡像的版本需與集群版本嚴格匹配。當未明確指定版本時,kubeadm 會嘗試從遠程倉庫(默認是 k8s.gcr.io)獲取最新版本,但如果本地 kubeadm 版本過舊,可能無法兼容遠程最新版本,因此會自動回退到歷史穩定版本。通過 --kubernetes-version 明確指定版本,可強制 kubeadm 使用目標版本,避免自動回退:remote version is much newer: v1.33.4; falling back to: stable-1.22。同時注意:確保 kubeadm、kubelet、kubectl 三者版本一致(主版本必須相同,如均為 v1.28.x),否則可能出現組件兼容性問題。
# 查看集群版本
kubectl get no
v1.22.1
# 重新生成配置
mv /etc/kubernetes/*.conf /tmp/
老版本:kubeadm alpha phase kubeconfig all
或
新版本(1.15+):kubeadm init phase kubeconfig all --kubernetes-version v1.22.1
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/scheduler.conf"
# 更新kubectl配置
cp -f /etc/kubernetes/admin.conf ~/.kube/config
重啟kubelet
systemctl restart kubelet
systemctl status kubelet
systemctl stop kubelet
證書過期時間確認
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
其他同理
集群確認
kubectl get no
# 如果發現集群,能讀不能寫,則請重啟一下組件:
docker ps | grep apiserver
docker ps | grep scheduler
docker ps | grep controller-manager
docker restart 容器標識
做一個有底蘊的軟件工作者

浙公網安備 33010602011771號