協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EKS 混合節點閘道入門
此頁面會逐步解說 Amazon EKS 混合節點閘道的先決條件、環境準備、安裝、驗證和移除。如需閘道及其架構的簡介,請參閱 Amazon EKS 混合節點閘道。
先決條件
安裝混合節點閘道之前,請確認您的環境符合下列要求:
-
EKS 叢集支援 Cilium CNI 和 VTEP — 您的 EKS 叢集必須使用 EKS 版本的 Cilium 作為混合節點上的 CNI,並且必須啟用 Cilium VTEP。如需詳細資訊,請參閱設定混合節點閘道的 CNI。
-
AWS 雲端節點上的 VPC CNI — 叢集中的閘道節點和其他雲端節點必須使用 AWS VPC CNI。閘道依賴 VPC 原生路由來轉送 VPC 和 VXLAN 通道之間的流量。
-
混合連線 — 您的 VPC 與內部部署環境之間需要私有連線。您可以使用 AWS Direct Connect、 AWS Site-to-Site VPN 或您自己的 VPN 解決方案。如需詳細資訊,請參閱準備混合節點的聯網。
-
允許 VXLAN 流量 — 連接到閘道 EC2 執行個體的安全群組必須允許連接埠 8472 上的傳入和傳出 UDP 流量。在混合節點端,內部部署防火牆規則也必須允許 UDP 連接埠 8472 往返閘道節點 IP 地址的流量。
-
路由表管理的 IAM 許可 — 閘道需要下列 EC2 動作來管理 VPC 路由表:
-
ec2:DescribeRouteTables -
ec2:CreateRoute -
ec2:ReplaceRoute -
ec2:DescribeInstances您可以使用下列其中一種方法授予這些許可:
-
-
EKS 自動模式 (如果閘道節點使用自動模式) — 如果您計劃使用 EKS 自動模式來佈建閘道節點,則必須在 EKS 叢集上啟用自動模式。如需詳細資訊,請參閱啟用 EKS 自動模式。
準備閘道節點
閘道至少需要兩個 EC2 節點才能實現高可用性。閘道支援兩個節點組態選項:
-
EKS Auto 模式 (建議) — 節點會使用
NodePool和 自動佈建NodeClass。來源/目的地檢查、標籤和污點都是以宣告方式設定。 -
受管節點群組 — 您可以使用受管節點群組或自我管理節點佈建節點。可以透過受管節點群組 API 設定標籤,也可以使用自訂啟動範本搭配使用者資料來停用來源/目的地檢查。
EKS Auto 模式 (建議)
使用 EKS Auto Mode 時,您必須先建立 NodePool和 ,NodeClass再安裝 Helm Chart。NodePool 會使用正確的標籤、污點和來源/目的地檢查組態來佈建 EC2 執行個體。您不需要手動佈建或設定節點。
將下列資源套用至您的叢集,取代預留位置值:
-
YOUR_NODE_ROLE— EKS Auto Mode 用來佈建節點的節點 IAM 角色名稱。這是您在叢集上啟用自動模式時所設定 (或 EKS 建立的角色)。如需詳細資訊,請參閱建立 EKS Auto Mode 的節點 IAM 角色。 -
YOUR_CLUSTER_NAME— EKS 叢集名稱。 -
SUBNET_ID_1、SUBNET_ID_2— 不同可用區域中IDs,其中將佈建閘道節點。
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: hybrid-gateway spec: advancedNetworking: sourceDestCheck: DisabledPrimaryENI role:YOUR_NODE_ROLEsecurityGroupSelectorTerms: - tags: aws:eks:cluster-name:YOUR_CLUSTER_NAMEsubnetSelectorTerms: - id:SUBNET_ID_1- id:SUBNET_ID_2--- apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: hybrid-gateway spec: template: metadata: labels: hybrid-gateway-node: "true" spec: expireAfter: 336h nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: hybrid-gateway requirements: - key: karpenter.sh/capacity-type operator: In values: - on-demand - key: eks.amazonaws.com/instance-category operator: In values: - c - m - r - key: eks.amazonaws.com/instance-generation operator: Gt values: - "4" - key: kubernetes.io/arch operator: In values: - amd64 - key: kubernetes.io/os operator: In values: - linux taints: - key: hybrid-gateway-node effect: NoSchedule terminationGracePeriod: 24h0m0s disruption: budgets: - nodes: 10% consolidateAfter: 30s consolidationPolicy: WhenEmptyOrUnderutilized
此組態中的金鑰欄位:
-
advancedNetworking.sourceDestCheck: DisabledPrimaryENI— 停用節點主要 ENI 的 EC2 來源/目的地檢查,讓閘道可以將未定址的流量轉送給自己。 -
taints—hybrid-gateway-node: NoSchedule污點可確保這些節點上只有具有相符容錯排程的閘道 Pod。 -
labels— Helm Chart 的節點選擇器會使用hybrid-gateway-node: "true"標籤,將閘道 Pod 目標設為這些節點。 -
nodeClassRef— 使用來源/目的地檢查組態將 NodePool 連結至 NodeClass。
受管節點群組
使用受管節點群組時,請為閘道建立專用節點群組,其中包含必要的標籤、污點和自訂啟動範本,以在啟動時停用來源/目的地檢查。
步驟 1:建立啟動範本
使用使用者資料建立啟動範本,以在執行個體開機時停用主要 ENI 的來源/目的地檢查:
# Create the launch template with user data to disable source/dest check USERDATA=$(cat <<'SCRIPT' | base64 -w 0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 60") MAC=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/mac) ENI_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/interface-id") REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/placement/region) aws ec2 modify-network-interface-attribute \ --network-interface-id "$ENI_ID" \ --no-source-dest-check \ --region "$REGION" --==BOUNDARY==-- SCRIPT ) aws ec2 create-launch-template \ --launch-template-nameYOUR_CLUSTER_NAME-gateway-lt \ --launch-template-data "{\"UserData\":\"${USERDATA}\",\"MetadataOptions\":{\"HttpTokens\":\"required\",\"HttpPutResponseHopLimit\":2}}"
注意
節點的 IAM 角色必須具有ec2:ModifyNetworkInterfaceAttribute許可,使用者資料指令碼才能成功。MIME 分段格式可確保使用者資料與 EKS 引導指令碼一起執行。
步驟 2:建立受管節點群組
從步驟 1 建立具有閘道標籤、污點和啟動範本的專用受管節點群組:
aws eks create-nodegroup \ --cluster-nameYOUR_CLUSTER_NAME\ --nodegroup-nameYOUR_CLUSTER_NAME-gateway-nodes \ --subnetsSUBNET_ID_1 SUBNET_ID_2\ --node-roleYOUR_NODE_ROLE_ARN\ --instance-typesINSTANCE_TYPE\ --ami-type AL2023_x86_64_STANDARD \ --scaling-config desiredSize=2,maxSize=2,minSize=2 \ --labels hybrid-gateway-node=true \ --taints "key=hybrid-gateway-node,effect=NO_SCHEDULE" \ --launch-template "name=YOUR_CLUSTER_NAME-gateway-lt,version=1"
這會建立 2 節點受管節點群組,其中:
-
--labels會設定 ,hybrid-gateway-node=true讓 Helm Chart 的節點選擇器以這些節點為目標。 -
--taintsNoSchedule新增了污點,因此只有閘道 Pod 在這些節點上具有相符的容錯排程。 -
--launch-template連接啟動範本,該範本會在開機時停用來源/目的地檢查。
在不同可用區域中使用子網路以獲得高可用性。
使用 Helm 安裝
EKS 自動模式
執行下列命令以使用 EKS Auto 模式安裝閘道:
helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set vpcCIDR=VPC_CIDR\ --set podCIDRs=POD_CIDRS\ --set routeTableIDs=ROUTE_TABLE_IDS
受管節點群組或自我管理節點
對於受管節點群組或自我管理節點,設定 autoMode.enabled=false:
helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set autoMode.enabled=false \ --set vpcCIDR=VPC_CIDR\ --set podCIDRs=POD_CIDRS\ --set routeTableIDs=ROUTE_TABLE_IDS
必要的 Helm 值
所有安裝都需要下列值:
| Value | Description |
|---|---|
|
|
EKS 叢集 VPC 的 CIDR 區塊 (例如 |
|
|
Cilium 在混合節點上使用的 Pod CIDRs 逗號分隔清單 (例如 |
|
|
要程式設計的 VPC 路由表 IDs 逗號分隔清單 (例如 |
如需可設定值的完整清單,請參閱 Amazon EKS 混合節點閘道組態參考。
驗證安裝
安裝閘道之後,請確認閘道正在執行且運作狀態良好。
檢查 Pod 狀態
確認兩個閘道 Pod 正在執行:
kubectl get pods -n eks-hybrid-nodes-gateway
您應該會看到類似以下的輸出:
NAME READY STATUS RESTARTS AGE eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 1/1 Running 0 2m eks-hybrid-nodes-gateway-5d4f6a7b8c-def34 1/1 Running 0 2m
檢查領導者選擇
確認一個 Pod 已取得領導者選擇租用:
kubectl get lease -n eks-hybrid-nodes-gateway
輸出會在 HOLDER欄中顯示目前的領導者:
NAME HOLDER AGE hybrid-gateway-leader eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 2m
檢查運作狀態端點
驗證運作狀態端點是否使用連接埠轉送來回應領導 Pod:
kubectl port-forward -n eks-hybrid-nodes-gatewayLEADER_POD_NAME8088:8088 & curl -s http://localhost:8088/healthz
運作狀態良好的閘道會傳回 HTTP 200 回應。
驗證 VPC 路由表項目
在 Amazon VPC 主控台或使用 AWS CLI 中,確認您的 VPC 路由表包含指向領導閘道執行個體 ENI 的混合式 Pod CIDRs 項目:
aws ec2 describe-route-tables \ --route-table-idsROUTE_TABLE_ID\ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"
每個混合 Pod CIDR 都應有一個路由,並將 NetworkInterfaceId設定為領導執行個體的主要 ENI。
解除安裝
若要移除混合節點閘道,請執行:
helm uninstall eks-hybrid-nodes-gateway --namespace eks-hybrid-nodes-gateway
注意
解除安裝 Helm Chart 不會自動移除閘道建立的 VPC 路由表項目。解除安裝後,從 VPC 路由表手動刪除混合 Pod CIDRs的路由,以避免將流量路由到不再執行閘道的執行個體。您可以使用 CLI AWS 移除路由:
aws ec2 delete-route \ --route-table-idROUTE_TABLE_ID\ --destination-cidr-blockPOD_CIDR
後續步驟
-
Amazon EKS 混合節點閘道組態參考 — 自訂 Helm 值、CLI 旗標和領導者選擇參數。
-
Amazon EKS 混合節點閘道操作 — 監控閘道、了解容錯移轉行為,以及規劃擴展。
-
Amazon EKS 混合節點閘道疑難排解 — 診斷並解決常見問題。