kubeadm更新kubernetes證書實現(xiàn)方式
現(xiàn)象
在 Kubernetes 的運維工作中,k8s證書需要實時監(jiān)控,避免因過期導致kubelet 報錯,集群無法訪問,比如像這樣:
kubelet 報 x509: certificate has expired or is not yet valid
那么當出現(xiàn)證書過期的時候,應該如何續(xù)期呢,下面就基于 kubeadm 安裝的 kubernetes 集群做續(xù)期操作。
查看證書有效期
ssh 登錄k8s集群隨機master 節(jié)點執(zhí)行,查看輸出,只要 RESIDUAL TIME < 30 天,就建議提前續(xù)期,防止遺忘導致過期。
kubeadm certs check-expiration
輸出示例:
CERTIFICATE EXPIRES RESIDUAL TIME apiserver 2025-09-10 7d apiserver-etcd-client 2025-09-10 7d front-proxy-client 2025-09-10 7d ...
更新證書流程

備份當前配置
# 備份 Kubernetes 配置目錄 cp -r /etc/kubernetes /etc/kubernetes-$(date +%Y%m%d).bak # 如有必要,備份 etcd 數(shù)據(jù)目錄 cp -r /data/etcd /data/etcd-$(date +%Y%m%d).bak # 備份 kubeconfig 文件 cp ~/.kube/config ~/.kube/config.bak.$(date +%F)
說明:
- /etc/kubernetes/pki 目錄放證書;
- /etc/kubernetes/manifests 是靜態(tài) Pod 定義
注意:備份操作需要在所有 master 節(jié)點上都需要執(zhí)行
更新 Master 節(jié)點證書
Master 節(jié)點上的證書更新是操作的核心,請在所有 Master 節(jié)點上執(zhí)行以下操作:
更新所有證書
sudo kubeadm certs renew all
此命令會更新 /etc/kubernetes/pki/ 目錄下的所有證書,并生成新的 admin.conf、controller-manager.conf、scheduler.conf 等文件。
更新 kubeconfig 文件
將新生成的 admin.conf 復制到你的用戶目錄并設置正確的權限
sudo cp /etc/kubernetes/admin.conf ~/.kube/config sudo chown $(id -u):$(id -g) ~/.kube/config
注意:對于高可用 (HA) 集群,在完成一個 Master 節(jié)點的證書更新后,需要將更新的證書文件(通常在 /etc/kubernetes/pki/ 目錄下,但注意不要覆蓋仍有效的 CA 密鑰)手動同步到其他 Master 節(jié)點,并在每個節(jié)點上重復更新 kubeconfig 和重啟組件的步驟。
重啟控制平面組件
證書更新后,需要重啟相關的控制平面組件以加載新證書。由于這些組件通常是以靜態(tài) Pod 方式運行,重啟節(jié)點上的 kubelet 服務即可:
sudo systemctl restart kubelet
kubelet 會重建所有控制平面的靜態(tài) Pod(apiserver, controller-manager, scheduler, etcd)。
驗證 Master 證書
運行命令檢查證書有效期,確認已更新:
kubeadm certs check-expiration kubectl get nodes # 測試 kubectl 是否正常工作
處理 Node 節(jié)點證書
Node 節(jié)點(工作節(jié)點)的 kubelet 證書通常啟用了自動輪換機制(Kubernetes v1.12+ 默認開啟)。主要需要確保該功能正常。
檢查 kubelet 自動輪換
在每個 Node 節(jié)點上,檢查 kubelet 配置:
cat /var/lib/kubelet/config.yaml | grep rotateCertificates # 或者查看進程參數(shù) ps aux | grep kubelet | grep rotate
輸出中應包含 rotateCertificates: true 或 --rotate-certificates 參數(shù)。
批準 CSR(如有必要)
如果某個 Node 節(jié)點的證書即將過期或已過期且未自動更新,用戶可以在 Master 節(jié)點上批準其證書簽名請求(CSR):
# 查看所有 CSR kubectl get csr # 批準所有 Pending 狀態(tài)的 CSR kubectl get csr -o name | xargs kubectl certificate approve
批準后,kubelet 會自動下載新證書。
強制重建證書(僅在自動輪換失效時)
如果證書已過期且自動輪換失效,可在問題 Node 節(jié)點上執(zhí)行:
sudo systemctl stop kubelet sudo rm -rf /var/lib/kubelet/pki/* sudo systemctl start kubelet
之后在 Master 節(jié)點上批準該節(jié)點新生成的 CSR。
更新后驗證
完成所有操作后,進行整體驗證:
# 檢查所有節(jié)點狀態(tài)是否為 Ready kubectl get nodes # 檢查 kube-system 命名空間下的所有 Pod 是否運行正常 kubectl get pods -n kube-system # 可以創(chuàng)建一個測試 Pod 并執(zhí)行命令 kubectl run test-pod --image=nginx --restart=Never --rm -it -- nginx -v
長期維護建議
- 定期檢查:建議每 3 個月執(zhí)行一次
kubeadm certs check-expiration來監(jiān)控證書有效期。 - 選擇更新時機:在業(yè)務低峰期進行證書更新操作,并在證書到期前至少 1 個月完成更新。
- 考慮自動化:對于大規(guī)模集群,可以考慮使用 Ansible 等自動化工具編排證書更新流程。
- 監(jiān)控與告警:將證書過期時間監(jiān)控集成到 Prometheus 和 Alertmanager 等監(jiān)控系統(tǒng)中,以便及時收到告警。
重要提醒
證書更新是關鍵的集群維護操作。務必提前備份,并在測試環(huán)境中熟練流程后再在生產(chǎn)環(huán)境操作。對于 HA 集群,注意證書的同步問題。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
kubelet為cadvisor添加namespace/pod/container標簽示例詳解
這篇文章主要為大家介紹了kubelet為cadvisor添加namespace/pod/container標簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Kubernetes應用配置管理創(chuàng)建使用詳解
這篇文章主要為大家介紹了Kubernetes應用配置管理創(chuàng)建使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11

