使用 Kubernetes 網路政策限制 Pod 流量 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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中具有 標籤的 Pod 8080

  • 允許流量:具有標籤角色的 Pod:TCP 連接埠stars命名空間中的前端 8080

  • 封鎖流量:來自 Pod webapp 的所有其他傳出流量會隱含拒絕

管理員 (或叢集) 網路政策

EKS 網路政策評估順序的虛構

您可以使用 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 版 (或更新版本)。

  • 設定為 IPv4IPv6 地址的叢集。

  • 您可以搭配 Pod 的安全群組來使用網路政策。有了網路政策,您就可以控制所有叢集內通訊。使用 Pod 的安全群組,您可以從 Pod 內的應用程式控制對 AWS 服務的存取。

  • 您可以搭配自訂聯網字首委派來使用網路政策。

考量事項

架構

  • 使用 Kubernetes 專用 Amazon VPC CNI 外掛程式將 Kubernetes 專用 Amazon VPC CNI 外掛程式網路政策套用至您的叢集時,您只能將這些政策套用至 Amazon EC2 Linux 節點。您無法將這些政策套用至 Fargate 或 Windows 節點。

  • 網路政策只會套用 IPv4IPv6 位址,但不能同時套用兩者。在 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 服務,服務連接埠必須與容器連接埠相同。如果您使用的是已命名連接埠,請也要在服務規格中使用相同的名稱。

管理員網路政策

  1. 管理員層政策 (先評估):所有管理員層 ClusterNetworkPolicies 都會在任何其他政策之前進行評估。在管理員層中,政策會依優先順序處理 (優先順序最低的數字優先)。動作類型會決定接下來會發生的情況。

    • 拒絕動作 (最高優先順序):當具有拒絕動作的管理員政策符合流量時,無論任何其他政策為何,都會立即封鎖該流量。不會處理其他 ClusterNetworkPolicy 或 NetworkPolicy 規則。這可確保命名空間層級政策不會覆寫整個組織的安全控制。

    • 允許動作:評估拒絕規則之後,使用允許動作的管理員政策會依優先順序 (優先順序最低的數字優先) 處理。當允許動作相符時,系統會接受流量,而不會進行進一步的政策評估。這些政策可以根據標籤選擇器授予多個命名空間的存取權,從而集中控制哪些工作負載可以存取特定資源。

    • 傳遞動作:在管理員層政策中傳遞動作,將決策委派給較低的層。當流量符合通過規則時,評估會略過該流量的所有剩餘管理員層規則,並直接進入 NetworkPolicy 層。這可讓管理員將特定流量模式的控制明確委派給應用程式團隊。例如,您可以使用傳遞規則將命名空間內流量管理委派給命名空間管理員,同時對外部存取維持嚴格的控制。

  2. 網路政策層:如果沒有管理員層政策與拒絕或允許相符,或者如果通過動作相符,則會評估命名空間範圍的 NetworkPolicy 資源。這些政策可在個別命名空間內提供精細的控制,並由應用程式團隊管理。命名空間範圍政策只能比管理員政策更嚴格。他們無法覆寫管理員政策的拒絕決策,但可以進一步限制管理員政策允許或傳遞的流量。

  3. 基準層管理員政策:如果沒有管理員或命名空間範圍的政策符合流量,則會評估基準層 ClusterNetworkPolicies。這些提供可由命名空間範圍政策覆寫的預設安全狀態,允許管理員設定整個組織的預設值,同時為團隊提供視需要自訂的彈性。基準政策會依優先順序 (優先順序最低的數字優先) 進行評估。

  4. 預設拒絕 (如果沒有政策相符):此deny-by-default行為可確保只允許明確允許的連線,並維持強大的安全狀態。

移轉

  • 如果您的叢集目前正在使用第三方解決方案來管理 Kubernetes 網路政策,您可以搭配 Kubernetes 專用 Amazon VPC CNI 外掛程式來使用那些相同的政策。然而,您必須移除現有的解決方案,如此才不會管理相同的政策。

警告

我們建議在移除網路政策解決方案後,更換所有曾套用該網路政策解決方案的節點。這是因為如果解決方案的 Pod 突然退出,流量規則可能會殘留。

安裝

  • 網路政策功能會建立且需要稱為 policyendpoints.networking.k8s.awsPolicyEndpoint 自訂資源定義 (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 變數設定為 trueIPv6 Pod。此變數可讓 IPv4 輸出功能將 IPv6 Pod 連線到 IPv4 端點,例如叢集外部的端點。IPv4 輸出功能的運作方式是使用本機迴路 IPv4 地址建立額外的網路介面。

    • 使用鏈結的網絡外掛程式(例如 Multus)時。由於這些外掛程式會將網路介面新增至每個 Pod,因此網路政策不會套用至鏈結的網路外掛程式。