設定檔適用性:等級 1
一般不允許容器在
hostNetwork
標誌設置為 true
的情況下運行。在主機的網路命名空間中運行的容器可以訪問本地回環裝置,並可以訪問其他 pod 的網路流量。
應至少定義一個入場控制政策,不允許容器共享主機網路命名空間。
如果您需要運行需要訪問主機網路命名空間的容器,應在單獨的策略中定義,並且您應仔細檢查以確保只有有限的服務帳戶和用戶被授予使用該策略的權限。
![]() |
注意預設情況下,對於建立
hostNetwork 容器沒有任何限制。 |
影響
除非在特定授權的政策下運行,否則不允許使用
spec.hostNetwork: true
定義的 Pods。稽核
列出叢集中每個命名空間使用的策略,確保每個策略都不允許 hostNetwork 容器的進入。
考慮到手動檢查每個 pod 可能會很耗時,特別是在大型環境中,您可以使用更自動化的方法來篩選出 hostNetwork 設置為 true 的 pod。以下是使用 kubectl
和 jq 的命令:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | "\(.metadata.namespace)/\(.metadata.name)"'
OR
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | select(.metadata.namespace != "kube-system" and .metadata.namespace != "gatekeeper-system" and .metadata.namespace != "azure-arc" and .metadata.namespace != "azure-extensions-usage-system") | "\(.metadata.name) \(.metadata.namespace)"'
在建立 Pod 安全性政策時,
["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"]
命名空間預設會被排除。此命令以 JSON 格式檢索所有命名空間中的所有 pod,然後使用 jq 過濾出那些
hostNetwork
標誌設為 true
的 pod,最後格式化輸出以顯示每個匹配 pod 的命名空間和名稱。矯正性處理
在叢集中每個具有使用者工作負載的命名空間中添加策略,以限制
hostNetwork
容器的准入。可以在 Azure 入口網站中搜尋政策來找到 Pod 安全性政策和指派。詳細的逐步指南可以在此處找到:https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes