協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Kubernetes 網路政策限制 Pod 流量
概觀
根據預設,Kubernetes 中沒有任何限制施加於 IP 位址、連接埠,或叢集中任何 Pod 之間或您的 Pod 與任何其他網路中的資源之間的連結。您可以使用 Kubernetes 網路政策來限制往返 Pod 之間的網路流量。如需詳細資訊,請參閱 Kubernetes 文件的網路政策
標準網路政策
您可以使用 標準NetworkPolicy來分割叢集中的 pod-to-pod 流量。這些網路政策會在 OSI 網路模型的第 3 層和第 4 層運作,可讓您控制 Amazon EKS 叢集內 IP 地址或連接埠層級的流量流程。標準網路政策的範圍是命名空間層級。
使用案例
-
分割工作負載之間的網路流量,以確保只有相關的應用程式可以互相通訊。
-
使用 政策在命名空間層級隔離租用戶,以強制執行網路分離。
範例
在下面的政策中,來自太陽命名空間中 Webapp Pod 的輸出流量受到限制。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: webapp-egress-policy namespace: sun spec: podSelector: matchLabels: role: webapp policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: moon podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080 - to: - namespaceSelector: matchLabels: name: stars podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080
此政策適用於 sun 命名空間role: webapp中具有 標籤的 Pod。
-
允許流量:TCP 連接埠上
moon命名空間role: frontend中具有 標籤的 Pod8080 -
允許流量:具有標籤角色的 Pod:TCP 連接埠
stars命名空間中的前端8080 -
封鎖流量:來自 Pod
webapp的所有其他傳出流量會隱含拒絕
管理員 (或叢集) 網路政策
您可以使用 ClusterNetworkPolicy強制執行適用於整個叢集的網路安全標準。您可以使用單一政策集中管理叢集中不同工作負載的網路存取控制,而不重複定義和維護每個命名空間的不同政策,無論其命名空間為何。
使用案例
-
集中管理 EKS 叢集中所有 (或一部分) 工作負載的網路存取控制。
-
定義整個叢集的預設網路安全狀態。
-
以更具營運效率的方式,將組織安全標準擴展到叢集的範圍。
範例
在下列政策中,您可以明確封鎖來自其他命名空間的叢集流量,以防止網路存取敏感工作負載命名空間。
apiVersion: networking.k8s.aws/v1alpha1 kind: ClusterNetworkPolicy metadata: name: protect-sensitive-workload spec: tier: Admin priority: 10 subject: namespaces: matchLabels: kubernetes.io/metadata.name: earth ingress: - action: Deny from: - namespaces: matchLabels: {} # Match all namespaces. name: select-all-deny-all
重要說明
下列組態支援適用於 Kubernetes 的 Amazon VPC CNI 外掛程式中的網路政策。
-
適用於標準和管理網路政策的 Amazon VPC CNI 外掛程式 1.21.0 版 (或更新版本)。
-
設定為
IPv4或IPv6地址的叢集。 -
您可以搭配 Pod 的安全群組來使用網路政策。有了網路政策,您就可以控制所有叢集內通訊。使用 Pod 的安全群組,您可以從 Pod 內的應用程式控制對 AWS 服務的存取。
-
您可以搭配自訂聯網和字首委派來使用網路政策。
考量事項
架構
-
使用 Kubernetes 專用 Amazon VPC CNI 外掛程式將 Kubernetes 專用 Amazon VPC CNI 外掛程式網路政策套用至您的叢集時,您只能將這些政策套用至 Amazon EC2 Linux 節點。您無法將這些政策套用至 Fargate 或 Windows 節點。
-
網路政策只會套用
IPv4或IPv6位址,但不能同時套用兩者。在IPv4叢集中,VPC CNI 會將IPv4位址指派給 Pod 並套用IPv4政策。在IPv6叢集中,VPC CNI 會將IPv6位址指派給 Pod 並套用IPv6政策。套用至IPv6叢集的任何IPv4網路政策規則都會遭到忽略。套用至IPv4叢集的任何IPv6網路政策規則都會遭到忽略。
網路政策
-
網路政策僅會套用至屬於部署一部分的 Pod。沒有
metadata.ownerReferences集合的獨立 Pod 無法套用網路政策。 -
您可以將多個網路政策套用至相同的 Pod。當設定了兩個以上選取相同 Pod 的政策,所有政策皆會套用至 Pod。
-
在所有網路政策中,單一 IP 位址範圍 (CIDR) 的連接埠和通訊協定組合數目上限為 24。選取器,如
namespaceSelector解析為一或多個 CIDRs。如果多個選擇器解析為單一 CIDR,或者您在相同或不同的網路政策中多次指定相同的直接 CIDR,這些都會計入此限制。 -
對於任何一種您的 Kubernetes 服務,服務連接埠必須與容器連接埠相同。如果您使用的是已命名連接埠,請也要在服務規格中使用相同的名稱。
管理員網路政策
-
管理員層政策 (先評估):所有管理員層 ClusterNetworkPolicies 都會在任何其他政策之前進行評估。在管理員層中,政策會依優先順序處理 (優先順序最低的數字優先)。動作類型會決定接下來會發生的情況。
-
拒絕動作 (最高優先順序):當具有拒絕動作的管理員政策符合流量時,無論任何其他政策為何,都會立即封鎖該流量。不會處理其他 ClusterNetworkPolicy 或 NetworkPolicy 規則。這可確保命名空間層級政策不會覆寫整個組織的安全控制。
-
允許動作:評估拒絕規則之後,使用允許動作的管理員政策會依優先順序 (優先順序最低的數字優先) 處理。當允許動作相符時,系統會接受流量,而不會進行進一步的政策評估。這些政策可以根據標籤選擇器授予多個命名空間的存取權,從而集中控制哪些工作負載可以存取特定資源。
-
傳遞動作:在管理員層政策中傳遞動作,將決策委派給較低的層。當流量符合通過規則時,評估會略過該流量的所有剩餘管理員層規則,並直接進入 NetworkPolicy 層。這可讓管理員將特定流量模式的控制明確委派給應用程式團隊。例如,您可以使用傳遞規則將命名空間內流量管理委派給命名空間管理員,同時對外部存取維持嚴格的控制。
-
-
網路政策層:如果沒有管理員層政策與拒絕或允許相符,或者如果通過動作相符,則會評估命名空間範圍的 NetworkPolicy 資源。這些政策可在個別命名空間內提供精細的控制,並由應用程式團隊管理。命名空間範圍政策只能比管理員政策更嚴格。他們無法覆寫管理員政策的拒絕決策,但可以進一步限制管理員政策允許或傳遞的流量。
-
基準層管理員政策:如果沒有管理員或命名空間範圍的政策符合流量,則會評估基準層 ClusterNetworkPolicies。這些提供可由命名空間範圍政策覆寫的預設安全狀態,允許管理員設定整個組織的預設值,同時為團隊提供視需要自訂的彈性。基準政策會依優先順序 (優先順序最低的數字優先) 進行評估。
-
預設拒絕 (如果沒有政策相符):此deny-by-default行為可確保只允許明確允許的連線,並維持強大的安全狀態。
移轉
-
如果您的叢集目前正在使用第三方解決方案來管理 Kubernetes 網路政策,您可以搭配 Kubernetes 專用 Amazon VPC CNI 外掛程式來使用那些相同的政策。然而,您必須移除現有的解決方案,如此才不會管理相同的政策。
警告
我們建議在移除網路政策解決方案後,更換所有曾套用該網路政策解決方案的節點。這是因為如果解決方案的 Pod 突然退出,流量規則可能會殘留。
安裝
-
網路政策功能會建立且需要稱為
policyendpoints.networking.k8s.aws的PolicyEndpoint自訂資源定義 (CRD)。自訂資源的PolicyEndpoint物件是由 Amazon EKS 管理。您不應修改或刪除這些資源。 -
如果您執行使用執行個體角色 IAM 憑證的 Pod 或連線至 EC2 IMDS,請小心檢查是否有會封鎖 EC2 IMDS 存取的網路政策。您可能需要新增網路政策以允許 EC2 IMDS 的存取權。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的執行個體中繼資料和使用者資料。
使用服務帳戶的 IAM 角色或 EKS Pod 身分識別的 Pod 不會存取 EC2 IMDS。
-
Kubernetes 專用 Amazon VPC CNI 外掛程式不會將網路政策套用至每個 Pod 的其他網路介面,而只會套用每個 Pod 的主要介面 (
eth0)。這會影響下列架構:-
ENABLE_V4_EGRESS變數設定為true的IPv6Pod。此變數可讓IPv4輸出功能將 IPv6 Pod 連線到IPv4端點,例如叢集外部的端點。IPv4輸出功能的運作方式是使用本機迴路 IPv4 地址建立額外的網路介面。 -
使用鏈結的網絡外掛程式(例如 Multus)時。由於這些外掛程式會將網路介面新增至每個 Pod,因此網路政策不會套用至鏈結的網路外掛程式。
-