kubernetes kubelet證書到期解決辦法


背景

Kubelet 使用證書進行 Kubernetes API 的認證。 默認情況下,這些證書的簽發期限為一年,所以不需要太頻繁地進行更新。
kubernetes 1.8版本中包含beta特性kubelet證書輪換, 在當前證書即將過期時,將自動生成新的秘鑰,並從 Kubernetes API 申請新的證書。 一旦新的證書可用,它將被用於與 Kubernetes API 間的連接認證。

問題說明

kubelet證書默認有效期是一年,這樣一年之后我們的node節點就會處於not ready的狀態,為了避免這個問題就需要想一個解決方案。

curl -s -L -o /bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod a+x /bin/cfssl-certinfo
 cfssl-certinfo -cert /etc/kubernetes/ssl/kubelet.crt

解決方案一

證書替換

使用admin證書替換kubelet證書。

備份 mkdir  ~/sslback && mv /etc/kubernetes/kubelet.kubeconfig  ~/sslback/
使用admin證書文件替換
cp ~/.kube/config /etc/kubernetes/kubelet.kubeconfig 
systemctl  restart kubelet && systemctl  status  kubelet

重新請求證書

手動簽發,在 kubelet 首次啟動后,如果用戶 Token 沒問題,並且 RBAC 也做了相應的設置,那么此時在集群內應該能看到 kubelet 發起的 CSR 請求 ,必須通過后kubernetes 系統才會將該 Node 加入到集群。

在證書過期node刪除kubelet相關證書文件
rm -rf /etc/kubernetes/kubelet.kubeconfig
rm -rf /etc/kubernetes/ssl/kubelet.*
systemctl  restart kubelet && systemctl  status  kubelet
自動生成了kubelet kubeconfig 文件和公私鑰
查看未授權的CSR請求
kubectl get csr
通過CSR 請求:
kubectl certificate approve csr
查看重新生成的證書文件
ll /etc/kubernetes/ssl/kubelet.*
kubectl  get nodes --show-labels

# 預防方案
kubelet 進程接收 --rotate-certificates 參數,該參數決定 kubelet 在當前使用的 證書即將到期時,是否會自動申請新的證書
kube-controller-manager 進程接收 --cluster-signing-duration 參數 (在 1.19 版本之前為 --experimental-cluster-signing-duration),用來 控制簽發證書的有效期限。
# 理解證書輪換配置
當 kubelet 啟動時,如被配置為自舉(使用--bootstrap-kubeconfig 參數),kubelet 會使用其初始證書連接到 Kubernetes API ,並發送證書簽名的請求。 可以通過以下方式查看證書簽名請求的狀態:
kubectl get csr
最初,來自節點上 kubelet 的證書簽名請求處於 Pending 狀態。 如果證書簽名請求滿足特定條件, 控制器管理器會自動批准,此時請求會處於 Approved 狀態。 接下來,控制器管理器會簽署證書, 證書的有效期限由 --cluster-signing-duration 參數指定,簽署的證書會被附加到證書簽名請求中。

Kubelet 會從 Kubernetes API 取回簽署的證書,並將其寫入磁盤,存儲位置通過 --cert-dir 參數指定。 然后 kubelet 會使用新的證書連接到 Kubernetes API。

當簽署的證書即將到期時,kubelet 會使用 Kubernetes API,發起新的證書簽名請求。 同樣地,控制器管理器會自動批准證書請求,並將簽署的證書附加到證書簽名請求中。 Kubelet 會從 Kubernetes API 取回簽署的證書,並將其寫入磁盤。 然后它會更新與 Kubernetes API 的連接,使用新的證書重新連接到 Kubernetes API。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM