設定檔適用性:等級 1 - 工作節點
確保為 Kubelet 驗證配置用於憑證的 Client CA 檔案以增強安全性。此配置至關重要,因為從 apiserver 到 kubelet 的連接(用於提取
pod 日誌、通過 kubectl 附加到運行中的 pod 以及啟用 kubelet 的端口轉發功能)終止於 kubelet 的 HTTPS 端點。預設情況下,apiserver
不會驗證 kubelet 的服務憑證,這使得這些連接在不受信任或公共網絡上容易受到中間人攻擊且不安全。配置 Kubelet 憑證驗證允許 apiserver 在處理任何請求之前驗證
Kubelet,從而保護這些交互。此設置要求在 apiserver 和 kubelet 上配置 TLS 以確保安全通信。
影響
您需要在 apiserver 和 kubelets 上配置 TLS。
審計
稽核方法 1:
注意Kubelet 可以透過配置檔案或命令列參數進行配置。命令列參數優先。審核 Kubelet 配置時,請檢查命令列參數和配置檔案條目。
|
-
SSH 進入每個節點並執行以下命令以查看活動的 Kubelet 進程詳細信息:
ps -ef | grep kubelet
-
從輸出中的 --config 參數識別配置檔案的位置資訊。使用以下命令查看檔案:
sudo less /path/to/kubelet-config.json
-
驗證是否已配置用戶端憑證授權檔案:
-
Kubelet 服務的命令列參數:
--client-ca-file=/path/to/client-ca-file
-
在 Kubelet 配置檔案中:
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
-
稽核方法 2:
通過使用 kubectl 檢查 Kubernetes API 的 "/configz" 端點來查看 Kubelet 的運行配置:
-
發現您叢集中所有的節點:
kubectl get nodes
-
使用 kubectl 在本地端口(例如 8080)啟動 Proxy:
kubectl proxy --port=8080
-
在另一個終端中,對每個節點運行以下命令:
export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
-
通過檢查 API 回應來驗證是否已配置用戶端憑證授權檔案:
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
補救措施
方法一:
-
SSH 進入每個節點。
-
定位 Kubelet 配置檔:
ps -ef | grep kubelet
-
使用以下命令查看配置檔案:
sudo less /path/to/kubelet-config.json
-
通過設置以下參數來配置用戶端憑證授權檔案:
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
-
重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
方法二:
-
如果使用命令列參數,請編輯 kubelet 服務檔案以包含以下參數:
--client-ca-file=/path/to/client-ca-file
-
對於使用 systemd 的系統,編輯位於 /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf 的檔案。
-
重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l