Kubernetes 證書過期災難?四步緊急處理方案
在Kubernetes(K8s)運維中,證書管理往往是容易被忽視的關鍵環(huán)節(jié)。許多運維團隊在集群搭建初期配置好證書后,便很少再去關注,直到某天集群突然不可用,才發(fā)現(xiàn)——證書過期了!
證書過期可能導致API Server拒絕連接、節(jié)點失聯(lián)、Pod調(diào)度失敗,甚至整個集群癱瘓。
本文將深入介紹K8s證書管理的相關細節(jié),幫助你避免因證書問題導致的災難性故障。
1. 哪些證書容易成為“定時炸彈”?
Kubernetes集群依賴多種證書進行安全通信,主要包括:
(1) CA證書(根證書)
用于簽發(fā)其他證書,一旦CA證書過期,所有依賴它的證書都會失效。
默認有效期通常為10年,但許多團隊忘記更新。
(2) API Server證書
控制平面通信的核心證書,過期會導致kubectl無法訪問集群。
(3) etcd證書
如果etcd證書過期,K8s將無法讀寫數(shù)據(jù),集群可能完全崩潰。
(4) kubelet客戶端證書
每個節(jié)點的kubelet使用該證書與API Server通信,過期會導致節(jié)點失聯(lián)。
(5) Service Account Token
雖然不是傳統(tǒng)證書,但也有過期時間(默認1年),影響Pod與API Server的認證。
2. 證書過期的典型故障現(xiàn)象
當K8s證書過期時,可能會出現(xiàn)以下問題:
故障現(xiàn)象 | 可能過期的證書 |
kubectl get nodes超時 | API Server證書或kubeconfig |
節(jié)點狀態(tài)變?yōu)?nbsp;NotReady | kubelet客戶端證書 |
Pod調(diào)度失敗,報x509錯誤 | Service Account Token |
etcd集群不可用 | etcd證書 |
3. 如何檢測證書是否即將過期?
方法1:使用kubeadm檢查(適用于kubeadm部署的集群)
kubeadm certs check-expiration
輸出示例:
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Aug 05, 2025 12:11 UTC 91d ca no
apiserver Aug 05, 2025 12:11 UTC 91d ca no
apiserver-etcd-client Aug 05, 2025 12:11 UTC 91d etcd-ca no
apiserver-kubelet-client Aug 05, 2025 12:11 UTC 91d ca no
方法2:手動檢查單個證書
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
輸出:
notBefore=May 15 08:00:00 2023 GMT
notAfter=May 12 08:23:00 2024 GMT # 過期時間
方法3:使用Prometheus監(jiān)控(長期方案)
配置kube-cert-exporter或自定義腳本,結合告警系統(tǒng)(如Alertmanager)提前預警。
4. 證書更新處理方案
(1) 使用kubeadm自動續(xù)期所有證書
kubeadm certs renew all
(2) 重啟控制平臺組件
docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart
(3) 重啟kubelet服務
systemctl restart kubelet
(4) 檢查容器狀態(tài)、kubelet服務狀態(tài)和message日志是否有報錯等。
注:如果有多臺Master主機,需要在每臺機器上重復上面步驟。