AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何為 Amazon EKS 叢集中的 Pod 選擇特定的 IP 位址子網路?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 中為 Pod 使用自訂子網路或 IP 位址範圍。
解決方法
若要從與工作節點子網路不同的子網路分配 Pod IP 位址,請使用自訂網路。
啟動自訂網路
在設定自訂網路之前,請查看以下預設行為:
- 節點和 Pod 在您的 Amazon 虛擬私有雲端 (VPC) 叢集內會使用相同 CIDR 範圍的 IP 位址。若要為您的 Amazon VPC 新增更多 IP 位址 CIDR 範圍,請參閱如何在 Amazon EKS 中使用多個 CIDR 範圍?
- Amazon EKS 會從工作節點的子網路中指派 Pod IP 位址。
- 您無法控制哪個子網路為 Pod 指派 IP 位址。
- 當節點的子網路中沒有可用的 IP 位址時,即使其他子網路有可用的位址,新的 Pod 也無法啟動。
- 所有從 Pods 到 Amazon EKS 叢集 CIDR 區塊外的 IP 位址的流量,都會使用節點的主要介面與 IP 位址。流量使用來自節點主要彈性網路介面的安全群組和子網路。它不使用您在 ENIConfig 物件中定義的子網路和安全群組。
- 如果您對 Pod 使用安全群組,則 Pod 將使用您在 SecurityGroupPolicy 中指定的安全群組。Pod 不使用您在 ENIConfig 物件中指定的安全群組。
**注意:**有關 Pod 流量路由的詳細資訊,請參閱啟用 Pod 的傳出網際網路存取。
在 Kubernetes 的 Amazon VPC 容器網路介面 (Amazon VPC CNI) 外掛程式中啟動自訂網路。使用與您的 Kubernetes 版本相符的 Amazon VPC CNI 外掛程式版本。若要存取該外掛程式,請參閱 GitHub 網站上的 amazon-vpc-cni-k8s。
執行以下命令,以驗證 Amazon EKS 叢集所使用的 Amazon VPC 版本:
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
如果您沒有正確的外掛程式版本,請更新 Amazon VPC CNI。
執行以下命令來啟動自訂網路:
kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
VPC CNI v1.18 及更新版本支援自動子網路偵測,並根據可用子網路的 IP 位址使用情況動態分配位址。如需詳細資訊,請參閱 Amazon VPC CNI 推出增強型子網路偵測。
您也可以使用 Amazon VPC CNI 外掛程式執行以下動作:
- 指定用於 Pod 的 Amazon VPC 子網路。
- 為您的 Pod 定義單獨的安全群組。
建立 ENIConfig 物件
在您建立 ENIConfig 物件之前,請先檢視以下預設行為:
- 每個 ENIConfig 物件定義一個子網路和一個安全群組清單。
- 每個節點只能指派一個 ENIConfig 物件。不過,您可以將同一個 ENIConfig 物件指派給多個節點。
- 當您將 ENIConfig 物件指派給節點時,排程到該節點的 Pod 將使用 ENIConfig 物件中的子網路和安全群組。
- 您 ENIConfig 物件的名稱必須是您可用區域的名稱。
執行以下命令來建立您的 ENIConfig 物件:
cat EOF | kubectl apply -f - apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: example-availability-zone spec: securityGroups: - example-security-group-id subnet: example-subnet-id EOF
**注意:**將 example-availability-zone 替換為您的可用區域。將 example-security-group-id 替換為您安全群組的 ID。將 example-subnet-id 替換為您的子網路 ID。
指派 ENIConfig 物件
若要為一個 ENIConfig 物件指派一個可用區域,請自動將 ENIConfig 物件指派給您的節點。若要將多個 ENIConfig 物件與相同可用區域建立關聯,請手動將 ENIConfig 物件指派給您的節點。
自動指派 ENIConfig 物件
執行以下命令:
kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
手動關聯 ENIConfig 物件
**重要:**請確保節點與其所關聯的 ENIConfig 物件中的子網路位於相同可用區域。
執行以下命令:
kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone
**注意:**將 example-node-name 替換為您節點的完整識別碼。將 example-availability-zone 替換為您在建立 ENIConfig 物件時所使用的可用區域名稱。
啟動新節點
若要從 ENIConfig 子網路分配次要網路介面和 IP 位址,您必須啟動新節點。現有節點將繼續使用其原始網路組態,直到您替換它們為止。
請完成下列步驟:
- 檢查您是否將自訂 Amazon Machine Image (AMI) ID 與自我管理節點群組一起使用。
- 如果您使用自訂 AMI ID,請確定每個節點的最大 Pod 數量值。執行 max-pods-calculator.sh 指令碼時,必須加入 --cni-custom-networking-enabled 參數。
**注意:**如果您未使用啟動範本或 AMI ID,則 Amazon EKS 會自動設定 Pod 的最大數量。 - 請根據您的作業系統 (OS),更新新節點上的使用者資料指令碼,以設定您所需的最大 Pod 數量:
Amazon Linux 2、Bottlerocket、Ubuntu 20.04 及更新版本、Windows Server 2019 及更新版本#!/bin/bash /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
**注意:**在上述命令中,將 example-cluster-name 替換為您的 EKS 叢集的名稱。將 example-max-pods 替換為每個節點的最大 Pod 數。--user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
有關 bootstrap 的詳細資訊,請參閱 GitHub 網站上的 awslabs/amazon-eks-ami。有關 nodeadm 的資訊,請參閱從 Amazon Linux 2 升級到 Amazon Linux 2023。
Amazon Linux 2023 (AL2023) - 重新建立您的 Pod,以使用新的自訂網路組態。
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
AWS 官方已更新 3 年前