檢視次數:
設定檔適用性:級別 1
允許 Kubelet 管理 iptables。
Kubelets 可以根據您選擇的 pod 網路選項,自動管理對 iptables 的必要更改。建議讓 kubelets 管理對 iptables 的更改。這可確保 iptables 配置與 pod 網路配置保持同步。手動配置 iptables 並進行動態 pod 網路配置更改可能會妨礙 pod/容器之間以及與外界的通信。您可能會有過於限制或過於開放的 iptables 規則。
注意
注意
請參閱 Azure AKS 文件以獲取預設值。

影響

Kubelet 會管理系統上的 iptables 並保持同步。如果您使用其他 iptables 管理解決方案,則可能會出現一些衝突。

稽核

Audit Method 1:
如果使用 Kubelet 配置檔案,請檢查是否有 makeIPTablesUtilChains 的條目設置為 true
  1. SSH到相關節點,並在每個節點上執行以下命令以找到適當的Kubelet配置文件:
    ps -ef | grep kubelet
    上述命令的輸出應返回類似於 --config /etc/kubernetes/kubelet/kubelet-config.json 的內容,這是 Kubelet 配置檔案的 位置資訊。
  2. 開啟 Kubelet 設定檔:
    cat /etc/kubernetes/kubelet/kubelet-config.json
  3. 驗證 makeIPTablesUtilChains 參數是否存在,若存在則設為 true
  4. 如果 --make-iptables-util-chains 參數不存在,且有由 --config 指定的 Kubelet 配置檔,請確認該檔案未將 makeIPTablesUtilChains 設定為 false
Audit Method 2:
如果使用 API configz 端點,透過從執行 Kubelet 的節點提取即時配置,搜尋 authentication... "makeIPTablesUtilChains":true 的狀態。
  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:
編輯 /etc/kubernetes/kubelet/kubelet-config.json 並將以下參數設為 false:
"makeIPTablesUtilChains": true
Remediation Method 2:
如果使用可執行參數,請在每個工作節點上編輯 kubelet 服務檔案 /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf,並在 KUBELET_ARGS 變數字串的末尾添加以下參數:
--make-iptables-util-chains=true
Remediation Method 3:
如果使用 API configz 端點,請透過從執行 kubelet 的節點提取即時配置,搜尋 "makeIPTablesUtilChains": true 的狀態:
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