協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
連接多個網路介面至 Pod
依預設,Amazon VPC CNI 外掛程式將一個 IP 位址指派給每個 Pod。此 IP 位址連接至彈性網路介面,以便處理 Pod 的所有傳入與傳出流量。如需增加頻寬及每秒封包速率效能,您可利用 VPC CNI 的多重 NIC 功能來設定多重主目錄 Pod。多重主目錄 Pod 是使用多個網路介面 (及多個 IP 位址) 的單一 Kubernetes Pod。您可藉由執行多重主目錄 Pod,利用同時連線將其應用程式流量分佈到多個網路介面。對於人工智慧 (AI)、機器學習 (ML) 與高效能運算 (HPC) 使用案例,這樣做尤其有用。
下面的圖表顯示了在工作節點上執行的多重主目錄 Pod,其中使用了多個網路介面卡 (NIC)。
背景介紹
在 Amazon EC2 上,彈性網路介面是代表虛擬網路卡之 VPC 中的邏輯網路元件。針對多種 EC2 執行個體類型,網路介面會在硬體中共用單一網路介面卡 (NIC)。此單一 NIC 具有最大頻寬與每秒封包速率。
若啟用多重 NIC 功能,VPC CNI 預設不會大量指派 IP 位址。取而代之的是,VPC CNI 在新的 Pod 啟動時,會隨需向每個網路卡上的網路介面指派一個 IP 位址。此行為會降低 IP 位址耗盡的速率,透過使用多重主目錄 Pod 而增加。由於 VPC CNI 將隨需指派 IP 位址,在啟用多重 NIC 功能的執行個體上,啟用 Pod 可能需要更長時間。
考量事項
-
請確認 Kubernetes 叢集在執行 VPC CNI
1.20.0版及更新版本。多重 NIC 功能僅適用於 VPC CNI1.20.0版或更新版本。 -
在 VPC CNI 外掛程式中啟用
ENABLE_MULTI_NIC環境變數。您可執行以下命令來設定變數,以及啟動 DaemonSet 部署。-
kubectl set env daemonset aws-node -n kube-system ENABLE_MULTI_NIC=true
-
-
請確認建立的工作節點具有多個網路介面卡 (NIC)。若要了解具有多個網路介面卡的 EC2 執行個體清單,請參閱 Amazon EC2 使用者指南中的網路卡。
-
若啟用多重 NIC 功能,VPC CNI 預設不會大量指派 IP 位址。由於 VPC CNI 將隨需指派 IP 位址,在啟用多重 NIC 功能的執行個體上,啟用 Pod 可能需要更長時間。如需詳細資訊,請參閱前一 背景介紹 節。
-
啟用多重 NIC 功能後,依預設,Pod 沒有多個網路介面。必須設定每個工作負載使用多重 NIC。新增
k8s.amazonaws.com/nicConfig: multi-nic-attachment註解至應擁有多個網路介面的工作負載。
IPv6 考量
-
自訂 IAM 政策 - 若是
IPv6叢集,針對 VPC CNI 建立及使用以下自訂 IAM 政策。此政策專門針對多重 NIC 設定。若要了解 VPC CNI 與IPv6叢集配合的更多一般資訊,請參閱 了解叢集、Pod 與服務的 IPv6 位址。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AmazonEKSCNIPolicyIPv6MultiNIC", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeInstances", "ec2:AssignIpv6Addresses", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeTags", "ec2:ModifyNetworkInterfaceAttribute", "ec2:DeleteNetworkInterface", "ec2:DescribeInstanceTypes", "ec2:UnassignIpv6Addresses", "ec2:AttachNetworkInterface", "ec2:DescribeSubnets" ], "Resource": "*" }, { "Sid": "AmazonEKSCNIPolicyENITagIPv6MultiNIC", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*" } ] } -
IPv6轉換機制無法使用 - 若使用多重 NIC 功能,VPC CNI 不會指派IPv4位址給IPv6叢集上的 Pod。VPC CNI 而是將主機本機IPv4位址指派給每個 Pod,以便 Pod 與其他 Amazon VPC 或網際網路的外部IPv4資源通訊。
使用方式
在 VPC CNI 中啟用多重 NIC aws-node 功能,以及 Pod 重新啟動之後,您可將每個工作負載設定為多重主目錄。下面是包含必要註解的 YAML 組態範例:
apiVersion: apps/v1 kind: Deployment metadata: name: orders-deployment namespace: ecommerce labels: app: orders spec: replicas: 3 selector: matchLabels: app: orders template: metadata: annotations: k8s.amazonaws.com/nicConfig: multi-nic-attachment labels: app: orders spec: ...
常見問答集
1。什麼是網路介面卡 (NIC)?
網路介面卡 (NIC) 亦稱為網路卡,這是一種可針對底層雲端運算硬體啟用網路連線的實體裝置。在現代 EC2 伺服器中,網路介面卡是指 Nitro 網路卡。彈性網路介面 (ENI) 是這種底層網路卡的虛擬呈現方式。
某些 EC2 執行個體類型具有多重 NIC,能夠增加頻寬及封包速率效能。針對此類執行個體,您可指派次要 ENI 給額外的網路卡。舉例來說,ENI #1 能夠用做 NIC 連接至網路卡索引 0 的介面;而 ENI #2 則可用做 NIC 連接至單獨網路卡索引的介面。
2. 什麼是多重主目錄 Pod?
多重主目錄 Pod 是使用多個網路介面 (及隱含多個 IP 位址) 的單一 Kubernetes Pod。每個 Pod 網路介面與彈性網路介面 (ENI) 關聯,並且這些 ENI 是底層工作節點上單獨 NIC 的邏輯呈現方式。藉助多個網路介面,多重主目錄 Pod 可擁有額外的資料傳輸容量,這亦可提高其資料傳輸率。
重要
VPC CNI 僅可在擁有多重 NIC 的執行個體類型上設定多重主目錄 Pod。
3. 這項功能有什麼用?
若您需要在 Kubernetes 型工作負載中擴展網路效能,可使用多重 NIC 功能來執行多重主目錄 Pod,這些 Pod 能夠與所有連接 ENA 裝置的底層 NIC 互動。藉助額外的網路卡,將應用程式流量分佈至多個同時連線,藉此來增加應用程式的頻寬容量與封包速率效能。對於人工智慧 (AI)、機器學習 (ML) 與高效能運算 (HPC) 使用案例,這樣做尤其有用。
4. 如何使用此功能?
-
首先,必須確認 Kubernetes 叢集使用 VPC CNI 1.20 版或更新版本。若要了解作為 EKS 附加元件來更新 VPC CNI 的步驟,請參閱 更新 Amazon VPC CNI (Amazon EKS 附件元件)。
-
接著,必須使用
ENABLE_MULTI_NIC環境變數,在 VPC CNI 中啟用多重 NIC 支援。 -
然後,必須確認建立並聯結擁有多個網路卡的節點。若要了解擁有多個網路卡的 EC2 執行個體類型清單,請參閱 Amazon EC2 使用者指南中的網路卡。
-
最後,設定每個工作負載使用多個網路介面 (多重主目錄 Pod) 或單一網路介面。
5. 如何設定我的工作負載在支援的工作節點上使用多重 NIC?
如需使用多重主目錄 Pod,需要新增以下註解:k8s.amazonaws.com/nicConfig: multi-nic-attachment。這會連接底層執行個體中每個 NIC 的 ENI 至 Pod (Pod 與 NIC 間的一至多映射)。
若缺少此註解,VPC CNI 則會假設 Pod 僅需 1 個網路介面,並且在任何可用的 NIC 上將其指派給 ENI 中的 IP。
6. 這項功能支援哪些網路介面卡?
若您至少有一個 ENA 連接至底層網路卡用於處理 IP 流量,則可使用任何網路介面卡。若要了解詳細詳細,請參閱 Amazon EC2 使用者指南中的彈性網路介面卡 (ENA)。
受支援的網路裝置組態:
-
ENA 介面提供支援 VPC IP 聯網所需的所有傳統 IP 聯網和路由功能。如需詳細資訊,請參閱在 EC2 執行個體上使用 ENA 啟用增強型聯網。
-
EFA (EFA 搭配 ENA) 介面提供用於 IP 聯網的 ENA 裝置和用於低延遲、高輸送量通訊的 EFA 裝置。
重要
若網路卡僅連接 EFA 限定介面卡,VPC CNI 會在佈建多重主目錄 Pod 的網路連線時將其略過。然而,若您結合使用 EFA 限定介面卡與網路卡上的 ENA 介面卡,則 VPC CNI 亦會管理此裝置上的 ENI。如需將 EFA 限定介面卡與 EKS 叢集配合使用,請參閱 使用 Elastic Fabric Adapter 在 Amazon EKS 上執行機器學習訓練。
7. 能否查看我的叢集中的節點是否支援 ENA?
是,您可藉助 AWS CLI 或 EC2 API 來擷取叢集中 EC2 執行個體的相關網路資訊。其中提供了執行個體是否具有 ENA 支援的相關詳細資訊。在以下範例中,使用節點的 EC2 執行個體 ID 來取代 <your-instance-id>。
AWS CLI 範例:
aws ec2 describe-instances --instance-ids <your-instance-id> --query "Reservations[].Instances[].EnaSupport"
輸出範例:
[ true ]
8. 能否查看與 Pod 關聯的不同 IP 位址?
否,不容易查看。但是,您可使用節點的 nsenter 來執行 ip route show 等常用網路工具,以及查看額外的 IP 位址與介面。
9. 能否控制 Pod 的網路介面數目?
否。設定工作負載在支援的執行個體上使用多重 NIC 後,單一 Pod 將自動擁有執行個體上每個網路卡的 IP 位址。或者,單一主目錄 Pod 將一個網路介面連接至執行個體上的一個 NIC。
重要
VPC CNI 會略過僅連接 EFA 限定裝置的網路卡。
10. 能否設定 Pod 使用特定 NIC?
否,不支援。若 Pod 擁有相關註解,VPC CNI 則自動將其設定為讓工作節點上的每一個 NIC 與 ENA 介面卡配合使用。
11. 這項功能是否適用於其他 VPC CNI 聯網功能?
是,VPC CNI 中的多重 NIC 功能適用於自訂聯網與增強型子網路探索。然而,多重主目錄 Pod 不使用自訂子網路或安全群組。取而代之的是,VPC CNI 會將 IP 位址與網路介面指派到多重主目錄 Pod,其具有與節點相同的子網路及安全群組組態。如需自訂聯網的詳細資訊,請參閱 使用自訂聯網在替代子網路中部署 Pod。
VPC CNI 中的多重 NIC 功能不適用於 Pod 的安全群組,亦不能與其結合使用。
12. 能否搭配此功能使用網路政策?
是,您可搭配多重 NIC 使用 Kubernetes 網路政策。Kubernetes 網路政策限制傳入與傳出 Pod 的網路流量。若要了解藉助 VPC CNI 套用網路政策的相關詳細資訊,請參閱 使用 Kubernetes 網路政策限制 Pod 流量。
13. 在 EKS 自動模式中是否啟用多 NIC 支援?
EKS 自動模式叢集不支援多 NIC。