Kubernetes 證書過期災(zāi)難?四步緊急處理方案
在Kubernetes(K8s)運(yùn)維中,證書管理往往是容易被忽視的關(guān)鍵環(huán)節(jié)。許多運(yùn)維團(tuán)隊(duì)在集群搭建初期配置好證書后,便很少再去關(guān)注,直到某天集群突然不可用,才發(fā)現(xiàn)——證書過期了!
證書過期可能導(dǎo)致API Server拒絕連接、節(jié)點(diǎn)失聯(lián)、Pod調(diào)度失敗,甚至整個(gè)集群癱瘓。
本文將深入介紹K8s證書管理的相關(guān)細(xì)節(jié),幫助你避免因證書問題導(dǎo)致的災(zāi)難性故障。
1. 哪些證書容易成為“定時(shí)炸彈”?
Kubernetes集群依賴多種證書進(jìn)行安全通信,主要包括:
(1) CA證書(根證書)
用于簽發(fā)其他證書,一旦CA證書過期,所有依賴它的證書都會(huì)失效。
默認(rèn)有效期通常為10年,但許多團(tuán)隊(duì)忘記更新。
(2) API Server證書
控制平面通信的核心證書,過期會(huì)導(dǎo)致kubectl無法訪問集群。
(3) etcd證書
如果etcd證書過期,K8s將無法讀寫數(shù)據(jù),集群可能完全崩潰。
(4) kubelet客戶端證書
每個(gè)節(jié)點(diǎn)的kubelet使用該證書與API Server通信,過期會(huì)導(dǎo)致節(jié)點(diǎn)失聯(lián)。
(5) Service Account Token
雖然不是傳統(tǒng)證書,但也有過期時(shí)間(默認(rèn)1年),影響Pod與API Server的認(rèn)證。
2. 證書過期的典型故障現(xiàn)象
當(dāng)K8s證書過期時(shí),可能會(huì)出現(xiàn)以下問題:
故障現(xiàn)象 | 可能過期的證書 |
kubectl get nodes超時(shí) | API Server證書或kubeconfig |
節(jié)點(diǎn)狀態(tài)變?yōu)?nbsp;NotReady | kubelet客戶端證書 |
Pod調(diào)度失敗,報(bào)x509錯(cuò)誤 | Service Account Token |
etcd集群不可用 | etcd證書 |
3. 如何檢測(cè)證書是否即將過期?
方法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:手動(dòng)檢查單個(gè)證書
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 # 過期時(shí)間
方法3:使用Prometheus監(jiān)控(長(zhǎng)期方案)
配置kube-cert-exporter或自定義腳本,結(jié)合告警系統(tǒng)(如Alertmanager)提前預(yù)警。
4. 證書更新處理方案
(1) 使用kubeadm自動(dòng)續(xù)期所有證書
kubeadm certs renew all
(2) 重啟控制平臺(tái)組件
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服務(wù)
systemctl restart kubelet
(4) 檢查容器狀態(tài)、kubelet服務(wù)狀態(tài)和message日志是否有報(bào)錯(cuò)等。
注:如果有多臺(tái)Master主機(jī),需要在每臺(tái)機(jī)器上重復(fù)上面步驟。