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

備份當(dāng)前配置
# 備份 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 復(fù)制到你的用戶目錄并設(shè)置正確的權(quán)限
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é)點上重復(fù)更新 kubeconfig 和重啟組件的步驟。
重啟控制平面組件
證書更新后,需要重啟相關(guān)的控制平面組件以加載新證書。由于這些組件通常是以靜態(tài) Pod 方式運行,重啟節(jié)點上的 kubelet 服務(wù)即可:
sudo systemctl restart kubelet
kubelet 會重建所有控制平面的靜態(tài) Pod(apiserver, controller-manager, scheduler, etcd)。
驗證 Master 證書
運行命令檢查證書有效期,確認(rèn)已更新:
kubeadm certs check-expiration kubectl get nodes # 測試 kubectl 是否正常工作
處理 Node 節(jié)點證書
Node 節(jié)點(工作節(jié)點)的 kubelet 證書通常啟用了自動輪換機制(Kubernetes v1.12+ 默認(rèn)開啟)。主要需要確保該功能正常。
檢查 kubelet 自動輪換
在每個 Node 節(jié)點上,檢查 kubelet 配置:
cat /var/lib/kubelet/config.yaml | grep rotateCertificates # 或者查看進(jìn)程參數(shù) ps aux | grep kubelet | grep rotate
輸出中應(yīng)包含 rotateCertificates: true 或 --rotate-certificates 參數(shù)。
批準(zhǔn) CSR(如有必要)
如果某個 Node 節(jié)點的證書即將過期或已過期且未自動更新,用戶可以在 Master 節(jié)點上批準(zhǔn)其證書簽名請求(CSR):
# 查看所有 CSR kubectl get csr # 批準(zhǔn)所有 Pending 狀態(tài)的 CSR kubectl get csr -o name | xargs kubectl certificate approve
批準(zhǔn)后,kubelet 會自動下載新證書。
強制重建證書(僅在自動輪換失效時)
如果證書已過期且自動輪換失效,可在問題 Node 節(jié)點上執(zhí)行:
sudo systemctl stop kubelet sudo rm -rf /var/lib/kubelet/pki/* sudo systemctl start kubelet
之后在 Master 節(jié)點上批準(zhǔn)該節(jié)點新生成的 CSR。
更新后驗證
完成所有操作后,進(jìn)行整體驗證:
# 檢查所有節(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
長期維護(hù)建議
- 定期檢查:建議每 3 個月執(zhí)行一次
kubeadm certs check-expiration來監(jiān)控證書有效期。 - 選擇更新時機:在業(yè)務(wù)低峰期進(jìn)行證書更新操作,并在證書到期前至少 1 個月完成更新。
- 考慮自動化:對于大規(guī)模集群,可以考慮使用 Ansible 等自動化工具編排證書更新流程。
- 監(jiān)控與告警:將證書過期時間監(jiān)控集成到 Prometheus 和 Alertmanager 等監(jiān)控系統(tǒng)中,以便及時收到告警。
重要提醒
證書更新是關(guān)鍵的集群維護(hù)操作。務(wù)必提前備份,并在測試環(huán)境中熟練流程后再在生產(chǎn)環(huán)境操作。對于 HA 集群,注意證書的同步問題。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Podman開機自啟容器實現(xiàn)過程及與Docker對比
這篇文章主要為大家介紹了Podman開機自啟容器實現(xiàn)過程,通過示例代碼的形式進(jìn)行演繹過程,有需要的朋友可以參考下,希望可以有所幫助2021-09-09
ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG
這篇文章主要為大家介紹了ES業(yè)務(wù)數(shù)據(jù)遷移遇到的BUG精度問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Kubernetes k8s configmap 容器技術(shù)解析
這篇文章主要為大家介紹了k8s configmap 容器技術(shù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
K8s中的臨時容器Ephemeral?Containers使用
這篇文章主要介紹了K8s中的臨時容器Ephemeral?Containers使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
訪問k8s集群部署的微服務(wù)內(nèi)部服務(wù)接口問題
文章介紹了在Kubernetes集群中訪問微服務(wù)內(nèi)部服務(wù)接口的幾種方法,包括通過Pod的localhost訪問、使用服務(wù)名和DNS解析、以及通過注冊中心的地址訪問2026-02-02

