設定檔適用性:等級 1
啟用 kubelet 伺服器憑證輪替。
RotateKubeletServerCertificate
使 kubelet 在啟動其客戶端憑證後請求服務憑證,並在現有憑證過期時旋轉憑證。這種自動定期旋轉確保不會因憑證過期而導致停機,從而解決 CIA(機密性、完整性和可用性)安全三元組中的可用性問題。![]() |
注意此建議僅適用於您讓 kubelet 從 API 伺服器獲取其證書的情況。如果您的 kubelet 證書來自外部授權機構/工具(例如密碼保險箱),則需要自行實施輪換。
|
![]() |
注意請參閱 GKE 文件以了解預設值。
|
稽核
稽核方法 1:
- SSH 到每個節點並運行以下命令以查找 Kubelet 進程:
ps -ef | grep kubelet
- 如果上述命令的輸出包含
--rotate-kubelet-server-certificate
可執行參數,請確認其設置為 true。 - 如果該進程沒有
--rotate-kubelet-server-certificate
可執行參數,請檢查 Kubelet 配置文件。上述命令的輸出應該返回類似於--config /etc/kubernetes/kubelet-config.yaml
的內容,這是 Kubelet 配置檔案的位置信息。 -
開啟 Kubelet 配置檔:
cat /etc/kubernetes/kubelet-config.yaml
- 確認
featureGates
部分中是否存在RotateKubeletServerCertificate
參數並設定為true
。
稽核方法 2:
如果使用 api configz 端點,請考慮透過從運行 kubelet 的節點中提取即時配置來搜尋
"RotateKubeletServerCertificate":true
的狀態。設定本地 Proxy 通訊埠及以下變數,並提供 Proxy 通訊埠號碼及節點名稱:
HOSTNAME_PORT="localhost-and-port-number" NODE_NAME="The-Name-Of-Node-To-Extract-Configuration"
從 "kubectl get nodes" 的輸出中
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
補救
修復方法 1:
如果要修改 Kubelet 配置文件,請編輯 kubelet-config.json 文件
/etc/kubernetes/kubelet-config.yaml
,並將以下參數設置為 true:"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":
的狀態。**在重新配置現場叢集中的節點 Kubelet中查看詳細的逐步 configmap 程序,然後重新執行審核過程中的 curl 語句以檢查 kubelet 配置更改:
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") 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