協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
準備混合節點的聯網
本主題概述了您在建立 Amazon EKS 叢集和連接混合節點之前必須設定的聯網設定。本指南假設您已符合使用 AWS Site-to-Site VPN、AWS Direct Connect 或您自己的 VPN 解決方案實現混合網路連線的先決條件要求。
內部部署聯網組態
最低網路需求
為了獲得最佳體驗,建議您為混合節點與 AWS 區域之間的連接,提供至少 100 Mbps 的可靠網路連線能力,以及最多 200 毫秒的往返延遲。這是適用於大多數使用案例的一般指引,但並非嚴格要求。頻寬和延遲需求可能會因混合節點的數量和工作負載特性而有所不同,例如應用程式映像大小、應用程式彈性、監控和記錄組態,以及存取儲存在其他 AWS 服務中的資料的應用程式相依性。建議您在部署到生產環境之前,先使用您自己的應用程式和環境進行測試,以驗證您的聯網設定是否符合工作負載的需求。
內部部署節點和 Pod CIDR
識別將用於混合節點及其上執行的工作負載的節點和 Pod CIDR。如果您為 CNI 使用覆蓋網路,節點 CIDR 會從內部部署網路配置,而 Pod CIDR 會從您的容器網路介面 (CNI) 配置。當您使用 RemoteNodeNetwork 和 RemotePodNetwork 欄位建立 EKS 叢集時,您可以將內部部署節點 CIDR 和 Pod CIDR 作為輸入進行傳遞。您的內部部署節點 CIDR 必須在內部部署網路上可路由。如需內部部署 Pod CIDR 可路由性的資訊,請參閱下一節。
內部部署節點和 Pod CIDR 區塊必須符合下列要求:
-
處於以下
IPv4RFC-1918 範圍之一:10.0.0.0/8、172.16.0.0/12或192.168.0.0/16。 -
EKS 叢集的 VPC CIDR 或您的 Kubernetes Service
IPv4CIDR 不會彼此重疊。
內部部署 Pod 網路路由
使用 EKS 混合節點時,我們通常會建議您將內部部署網路上的內部部署 Pod CIDR 設定為可路由,以便啟用雲端和內部部署環境之間的完整叢集通訊和功能。
可路由的 Pod 網路
如果您能夠將內部部署網路上的 Pod 網路設定為可路由,請遵循下列指引。
-
設定以下
RemotePodNetwork欄位:使用內部部署 Pod CIDR 的 EKS 叢集、使用內部部署 Pod CIDR 的 VPC 路由表,以及使用內部部署 Pod CIDR 的 EKS 叢集安全群組。 -
您可以使用多種技術,讓您的內部部署 Pod CIDR 在內部部署網路上可路由,包括邊界閘道協定 (BGP)、靜態路由或其他自訂路由解決方案。BGP 是建議的解決方案,因為它比需要自訂或手動路由組態的替代解決方案更具可擴展性且更容易管理。AWS 支援 Cilium 和 Calico 的 BGP 功能,可用於公告 Pod CIDR,如需詳細資訊,請參閱 設定混合節點的 CNI 和 可路由的遠端 Pod CIDR。
-
Webhooks 可以在混合節點上執行,因為 EKS 控制平面能夠與指派給 Webhook 的 Pod IP 位址進行通訊。
-
在雲端節點上執行的工作負載能夠直接與同一 EKS 叢集中混合節點上執行的工作負載進行通訊。
-
其他 AWS 服務 (例如 AWS Application Load Balancer 和 Amazon Managed Service for Prometheus),能夠與混合節點上執行的工作負載進行通訊,以平衡網路流量及抓取 Pod 指標。
不可路由的 Pod 網路
如果您不能將內部部署網路上的 Pod 網路設定為可路由,請遵循下列指引。
-
Webhook 無法在混合節點上執行,因為 Webhook 需要從 EKS 控制平面連線至指派給 Webhook 的 Pod IP 位址。在此情況下,我們建議您在與混合節點相同的 EKS 叢集中的雲端節點上執行 Webhook,如需詳細資訊,請參閱 設定混合節點的 Webhook。
-
當對雲端節點使用 VPC CNI 及對混合節點使用 Cilium 或 Calico 時,雲端節點上執行的工作負載將不能直接與混合節點上執行的工作負載進行通訊。
-
使用服務流量分佈,以將流量保持在其來源區域的本機。如需有關服務流量分佈的詳細資訊,請參閱 設定服務流量分佈。
-
將 CNI 設定為在 Pod 流量離開內部部署主機時,使用輸出偽裝或網路位址轉譯 (NAT)。在 Cilium 中,其預設為啟用。Calico 需要將
natOutgoing設定為true。 -
其他 AWS 服務 (例如 AWS Application Load Balancer 和 Amazon Managed Service for Prometheus),不能與混合節點上執行的工作負載進行通訊。
混合節點安裝和升級期間所需的存取
在安裝過程中 (即您在主機上安裝混合節點相依性時),您必須可以存取下列網域。當您建置作業系統映像時,可以執行此程序一次;另外在執行時期,也可在每個主機上執行此程序。這包括初始安裝以及升級混合節點的 Kubernetes 版本時。
某些套件是使用作業系統的預設套件管理工具進行安裝的。對於 AL2023 和 RHEL,yum 命令可用於安裝 containerd、ca-certificates、iptables 和 amazon-ssm-agent。對於 Ubuntu,apt 可用於安裝 containerd、ca-certificates 和 iptables,而 snap 可用於安裝 amazon-ssm-agent。
| 元件 | URL | 通訊協定 | 連線埠 |
|---|---|---|---|
|
EKS 節點成品 (S3) |
https://hybrid-assets.eks.amazonaws.com |
HTTPS |
443 |
|
https://eks. |
HTTPS |
443 |
|
|
https://api.ecr. |
HTTPS |
443 |
|
|
EKS ECR 端點 |
請參閱 檢視 Amazon EKS 附加元件的 Amazon 容器映像登錄檔 了解區域端點。 |
HTTPS |
443 |
|
SSM 二進位檔端點 1 |
https://amazon-ssm- |
HTTPS |
443 |
|
SSM 服務端點 1 |
https://ssm. |
HTTPS |
443 |
|
IAM Anywhere 二進位檔端點 2 |
https://rolesanywhere.amazonaws.com |
HTTPS |
443 |
|
https://rolesanywhere. |
HTTPS |
443 |
|
|
作業系統套件管理工具端點 |
套件儲存庫端點是作業系統特定的,並且可能因地理區域而有所不同。 |
HTTPS |
443 |
注意
1 只有在您為內部部署 IAM 憑證提供者使用 AWS SSM 混合啟用時,才需要存取 AWS SSM 端點。
2 只有在您為內部部署 IAM 憑證提供者使用 AWS IAM Roles Anywhere 時,才需要存取 AWS IAM 端點。
持續叢集操作所需的存取
持續叢集操作需要為您的內部部署防火牆提供下列網路存取。
| Type | 通訊協定 | Direction | 連線埠 | 來源 | 目的地 | 使用方式 |
|---|---|---|---|---|---|---|
|
HTTPS |
TCP |
傳出 |
443 |
遠端節點 CIDR |
EKS 叢集 IP 1 |
kubelet 到 Kubernetes API 伺服器 |
|
HTTPS |
TCP |
傳出 |
443 |
遠端 Pod CIDR |
EKS 叢集 IP 1 |
Pod 到 Kubernetes API 伺服器 |
|
HTTPS |
TCP |
傳出 |
443 |
遠端節點 CIDR |
SSM 混合啟用憑證重新整理和 SSM 活動訊號,每 5 分鐘一次 |
|
|
HTTPS |
TCP |
傳出 |
443 |
遠端節點 CIDR |
IAM Roles Anywhere 憑證重新整理 |
|
|
HTTPS |
TCP |
傳出 |
443 |
遠端 Pod CIDR |
Pod 到 STS 端點,僅 IRSA 需要 |
|
|
HTTPS |
TCP |
傳出 |
443 |
遠端節點 CIDR |
節點至 Amazon EKS 身分驗證端點,僅 Amazon EKS Pod 身分識別需要 |
|
|
HTTPS |
TCP |
傳入 |
10250 |
EKS 叢集 IP 1 |
遠端節點 CIDR |
Kubernetes API 伺服器到 kubelet |
|
HTTPS |
TCP |
傳入 |
Webhook 連接埠 |
EKS 叢集 IP 1 |
遠端 Pod CIDR |
Kubernetes API 伺服器到 Webhook |
|
HTTPS |
TCP/UDP |
傳入,傳出 |
53 |
遠端 Pod CIDR |
遠端 Pod CIDR |
Pod 到 CoreDNS。如果您在雲端中執行至少 1 個 CoreDNS 複本,則必須允許 DNS 流量通往執行 CoreDNS 的 VPC。 |
|
使用者定義 |
使用者定義 |
傳入,傳出 |
應用程式連接埠 |
遠端 Pod CIDR |
遠端 Pod CIDR |
Pod 到 Pod |
注意
1 EKS 叢集的 IP。請參閱以下有關 Amazon EKS 彈性網路介面的章節。
Amazon EKS 網路介面
Amazon EKS 會將網路介面連接到您在叢集建立期間傳遞的 VPC 中的子網路,以啟用 EKS 控制平面與 VPC 之間的通訊。在 Amazon EC2 主控台或使用 AWS CLI 建立叢集後,即可找到 Amazon EKS 建立的網路介面。在 EKS 叢集上套用變更時,會刪除原始網路介面並建立新的網路介面,例如 Kubernetes 版本升級。您可對叢集建立期間傳遞的子網路使用受限子網路大小以限制 Amazon EKS 網路介面的 IP 範圍,這樣您就能更輕鬆地設定內部部署防火牆,以允許與這組已知的受限 IP 建立傳入/傳出連線。若要控制在其中建立的子網路網路介面,可以限制建立叢集時指定的子網路數量,或在建立叢集後您可以更新子網路。
Amazon EKS 佈建的網路介面具有格式 Amazon EKS 的說明。如需可用於尋找 Amazon EKS 佈建的網路介面的 IP 位址的 AWS CLI 命令,請參閱下列範例。使用您在叢集建立期間傳遞的 VPC 的 ID 取代 your-cluster-name
VPC_ID。
aws ec2 describe-network-interfaces \ --query 'NetworkInterfaces[?(VpcId ==VPC_ID&& contains(Description,Amazon EKS))].PrivateIpAddress'
AWS VPC 和子網路設定
Amazon EKS 的現有 VPC 和子網路要求適用於具有混合節點的叢集。此外,您的 VPC CIDR 無法與內部部署節點和 Pod CIDR 重疊。您必須在 VPC 路由表中為內部部署節點設定路由,也可選擇性地為 Pod CIDR 設定路由。必須設定這些路由,以將流量路由到您用於混合網路連線的閘道,該閘道通常是虛擬私有閘道 (VGW) 或傳輸閘道 (TGW)。如果您使用 TGW 或 VGW 將 VPC 連接到內部部署環境,則必須為您的 VPC 建立 TGW 或 VGW 附件。您的 VPC 必須支援 DNS 主機名稱和 DNS 解析。
下列步驟使用 AWS CLI。您也可以在 AWS 管理主控台 中或藉助 AWS CloudFormation、AWS CDK 或 Terraform 等其他介面建立這些資源。
步驟 1:建立 VPC
-
執行下列命令以建立 VPC。使用
IPv4RFC-1918 (私有) 或 non-RFC-1918 (公有) CIDR 範圍取代VPC_CIDR(例如10.0.0.0/16)。注意:根據預設,已為 VPC 啟用 DNS 解析 (這是 EKS 要求)。aws ec2 create-vpc --cidr-blockVPC_CIDR -
為您的 VPC 啟用 DNS 主機名稱。請注意,根據預設,已為 VPC 啟用 DNS 解析。使用您在上一個步驟中建立的 VPC 的 ID 取代
VPC_ID。aws ec2 modify-vpc-attribute --vpc-idVPC_ID--enable-dns-hostnames
步驟 2:建立子網路
建立至少 2 個子網路。Amazon EKS 會將這些子網路用於叢集網路介面。如需詳細資訊,請參閱子網路要求和考量事項。
-
您可以使用下列命令尋找 AWS 區域的可用區域。使用您的區域取代
us-west-2。aws ec2 describe-availability-zones \ --query 'AvailabilityZones[?(RegionName ==us-west-2)].ZoneName' -
建立子網。使用 VPC 的 ID 取代
VPC_ID。使用您子網路的 CIDR 區塊取代SUBNET_CIDR(例如 10.0.1.0/24)。使用將建立子網路的可用區域取代AZ(例如 us-west-2a)。您建立的子網路必須至少位於 2 個不同的可用區域。aws ec2 create-subnet \ --vpc-idVPC_ID\ --cidr-blockSUBNET_CIDR\ --availability-zoneAZ
(選用) 步驟 3:使用 Amazon VPC Transit Gateway (TGW) 或 AWS Direct Connect 虛擬私有閘道 (VGW) 連接 VPC
如果您使用的是 TGW 或 VGW,則請將 VPC 連接到 TGW 或 VGW。如需詳細資訊,請參閱 Amazon VPC Transit Gateways 中的 Amazon VPC 附件或 AWS Direct Connect 虛擬私有閘道關聯。
轉換閘道
執行下列命令以連接 Transit Gateway。使用 VPC 的 ID 取代 VPC_ID。使用您在上一個步驟中建立的子網路的 ID 取代 SUBNET_ID1 和 SUBNET_ID2。使用您 TGW 的 ID 取代 TGW_ID。
aws ec2 create-transit-gateway-vpc-attachment \ --vpc-idVPC_ID\ --subnet-idsSUBNET_ID1 SUBNET_ID2\ --transit-gateway-idTGW_ID
虛擬私有閘道
執行下列命令以連接 Transit Gateway。使用您 VGW 的 ID 取代 VPN_ID。使用 VPC 的 ID 取代 VPC_ID。
aws ec2 attach-vpn-gateway \ --vpn-gateway-idVPN_ID\ --vpc-idVPC_ID
(選用) 步驟 4:建立路由表
您可以修改 VPC 的主要路由表,也可以建立自訂路由表。下列步驟會建立自訂路由表,其中包含通往內部部署節點和 Pod CIDR 的路由。如需詳細資訊,請參閱子網路路由表。使用 VPC 的 ID 取代 VPC_ID。
aws ec2 create-route-table --vpc-idVPC_ID
步驟 5:建立內部部署節點和 Pod 的路由
在路由表中,為每個內部部署遠端節點建立路由。您可以修改 VPC 的主要路由表,也可以使用您在上一個步驟中建立的自訂路由表。
以下範例顯示如何為您的內部部署節點和 Pod CIDR 建立路由。在範例中,傳輸閘道 (TGW) 可用於連接 VPC 與內部部署環境。如果您有多個內部部署節點和 Pod CIDR,請對每個 CIDR 重複這些步驟。
-
如果您使用的是網際網路閘道或虛擬私有閘道 (VGW),則請使用
--gateway-id取代--transit-gateway-id。 -
使用您在上一個步驟中建立的路由表的 ID 取代
RT_ID。 -
使用您將用於混合節點的 CIDR 範圍取代
REMOTE_NODE_CIDR。 -
使用您將用於為混合節點上執行的 Pod 的 CIDR 範圍取代
REMOTE_POD_CIDR。Pod CIDR 範圍會對應至容器聯網介面 (CNI) 組態,而此組態最常使用覆蓋網路內部部署。如需詳細資訊,請參閱 設定混合節點的 CNI。 -
使用您 TGW 的 ID 取代
TGW_ID。
遠端節點網路
aws ec2 create-route \ --route-table-idRT_ID\ --destination-cidr-blockREMOTE_NODE_CIDR\ --transit-gateway-idTGW_ID
遠端 Pod 網路
aws ec2 create-route \ --route-table-idRT_ID\ --destination-cidr-blockREMOTE_POD_CIDR\ --transit-gateway-idTGW_ID
(選用) 步驟 6:將子網路和路由表建立關聯
如果您在上一個步驟中建立了自訂路由表,請將您在上一個步驟中建立的每個子網路與您的自訂路由表建立關聯。如果您要修改 VPC 主要路由表,子網路會自動與 VPC 的主要路由表建立關聯,並且您可以略過此步驟。
對先前步驟中建立的每個子網路,執行下列命令。使用您在上一個步驟中建立的路由表取代 RT_ID。使用子網路的 ID 取代 SUBNET_ID。
aws ec2 associate-route-table --route-table-idRT_ID--subnet-idSUBNET_ID
叢集安全群組組態
持續叢集操作需要為 EKS 叢集安全群組提供下列存取。當您使用設定的遠端節點和 Pod 網路建立或更新叢集時,Amazon EKS 會自動為混合節點建立必要的傳入安全群組規則。由於根據預設,安全群組允許所有傳出流量,Amazon EKS 不會自動修改混合節點的叢集安全群組的傳出規則。如果您想要自訂叢集安全群組,您可以根據下表中的規則限制流量。
| Type | 通訊協定 | Direction | 連線埠 | 來源 | 目的地 | 使用方式 |
|---|---|---|---|---|---|---|
|
HTTPS |
TCP |
傳入 |
443 |
遠端節點 CIDR |
N/A |
kubelet 到 Kubernetes API 伺服器 |
|
HTTPS |
TCP |
傳入 |
443 |
遠端 Pod CIDR |
N/A |
Pod,當 CNI 未針對 Pod 流量使用 NAT 時,需要存取 K8s API 伺服器。 |
|
HTTPS |
TCP |
傳出 |
10250 |
N/A |
遠端節點 CIDR |
Kubernetes API 伺服器到 Kubelet |
|
HTTPS |
TCP |
傳出 |
Webhook 連接埠 |
N/A |
遠端 Pod CIDR |
Kubernetes API 伺服器到 Webhook (如果在混合節點上執行 Webhooks on hybrid nodes) |
重要
安全群組規則限制:根據預設,Amazon EC2 安全群組最多有 60 條傳入規則。如果您的叢集安全群組接近此限制,則安全群組傳入規則可能不適用。在此情況下,可能需要在缺少的傳入規則中手動進行新增。
CIDR 清除責任:如果您從 EKS 叢集中移除遠端節點或 Pod 網路,EKS 不會自動移除對應的安全群組規則。您負責從安全群組規則中手動移除未使用的遠端節點或 Pod 網路。
如需有關 Amazon EKS 建立的叢集安全群組的詳細資訊,請參閱 檢視叢集的 Amazon EKS 安全群組要求。
(選用) 手動安全群組組態
如果您需要建立其他安全群組或修改自動建立的規則,您可以使用下列命令作為參考。根據預設,以下命令會建立一個允許所有傳出存取的安全群組。您可以將傳出存取限制為僅包含上述規則。如果您正在考慮限制傳出規則,建議您先徹底測試所有應用程式和 Pod 連線,之後再將變更的規則套用到生產叢集。
-
在第一個命令中,使用您安全群組的名稱取代
SG_NAME -
在第一個命令中,使用您在上一個步驟中建立的 VPC 的 ID 取代
VPC_ID -
在第二個命令中,使用您在第一個命令中建立的安全群組的 ID 取代
SG_ID -
在第二個命令中,使用混合節點和內部部署網路的值取代
REMOTE_NODE_CIDR和REMOTE_POD_CIDR。
aws ec2 create-security-group \ --group-nameSG_NAME\ --description "security group for hybrid nodes" \ --vpc-idVPC_ID
aws ec2 authorize-security-group-ingress \ --group-idSG_ID\ --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 443, "ToPort": 443, "IpRanges": [{"CidrIp": "REMOTE_NODE_CIDR"}, {"CidrIp": "REMOTE_POD_CIDR"}]}]'