設定檔適用性:等級 1 - 工作節點
啟用 kubelet 伺服器憑證輪換,以避免因憑證過期而導致的停機,確保系統持續可用。
RotateKubeletServerCertificate
功能自動化更新過程,當現有憑證過期時,kubelet 會請求並輪換其服務憑證,從而支持 CIA(機密性、完整性和可用性)安全三元組。此功能僅在 kubelet 從
API 伺服器接收憑證時相關;如果憑證由外部機構或工具(如密碼保險箱)簽發,您需要獨立管理輪換過程。
注意此建議僅適用於 kubelet 從 API 伺服器獲取證書的情況。如果您的 kubelet 證書是由外部機構/工具(例如,密碼保險箱)簽發的,您需要手動實施輪換。
|
影響
啟用憑證輪換可避免因憑證過期而導致的潛在停機,從而確保 kubelet 服務的持續可用性和可靠性。
稽核
稽核方法 1:
-
SSH 進入每個節點並執行以下命令以查找 Kubelet 進程:
ps -ef | grep kubelet
-
如果命令輸出包含
--rotate-kubelet-server-certificate
參數,請確認其設置為 true。如果該參數不存在,請檢查由--config
參數指定的 Kubelet 配置文件:cat /etc/kubernetes/kubelet/kubelet-config.json
-
打開 Kubelet 配置檔:
sudo less /path/to/kubelet-config.json
-
驗證
RotateKubeletServerCertificate
參數是否存在於featureGates
部分,並且設置為 true。
稽核方法 2:
-
如果使用 API configz 端點,請考慮透過從執行 kubelet 的節點提取即時配置來搜尋
RotateKubeletServerCertificate:true
的狀態。設定本地 Proxy 通訊埠和以下變數,提供 Proxy 通訊埠號碼和節點名稱:kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=The-Name-Of-Node-To-Extract-Configuration kubectl get nodes
-
執行以下命令:
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
補救措施
修復方法 1:
-
如果修改 Kubelet 配置檔案,請編輯
/etc/kubernetes/kubelet/kubelet-config.json
檔案:{ "featureGates": { "RotateKubeletServerCertificate": true } }
-
確保 kubelet 服務檔案
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
沒有將--rotate-kubelet-server-certificate
參數設為 false,因為這會覆蓋 Kubelet 配置檔案。
補救方法 2:
-
如果使用可執行參數,請在每個工作節點上編輯 kubelet 服務檔案
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
,並在 KUBELET_ARGS 變數字串的末尾添加以下參數:--rotate-kubelet-server-certificate=true
補救方法 3:
-
如果使用 API configz 端點,請考慮透過從運行 kubelet 的節點提取即時配置來搜尋
RotateKubeletServerCertificate
的狀態。kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=ip-192.168.31.226.ec2.internal curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
對於所有三種修復方法:
重新啟動 kubelet 服務並檢查狀態。以下範例適用於使用 systemctl 管理服務時:
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l