檢視次數:
設定檔適用性:級別 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": "/path/to/ca.crt"} 的條目設置為用戶端憑證授權機構檔案的位置信息。
  1. SSH 到相關節點並執行以下命令以查找 Kubelet 配置文件:
    ps -ef | grep kubelet
    輸出應返回類似於 --config /etc/kubernetes/kubelet/kubelet-config.json 的內容。
  2. 打開 Kubelet 配置檔案:
    sudo more /etc/kubernetes/kubelet/kubelet-config.json
  3. 驗證 "x509": {"clientCAFile:" 是否存在,並設置為用戶端憑證授權機構檔案的適當位置資訊。
  4. 如果沒有 "x509": {"clientCAFile:" 參數,請檢查是否有由 --config 指定的 Kubelet 配置檔案,並確認該檔案將 "authentication": { "x509": {"clientCAFile:" 設定為用戶端憑證授權機構檔案的位置信息。
Audit Method 2:
如果使用 API configz 端點,請考慮透過從執行 Kubelet 的節點提取即時配置來搜尋 "authentication"... "x509": {"clientCAFile": "/etc/kubernetes/pki/ca.crt"} 的狀態。
  1. 設定本地 Proxy 通訊埠及以下變數,並提供 Proxy 通訊埠號碼和節點名稱:
    • HOSTNAME_PORT="localhost-和-端口號"
    • 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=ip-192.168.31.226.aks.internal (example node name 
    from "kubectl get nodes") 
    
    curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

矯正性處理

Remediation Method 1:
如果要修改 Kubelet 配置檔案,請編輯 /etc/kubernetes/kubelet/kubelet-config.json 並將以下參數設為 false:
"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"} 的狀態。
Kubernetes 文件中查看 configmap 步驟,並重新執行審核過程中的 curl 命令以檢查 kubelet 配置變更:
kubectl proxy --port=8001 & 

export HOSTNAME_PORT=localhost:8001 (example host and port number) 
export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from 
"kubectl get nodes") 

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