準備混合節點的聯網 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

準備混合節點的聯網

本主題概述了您在建立 Amazon EKS 叢集和連接混合節點之前必須設定的聯網設定。本指南假設您已符合使用 AWS Site-to-Site VPNAWS Direct Connect 或您自己的 VPN 解決方案實現混合網路連線的先決條件要求。

混合節點網路連線。

內部部署聯網組態

最低網路需求

為了獲得最佳體驗,建議您為混合節點與 AWS 區域之間的連接,提供至少 100 Mbps 的可靠網路連線能力,以及最多 200 毫秒的往返延遲。這是適用於大多數使用案例的一般指引,但並非嚴格要求。頻寬和延遲需求可能會因混合節點的數量和工作負載特性而有所不同,例如應用程式映像大小、應用程式彈性、監控和記錄組態,以及存取儲存在其他 AWS 服務中的資料的應用程式相依性。建議您在部署到生產環境之前,先使用您自己的應用程式和環境進行測試,以驗證您的聯網設定是否符合工作負載的需求。

內部部署節點和 Pod CIDR

識別將用於混合節點及其上執行的工作負載的節點和 Pod CIDR。如果您為 CNI 使用覆蓋網路,節點 CIDR 會從內部部署網路配置,而 Pod CIDR 會從您的容器網路介面 (CNI) 配置。當您使用 RemoteNodeNetworkRemotePodNetwork 欄位建立 EKS 叢集時,您可以將內部部署節點 CIDR 和 Pod CIDR 作為輸入進行傳遞。您的內部部署節點 CIDR 必須在內部部署網路上可路由。如需內部部署 Pod CIDR 可路由性的資訊,請參閱下一節。

內部部署節點和 Pod CIDR 區塊必須符合下列要求:

  1. 處於以下 IPv4 RFC-1918 範圍之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

  2. EKS 叢集的 VPC CIDR 或您的 Kubernetes Service IPv4 CIDR 不會彼此重疊。

內部部署 Pod 網路路由

使用 EKS 混合節點時,我們通常會建議您將內部部署網路上的內部部署 Pod CIDR 設定為可路由,以便啟用雲端和內部部署環境之間的完整叢集通訊和功能。

可路由的 Pod 網路

如果您能夠將內部部署網路上的 Pod 網路設定為可路由,請遵循下列指引。

  1. 設定以下 RemotePodNetwork 欄位:使用內部部署 Pod CIDR 的 EKS 叢集、使用內部部署 Pod CIDR 的 VPC 路由表,以及使用內部部署 Pod CIDR 的 EKS 叢集安全群組。

  2. 您可以使用多種技術,讓您的內部部署 Pod CIDR 在內部部署網路上可路由,包括邊界閘道協定 (BGP)、靜態路由或其他自訂路由解決方案。BGP 是建議的解決方案,因為它比需要自訂或手動路由組態的替代解決方案更具可擴展性且更容易管理。AWS 支援 Cilium 和 Calico 的 BGP 功能,可用於公告 Pod CIDR,如需詳細資訊,請參閱 設定混合節點的 CNI可路由的遠端 Pod CIDR

  3. Webhooks 可以在混合節點上執行,因為 EKS 控制平面能夠與指派給 Webhook 的 Pod IP 位址進行通訊。

  4. 在雲端節點上執行的工作負載能夠直接與同一 EKS 叢集中混合節點上執行的工作負載進行通訊。

  5. 其他 AWS 服務 (例如 AWS Application Load Balancer 和 Amazon Managed Service for Prometheus),能夠與混合節點上執行的工作負載進行通訊,以平衡網路流量及抓取 Pod 指標。

不可路由的 Pod 網路

如果您能將內部部署網路上的 Pod 網路設定為可路由,請遵循下列指引。

  1. Webhook 無法在混合節點上執行,因為 Webhook 需要從 EKS 控制平面連線至指派給 Webhook 的 Pod IP 位址。在此情況下,我們建議您在與混合節點相同的 EKS 叢集中的雲端節點上執行 Webhook,如需詳細資訊,請參閱 設定混合節點的 Webhook

  2. 當對雲端節點使用 VPC CNI 及對混合節點使用 Cilium 或 Calico 時,雲端節點上執行的工作負載將不能直接與混合節點上執行的工作負載進行通訊。

  3. 使用服務流量分佈,以將流量保持在其來源區域的本機。如需有關服務流量分佈的詳細資訊,請參閱 設定服務流量分佈

  4. 將 CNI 設定為在 Pod 流量離開內部部署主機時,使用輸出偽裝或網路位址轉譯 (NAT)。在 Cilium 中,其預設為啟用。Calico 需要將 natOutgoing 設定為 true

  5. 其他 AWS 服務 (例如 AWS Application Load Balancer 和 Amazon Managed Service for Prometheus),不能與混合節點上執行的工作負載進行通訊。

混合節點安裝和升級期間所需的存取

在安裝過程中 (即您在主機上安裝混合節點相依性時),您必須可以存取下列網域。當您建置作業系統映像時,可以執行此程序一次;另外在執行時期,也可在每個主機上執行此程序。這包括初始安裝以及升級混合節點的 Kubernetes 版本時。

某些套件是使用作業系統的預設套件管理工具進行安裝的。對於 AL2023 和 RHEL,yum 命令可用於安裝 containerdca-certificatesiptablesamazon-ssm-agent。對於 Ubuntu,apt 可用於安裝 containerdca-certificatesiptables,而 snap 可用於安裝 amazon-ssm-agent

元件 URL 通訊協定 連線埠

EKS 節點成品 (S3)

https://hybrid-assets.eks.amazonaws.com

HTTPS

443

EKS 服務端點

https://eks.region.amazonaws.com

HTTPS

443

ECR 服務端點

https://api.ecr.region.amazonaws.com

HTTPS

443

EKS ECR 端點

請參閱 檢視 Amazon EKS 附加元件的 Amazon 容器映像登錄檔 了解區域端點。

HTTPS

443

SSM 二進位檔端點 1

https://amazon-ssm-region.s3.region.amazonaws.com

HTTPS

443

SSM 服務端點 1

https://ssm.region.amazonaws.com

HTTPS

443

IAM Anywhere 二進位檔端點 2

https://rolesanywhere.amazonaws.com

HTTPS

443

IAM Anywhere 服務端點 2

https://rolesanywhere.region.amazonaws.com

HTTPS

443

作業系統套件管理工具端點

套件儲存庫端點是作業系統特定的,並且可能因地理區域而有所不同。

HTTPS

443

注意

1 只有在您為內部部署 IAM 憑證提供者使用 AWS SSM 混合啟用時,才需要存取 AWS SSM 端點。

2 只有在您為內部部署 IAM 憑證提供者使用 AWS IAM Roles Anywhere 時,才需要存取 AWS IAM 端點。

持續叢集操作所需的存取

持續叢集操作需要為您的內部部署防火牆提供下列網路存取。

重要

視您選擇的 CNI 而定,您需要為 CNI 連接埠設定其他網路存取規則。如需詳細資訊,請參閱 Cilium 文件Calico 文件

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 混合啟用憑證重新整理和 SSM 活動訊號,每 5 分鐘一次

HTTPS

TCP

傳出

443

遠端節點 CIDR

IAM Anywhere 服務端點

IAM Roles Anywhere 憑證重新整理

HTTPS

TCP

傳出

443

遠端 Pod CIDR

STS 區域端點

Pod 到 STS 端點,僅 IRSA 需要

HTTPS

TCP

傳出

443

遠端節點 CIDR

Amazon EKS Auth 服務端點

節點至 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 your-cluster-name 的說明。如需可用於尋找 Amazon EKS 佈建的網路介面的 IP 位址的 AWS CLI 命令,請參閱下列範例。使用您在叢集建立期間傳遞的 VPC 的 ID 取代 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

  1. 執行下列命令以建立 VPC。使用 IPv4 RFC-1918 (私有) 或 non-RFC-1918 (公有) CIDR 範圍取代 VPC_CIDR (例如 10.0.0.0/16)。注意:根據預設,已為 VPC 啟用 DNS 解析 (這是 EKS 要求)。

    aws ec2 create-vpc --cidr-block VPC_CIDR
  2. 為您的 VPC 啟用 DNS 主機名稱。請注意,根據預設,已為 VPC 啟用 DNS 解析。使用您在上一個步驟中建立的 VPC 的 ID 取代 VPC_ID

    aws ec2 modify-vpc-attribute --vpc-id VPC_ID --enable-dns-hostnames

步驟 2:建立子網路

建立至少 2 個子網路。Amazon EKS 會將這些子網路用於叢集網路介面。如需詳細資訊,請參閱子網路要求和考量事項

  1. 您可以使用下列命令尋找 AWS 區域的可用區域。使用您的區域取代 us-west-2

    aws ec2 describe-availability-zones \ --query 'AvailabilityZones[?(RegionName == us-west-2)].ZoneName'
  2. 建立子網。使用 VPC 的 ID 取代 VPC_ID。使用您子網路的 CIDR 區塊取代 SUBNET_CIDR (例如 10.0.1.0/24)。使用將建立子網路的可用區域取代 AZ (例如 us-west-2a)。您建立的子網路必須至少位於 2 個不同的可用區域。

    aws ec2 create-subnet \ --vpc-id VPC_ID \ --cidr-block SUBNET_CIDR \ --availability-zone AZ

(選用) 步驟 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_ID1SUBNET_ID2。使用您 TGW 的 ID 取代 TGW_ID

aws ec2 create-transit-gateway-vpc-attachment \ --vpc-id VPC_ID \ --subnet-ids SUBNET_ID1 SUBNET_ID2 \ --transit-gateway-id TGW_ID

虛擬私有閘道

執行下列命令以連接 Transit Gateway。使用您 VGW 的 ID 取代 VPN_ID。使用 VPC 的 ID 取代 VPC_ID

aws ec2 attach-vpn-gateway \ --vpn-gateway-id VPN_ID \ --vpc-id VPC_ID

(選用) 步驟 4:建立路由表

您可以修改 VPC 的主要路由表,也可以建立自訂路由表。下列步驟會建立自訂路由表,其中包含通往內部部署節點和 Pod CIDR 的路由。如需詳細資訊,請參閱子網路路由表。使用 VPC 的 ID 取代 VPC_ID

aws ec2 create-route-table --vpc-id VPC_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-id RT_ID \ --destination-cidr-block REMOTE_NODE_CIDR \ --transit-gateway-id TGW_ID

遠端 Pod 網路

aws ec2 create-route \ --route-table-id RT_ID \ --destination-cidr-block REMOTE_POD_CIDR \ --transit-gateway-id TGW_ID

(選用) 步驟 6:將子網路和路由表建立關聯

如果您在上一個步驟中建立了自訂路由表,請將您在上一個步驟中建立的每個子網路與您的自訂路由表建立關聯。如果您要修改 VPC 主要路由表,子網路會自動與 VPC 的主要路由表建立關聯,並且您可以略過此步驟。

對先前步驟中建立的每個子網路,執行下列命令。使用您在上一個步驟中建立的路由表取代 RT_ID。使用子網路的 ID 取代 SUBNET_ID

aws ec2 associate-route-table --route-table-id RT_ID --subnet-id SUBNET_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_CIDRREMOTE_POD_CIDR

aws ec2 create-security-group \ --group-name SG_NAME \ --description "security group for hybrid nodes" \ --vpc-id VPC_ID
aws ec2 authorize-security-group-ingress \ --group-id SG_ID \ --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 443, "ToPort": 443, "IpRanges": [{"CidrIp": "REMOTE_NODE_CIDR"}, {"CidrIp": "REMOTE_POD_CIDR"}]}]'