協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Kubernetes 網路政策來限制 Pod 網路流量
您可以使用 Kubernetes 網路政策來限制往返 Pod 之間的網路流量。如需詳細資訊,請參閱 Kubernetes 文件的網路政策
要使用此功能,您必須設定以下內容:
-
設定政策在 Pod 啟動時強制執行。您可以在 VPC CNI
DaemonSet的aws-node容器中執行此操作。 -
啟用附加元件的網路政策參數。
-
設定叢集以使用 Kubernetes 網路政策
請檢閱考量之後再開始。如需詳細資訊,請參閱考量事項。
先決條件
以下是此功能的先決條件:
最低叢集版本
現有 Amazon EKS 叢集。若要部署叢集,請參閱 開始使用 Amazon EKS。叢集必須執行下表所列的其中一種 Kubernetes 版本和平台版本,請注意,也支援比上列任何 Kubernetes 與平台版本更新的版本。您可使用叢集名稱取代下列命令的 my-cluster,然後執行修改的命令來檢查目前 Kubernetes 版本:
aws eks describe-cluster --name my-cluster --query cluster.version --output text
| Kubernetes 版本 | 平台版本 |
|---|---|
|
|
|
|
|
|
最低 VPC CNI 版本
若要建立標準 Kubernetes 網路政策和管理網路政策,您需要執行 VPC CNI 外掛程式1.21的版本。您可以使用下列命令來查看您目前擁有哪個版本。
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
如果您的版本早於 1.21,請查看 更新 Amazon VPC CNI (Amazon EKS 附件元件) 以升級到版本 1.21 或更高版本。
最低 Linux 核心版本
您的節點必須具有 Linux 核心版本 5.10 或更高版本。您可以使用 uname -r 來檢查您的核心版本。如果您使用的是最新版本的 Amazon EKS 最佳化 Amazon Linux、Amazon EKS 最佳化加速 Amazon Linux AMI 和 Bottlerocket AMI,則它們已經具有所需的核心版本。
Amazon EKS 最佳化加速 Amazon Linux AMI 版本 v20231116 或具有核心版本 5.10 的更新版本。
步驟 1:設定政策在 Pod 啟動時強制執行
Kubernetes 專用 Amazon VPC CNI 外掛程式 會在 Pod 佈建的同時設定 Pod 的網路政策。在為新 Pod 設定所有政策之前,新 Pod 中的容器會以預設允許政策啟動。這稱為標準模式。預設允許政策意味著允許進出新 Pod 的所有輸入和輸出流量。例如,在使用作用中的政策更新新 Pod 之前,Pod 不會強制執行任何防火牆規則 (允許所有流量)。
將 NETWORK_POLICY_ENFORCING_MODE 變數設定為 strict 時,使用 VPC CNI 的 Pod 會從預設拒絕政策開始,然後設定政策。這稱為嚴格模式。在嚴格模式下,您必須為 Pod 需要存取的叢集中的每個端點都設定網路政策。請注意,此要求適用於 CoreDNS Pod。預設拒絕政策不會針對具有主機聯網的 Pod 進行設定。
您可以透過在 VPC CNI DaemonSet 的 aws-node 容器中將環境變數 strict 設定為 NETWORK_POLICY_ENFORCING_MODE 來變更預設網路政策。
env: - name: NETWORK_POLICY_ENFORCING_MODE value: "strict"
步驟 2:啟用附加元件的網路政策參數
依預設,網路政策功能會使用節點的連接埠 8162 做為指標。此外,此功能會使用連接埠8163進行運作狀態探查。如果您在需要使用這些連接埠的節點或 Pod 內部執行另一應用程式,則該應用程式將無法執行。從 VPC CNI 版本 v1.14.1 或更新版本,您可以變更這些連接埠。
使用以下程序來啟用附加元件的網路政策參數。
AWS 管理主控台
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要為其設定 Amazon VPC CNI 附加元件的叢集名稱。
-
選擇附加元件索引標籤。
-
選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。
-
在設定
Amazon VPC CNI頁面上:-
在版本清單中,選取
v1.14.0-eksbuild.3或更高版本。 -
展開選用組態設定。
-
在組態值中輸入 JSON 金鑰
"enableNetworkPolicy":和值"true"。產生的文字必須是有效的 JSON 物件。如果此金鑰和值是文字方塊中唯一的資料,請以大括號{ }括住該金鑰和值。下列範例已啟用網路政策功能,以及指標與運作狀態探查已設定為預設連接埠號碼:
{ "enableNetworkPolicy": "true", "nodeAgent": { "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }
-
Helm
如果您已透過 helm 安裝 Kubernetes 專用 Amazon VPC CNI 外掛程式,您可更新組態來變更連接埠。
-
執行下列命令來變更連接埠。分別在金鑰
nodeAgent.metricsBindAddr或金鑰nodeAgent.healthProbeBindAddr值設定連接埠號碼。helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
-
在您的編輯器中開啟
aws-nodeDaemonSet。kubectl edit daemonset -n kube-system aws-node -
在 VPC CNI
aws-nodedaemonset 清單檔案的aws-network-policy-agent容器,取代args:中下列命令引數的連接埠號碼。- args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163
步驟 3:設定叢集以使用 Kubernetes 網路政策
您可為 Amazon EKS 附加元件或自我管理附加元件設定此值。
使用 AWS CLI,您可以執行下列命令,將叢集設定為使用 Kubernetes 網路政策。將 my-cluster 取代為您的叢集名稱,並將 IAM 角色 ARN 取代為您正在使用的角色。
aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws: iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'
若要使用 AWS 管理主控台設定此項目,請依照下列步驟進行:
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要為其設定 Amazon VPC CNI 附加元件的叢集名稱。
-
選擇附加元件索引標籤。
-
選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。
-
在設定
Amazon VPC CNI頁面上:-
在版本清單中,選取
v1.14.0-eksbuild.3或更高版本。 -
展開選用組態設定。
-
在組態值中輸入 JSON 金鑰
"enableNetworkPolicy":和值"true"。產生的文字必須是有效的 JSON 物件。如果此金鑰和值是文字方塊中唯一的資料,請以大括號{ }括住該金鑰和值。以下範例顯示已啟用網路政策:{ "enableNetworkPolicy": "true" }下列螢幕擷取畫面展示了案例的範例。
-
Helm
如果您已透過 helm 安裝 Kubernetes 專用 Amazon VPC CNI 外掛程式,您可以更新組態以啟用網路政策。
-
執行下列命令以啟用網路政策。
helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
-
在您的編輯器中開啟
amazon-vpc-cniConfigMap。kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml -
在
ConfigMap中,加入下列行至data。enable-network-policy-controller: "true"一旦您新增此行,您的
ConfigMap看起來應該會像下列範例。apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true" -
在您的編輯器中開啟
aws-nodeDaemonSet。kubectl edit daemonset -n kube-system aws-node-
在 VPC CNI
aws-nodedaemonset 清單檔案的aws-network-policy-agent容器,以true取代args:中命令引數--enable-network-policy=false裡的false。- args: - --enable-network-policy=true
-
步驟 4. 後續步驟
完成組態後,請確認 aws-node Pod 正在叢集上執行。
kubectl get pods -n kube-system | grep 'aws-node\|amazon'
範例輸出如下。
aws-node-gmqp7 2/2 Running 1 (24h ago) 24h aws-node-prnsh 2/2 Running 1 (24h ago) 24h
版本 1.14 和更新版本的 aws-node Pod 中有 2 個容器。在先前版本中,如果網路政策已停用,則 aws-node Pod 中只會有單一容器。
您現在可以將 Kubernetes 網路政策部署到您叢集。
若要實作 Kubernetes 網路政策,您可以建立 Kubernetes NetworkPolicy或ClusterNetworkPolicy物件並將其部署到您的叢集。 NetworkPolicy 物件的範圍是命名空間,而ClusterNetworkPolicy物件的範圍可以是整個叢集或多個命名空間。您實施政策以允許或拒絕根據標籤選取工具、命名空間及 IP 位址範圍的 Pod 之間的流量。如需有關建立 NetworkPolicy 物件的詳細資訊,請參閱 Kubernetes 文件中的網路政策
Kubernetes NetworkPolicy 物件的強制執行是使用延伸式 Berkeley 封包篩選 (eBPF) 實作的。相對於 iptables 型實作,它提供了更低的延遲和效能特性,包含降低 CPU 使用率與避免循序查詢。此外,eBPF 探查可讓您存取內容豐富的資料,協助除錯複雜的核心層級問題並改善可觀測性。Amazon EKS 支援 eBPF 型匯出工具,此工具利用探查來記錄每個節點上的政策結果,並將資料匯出到外部日誌收集器以協助除錯。如需詳細資訊,請參閱 eBPF 文件