設定檔適用性:等級 1
啟用使用憑證的 Kubelet 驗證。
從 apiserver 到 kubelet 的連線用於擷取 pod 的日誌、透過 kubectl 附加到正在運行的 pod,以及使用 kubelet 的端口轉發功能。這些連線終止於
kubelet 的 HTTPS 端點。預設情況下,apiserver 不會驗證 kubelet 的服務憑證,這使得連線容易受到中間人攻擊,並且在不受信任和/或公共網路上運行不安全。啟用
Kubelet 憑證驗證可確保 apiserver 在提交任何請求之前能夠驗證 Kubelet。
注意請參閱 Azure AKS 文件以了解預設值。
|
影響
您需要在 apiserver 和 kubelets 上配置 TLS。
稽核
Audit Method 1如果使用 Kubelet 配置檔案,請檢查是否有
"x509": {"clientCAFile:" 的條目設置為用戶端憑證授權機構檔案的 位置資訊。-
SSH到相關節點。
-
在每個節點上執行以下命令以找到適當的 Kubelet 配置檔案:
ps -ef | grep kubelet
輸出應返回類似於--config /etc/kubernetes/kubelet/kubelet-config.json的內容,這是 Kubelet 配置檔案的位置信息。 -
打開 Kubelet 配置檔案:
sudo more /etc/kubernetes/kubelet/kubelet-config.json
-
驗證
"x509": {"clientCAFile:"參數是否存在,並設置為用戶端憑證授權機構檔案的位置信息。
如果
Audit Method 2"x509": {"clientCAFile:" 參數不存在,請檢查是否有由 --config 指定的 Kubelet 配置檔案,並確認該檔案將 "authentication": { "x509": {"clientCAFile:" 設定為用戶端憑證授權機構檔案的位置信息。如果使用 api configz 端點,請透過從執行 kubelet 的節點提取即時配置,搜尋
authentication.. x509":("clientCAFile":"/etc/kubernetes/pki/ca.crt 的狀態。-
設定本地 Proxy 通訊埠及以下變數,並提供 Proxy 通訊埠號碼及節點名稱:
HOSTNAME_PORT="localhost-and-port-number" NODE_NAME="The- Name-Of-Node-To-Extract-Configuration" from the output of "kubectl get nodes"kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=ip-192.168.31.226.aks.internal curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
補救
Remediation Method 1如果要修改 Kubelet 配置檔案,請編輯
kubelet-config.json 檔案 /etc/kubernetes/kubelet/kubelet-config.json 並設定以下參數:"authentication": { "x509": {"clientCAFile:" to the location of the client CA file.Remediation Method 2如果使用可執行參數,請在每個工作節點上編輯 kubelet 服務檔案
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf,並在 KUBELET_ARGS 變數字串的末尾添加以下參數:--client-ca-file=<path/to/client-ca-file>Remediation Method 3
如果使用 api configz 端點,請透過從執行 kubelet 的節點提取即時配置,搜尋
"authentication.*x509":("clientCAFile":"/etc/kubernetes/pki/ca.crt" 的狀態。在重新配置節點的 Kubelet 於即時叢集中查看詳細的逐步 configmap 程序,然後重新執行來自審核過程的 curl 語句以檢查 kubelet 配置變更:
kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001
export NODE_NAME=ip-192.168.31.226.aks.internal
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
For all three remediations:根據您的系統,重新啟動
kubelet服務並檢查狀態:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
