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

協助改善此頁面

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

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

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

準備混合節點的聯網

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

混合節點網路連線。

內部部署聯網組態

最低網路需求

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

內部部署節點和 Pod CIDRs

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

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

  1. 位於下列其中一個 IPv4 RFC-1918 範圍內:172.16.0.0/1210.0.0.0/8192.168.0.0/16

  2. 不會彼此、EKS 叢集的 VPC CIDR 或 Kubernetes 服務 IPv4 CIDR 重疊。

內部部署 Pod 網路路由

使用 EKS 混合節點時,通常建議您在內部部署網路上讓內部部署 Pod CIDRs 可路由,以便在雲端和內部部署環境之間啟用完整的叢集通訊和功能。

可路由 Pod 網路

如果您能夠在內部部署網路上讓 Pod 網路可路由,請遵循下列指引。

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

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

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

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

  5. Application AWS Load Balancer 和 Amazon Managed Service for Prometheus 等 AWS 其他服務能夠與混合節點上執行的工作負載進行通訊,以平衡網路流量和湊集 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. Application AWS Load Balancer 和 Amazon Managed Service for Prometheus 等 AWS 其他服務無法與在混合節點上執行的工作負載通訊。

在混合節點安裝和升級期間需要存取

在安裝程序期間,您必須在主機上安裝混合節點相依性時,擁有下列網域的存取權。當您建置作業系統映像時,此程序可以完成一次,也可以在每個主機上執行。這包括初始安裝和升級混合節點的 Kubernetes 版本時。

元件 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

注意

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

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

持續叢集操作所需的存取

持續叢集操作需要您現場部署防火牆的下列網路存取。

重要

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

Type 通訊協定 Direction 連線埠 來源 目的地 用量

HTTPS

TCP

傳出

443

遠端節點 CIDR (s)

EKS IPs 1

kubelet 到 Kubernetes API 伺服器

HTTPS

TCP

傳出

443

遠端 Pod CIDR (s)

EKS 叢集 IPs 1

Pod 到 Kubernetes API 伺服器

HTTPS

TCP

傳出

443

遠端節點 CIDR (s)

SSM 服務端點

SSM 混合啟用每隔 5 分鐘重新整理登入資料和 SSM 活動訊號

HTTPS

TCP

傳出

443

遠端節點 CIDR (s)

IAM Anywhere 服務端點

IAM Roles Anywhere 登入資料重新整理

HTTPS

TCP

傳出

443

遠端 Pod CIDR (s)

STS 區域端點

Pod 到 STS 端點,僅 IRSA 需要

HTTPS

TCP

傳出

443

遠端節點 CIDR (s)

Amazon EKS Auth 服務端點

節點至 Amazon EKS 身分驗證端點,僅 Amazon EKS Pod 身分需要

HTTPS

TCP

傳入

10250

EKS IPs 1

遠端節點 CIDR (s)

Kubernetes API 伺服器到 kubelet

HTTPS

TCP

傳入

Webhook 連接埠

EKS IPs 1

遠端 Pod CIDR (s)

Kubernetes API 伺服器到 Webhook

HTTPS

TCP、UDP

傳入、傳出

53

遠端 Pod CIDR (s)

遠端 Pod CIDR (s)

Pod 到 CoreDNS。如果您在雲端中執行至少 1 個 CoreDNS 複本,則必須允許 DNS 流量到執行 CoreDNS 的 VPC。

使用者定義

使用者定義

傳入、傳出

應用程式連接埠

遠端 Pod CIDR (s)

遠端 Pod CIDR (s)

Pod 到 Pod

注意

1 EKS 叢集IPs。請參閱 Amazon EKS 彈性網路介面的下一節。

Amazon EKS 網路介面

Amazon EKS 會將網路介面連接到您在叢集建立期間傳遞的 VPC 中的子網路,以啟用 EKS 控制平面與 VPC 之間的通訊。您可以在 Amazon EC2 主控台中或使用 CLI 建立叢集後,找到 Amazon EKS 建立的網路介面。 AWS 在 EKS 叢集上套用變更時,會刪除原始網路介面並建立新的網路介面,例如 Kubernetes 版本升級。您可以針對叢集建立期間傳遞的子網路使用限制子網路大小來限制 Amazon EKS 網路介面的 IP 範圍,這可讓您更輕鬆地設定內部部署防火牆,以允許此已知限制 IPs 組的傳入/傳出連線。若要控制要在哪些子網路中建立網路介面,您可以限制您在建立叢集時指定的子網路數量,也可以在建立叢集之後更新子網路。

Amazon EKS 佈建的網路介面具有格式 的說明Amazon EKS your-cluster-name 。如需可用來尋找 Amazon AWS EKS 佈建之網路介面 IP 地址的 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 CIDRs 重疊。您必須在 VPC 路由表中為內部部署節點和選用的 Pod CIDRs 設定路由。必須設定這些路由,將流量路由到您用於混合網路連線的閘道,這通常是虛擬私有閘道 (VGW) 或傳輸閘道 (TGW)。如果您使用 TGW 或 VGW 將 VPC 連接到內部部署環境,則必須為 VPC 建立 TGW 或 VGW 附件。您的 VPC 必須支援 DNS 主機名稱和 DNS 解析。

下列步驟使用 AWS CLI。您也可以在 中 AWS Management Console 或透過 AWS CloudFormation、 AWS CDK 或 Terraform 等其他界面建立這些資源。

步驟 1:建立 VPC

  1. 執行下列命令來建立 VPC。VPC_CIDR 將 取代為 IPv4 RFC-1918 (私有) non-RFC-1918 (公有) 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。SUBNET_CIDR 將 取代為子網路的 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。SUBNET_ID2 使用您在上一個步驟中建立IDs 取代 SUBNET_ID1和 。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。VPN_ID 以 VGW 的 ID 取代 。VPC_ID 將 取代為 VPC 的 ID。

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

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

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

aws ec2 create-route-table --vpc-id VPC_ID

步驟 5:建立內部部署節點和 Pod 的路由

在路由表中為每個內部部署遠端節點建立路由。您可以修改 VPC 的主路由表,或使用您在上一個步驟中建立的自訂路由表。

以下範例示範如何為您的內部部署節點和 Pod CIDRs 建立路由。在範例中,傳輸閘道 (TGW) 用於連接 VPC 與內部部署環境。如果您有多個內部部署節點和 Pod CIDRs,請為每個 CIDR 重複這些步驟。

  • 如果您使用的是網際網路閘道或虛擬私有閘道 (VGW),請將 取代--transit-gateway-id--gateway-id

  • RT_ID 以您在上一個步驟中建立的路由表 ID 取代 。

  • REMOTE_NODE_CIDR 以您將用於混合節點的 CIDR 範圍取代 。

  • REMOTE_POD_CIDR 以您將用於在混合節點上執行之 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 將 取代為您在上一個步驟中建立的路由表。SUBNET_ID 將 取代為子網路的 ID。

aws ec2 associate-route-table --route-table-id RT_ID --subnet-id SUBNET_ID

叢集安全群組組態

持續叢集操作需要 EKS 叢集安全群組的下列存取權。

Type 通訊協定 Direction 連線埠 來源 目的地 用量

HTTPS

TCP

傳入

443

遠端節點 CIDR (s)

N/A

Kubelet 到 Kubernetes API 伺服器

HTTPS

TCP

傳入

443

遠端 Pod CIDR (s)

N/A

當 CNI 未使用 NAT 進行 Pod 流量時,需要存取 K8s API 伺服器的 Pod。

HTTPS

TCP

傳出

10250

N/A

遠端節點 CIDR (s)

Kubernetes API 伺服器到 Kubelet

HTTPS

TCP

傳出

Webhook 連接埠

N/A

遠端 Pod CIDR (s)

Kubernetes API 伺服器到 Webhook (如果在混合節點上執行 Webhook)

若要使用傳入存取規則建立安全群組,請執行下列命令。當您建立 Amazon EKS 叢集時,必須傳遞此安全群組。根據預設,以下命令會建立允許所有傳出存取的安全群組。您可以限制傳出存取只包含上述規則。如果您考慮限制傳出規則,建議您先徹底測試所有應用程式和 Pod 連線,再將已變更的規則套用至生產叢集。

  • 在第一個命令中,SG_NAME將 取代為安全群組的名稱

  • 在第一個命令中,將 取代VPC_ID為您在上一個步驟中建立的 VPC ID

  • 在第二個命令中,將 取代SG_ID為您在第一個命令中建立的安全群組 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"}]}]'