將多個網路介面連接至 Pod - Amazon EKS

協助改善此頁面

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

若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。

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

將多個網路介面連接至 Pod

根據預設,Amazon VPC CNI 外掛程式會為每個 Pod 指派一個 IP 地址。此 IP 地址會連接到彈性網路界面,以處理 Pod 的所有傳入和傳出流量。若要提高頻寬和每秒封包速率效能,您可以使用 VPC CNI 的多 NIC 功能來設定多主目錄 Pod。多主目錄 Pod 是使用多個網路介面 (和多個 IP 地址) 的單一 Kubernetes Pod。透過執行多主目錄 Pod,您可以使用並行連線將其應用程式流量分散到多個網路介面。這對於人工智慧 (AI)、Machine Learning(ML) 和高效能運算 (HPC) 使用案例特別有用。

下圖顯示在使用多個網路介面卡 (NICs) 的工作者節點上執行的多主目錄 Pod。

具有兩個網路界面的多主目錄 Pod,連接一個具有 ENA 的網路界面,以及一個具有 ENA 和 EFA 的網路界面

背景介紹

在 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 CNI 1.20.0或更新版本。

  • 在 VPC CNI 外掛程式中啟用ENABLE_MULTI_NIC環境變數。您可以執行下列命令來設定 變數,並啟動 DaemonSet 的部署。

    • kubectl set env daemonset aws-node -n kube-system ENABLE_MULTI_NIC=true

  • 請確定您建立具有多個網路介面卡 (NICs工作者節點。如需具有多個網路介面卡的 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。如需搭配IPv6叢集使用 VPC CNI 的一般資訊,請參閱 了解叢集、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 會為每個 Pod 指派主機本機IPv4地址,以便 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 網路卡。Elastic Network Interface (ENI) 是此基礎網路卡的虛擬表示法。

有些 EC2 執行個體類型具有多個 NICs可提供更高的頻寬和封包速率效能。對於這類執行個體,您可以將次要 ENIs 指派給其他網路卡。例如,ENI #1 可以做為連接到網路卡索引 0 之 NIC 的界面,而 ENI #2 可以做為連接到個別網路卡索引之 NIC 的界面。

2. 什麼是多主目錄 Pod?

多主目錄 Pod 是具有多個網路介面的單一 Kubernetes Pod (並透過隱含多個 IP 地址)。每個 Pod 網路界面都與彈性網路界面 (ENI) 相關聯,這些 ENIs 是基礎工作者節點上個別 NICs 的邏輯表示法。使用多個網路介面時,多主目錄 Pod 具有額外的資料傳輸容量,這也會提高其資料傳輸率。

重要

VPC CNI 只能在具有多個 NICs 的執行個體類型上設定多主目錄 Pod。

3. 為什麼我應該使用此功能?

如果您需要在以 Kubernetes 為基礎的工作負載中擴展網路效能,您可以使用 多 NIC 功能來執行多主目錄 Pod,該 Pod 會與其連接 ENA 裝置的所有基礎 NICs 連接。利用其他網路卡可將應用程式流量分散到多個並行連線,以提高應用程式的頻寬容量和封包速率效能。這對於人工智慧 (AI)、Machine Learning(ML) 和高效能運算 (HPC) 使用案例特別有用。

4. 如何使用此功能?

  1. 首先,您必須確保您的 Kubernetes 叢集使用 VPC CNI 1.20 版或更新版本。如需將 VPC CNI 更新為 EKS 附加元件的步驟,請參閱 更新 Amazon VPC CNI (Amazon EKS 附加元件)

  2. 然後,您必須使用環境ENABLE_MULTI_NIC變數在 VPC CNI 中啟用多 NIC 支援。

  3. 然後,您必須確保建立和聯結具有多個網路卡的節點。如需具有多個網路卡的 EC2 執行個體類型清單,請參閱《Amazon EC2 使用者指南》中的網路卡

  4. 最後,您將每個工作負載設定為使用多個網路介面 (多主目錄 Pod) 或使用單一網路介面。

5. 如何將工作負載設定為在支援的工作者節點上使用多個 NICs?

若要使用多主目錄 Pod,您需要新增下列註釋:k8s.amazonaws.com/nicConfig: multi-nic-attachment。這會將基礎執行個體中每個 NIC 的 ENI 連接到 Pod (Pod 和 NICs 之間的一個到多個映射)。

如果缺少此註釋,VPC CNI 會假設您的 Pod 只需要 1 個網路介面,並在任何可用的 NIC 上指派來自 ENI 的 IP。

6. 此功能支援哪些網路介面轉接器?

如果您有至少一個 ENA 連接到基礎網路卡的 IP 流量,您可以使用任何網路介面轉接器。如需 ENA 的詳細資訊,請參閱《Amazon EC2 使用者指南》中的彈性網路轉接器 (ENA)

支援的網路裝置組態:

  • ENA 介面提供支援 VPC IP 聯網所需的所有傳統 IP 聯網和路由功能。如需詳細資訊,請參閱在 EC2 執行個體上啟用 ENA 增強型聯網

  • EFA (EFA 搭配 ENA) 介面提供用於 IP 聯網的 ENA 裝置和用於低延遲、高輸送量通訊的 EFA 裝置。

重要

如果網路卡只連接 EFA 限定轉接器,VPC CNI 將在佈建多主目錄 Pod 的網路連線時略過它。不過,如果您將僅限 EFA 轉接器與網路卡上的 ENA 轉接器結合,則 VPC CNI 也會管理此裝置上的 ENIs。若要搭配 EKS 叢集使用僅限 EFA 的介面,請參閱 使用 Elastic Fabric Adapter 在 Amazon EKS 上執行機器學習訓練

7. 我是否可以查看叢集中的節點是否支援 ENA?

可以,您可以使用 AWS CLI 或 EC2 API 來擷取叢集中 EC2 執行個體的網路資訊。這可提供執行個體是否支援 ENA 的詳細資訊。在下列範例中,將 <your-instance-id>取代為節點的 EC2 執行個體 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 的網路介面數量嗎?

否。將工作負載設定為在支援的執行個體上使用多個 NICs 時,單一 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. 我可以將網路政策與此功能搭配使用嗎?

可以,您可以將 Kubernetes 網路政策與多 NIC 搭配使用。Kubernetes 網路政策會限制往返 Pod 的網路流量。如需使用 VPC CNI 套用網路政策的詳細資訊,請參閱 使用 Kubernetes 網路政策限制 Pod 流量

13. 是否在 EKS Auto Mode 中啟用多 NIC 支援?

EKS Auto Mode 叢集不支援 Multi-NIC。