

 **協助改進此頁面** 

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

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

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

# EKS 混合節點閘道入門
<a name="hybrid-nodes-gateway-getting-started"></a>

此頁面會逐步解說 Amazon EKS 混合節點閘道的先決條件、環境準備、安裝、驗證和移除。如需閘道及其架構的簡介，請參閱 [Amazon EKS 混合節點閘道](hybrid-nodes-gateway-overview.md)。

## 先決條件
<a name="hybrid-nodes-gateway-prerequisites"></a>

安裝混合節點閘道之前，請確認您的環境符合下列要求：
+  **EKS 叢集支援 Cilium CNI 和 VTEP** — 您的 EKS 叢集必須使用 EKS 版本的 Cilium 作為混合節點上的 CNI，並且必須啟用 Cilium VTEP。如需詳細資訊，請參閱[設定混合節點閘道的 CNI](hybrid-nodes-gateway-cni.md)。
+  ** AWS 雲端節點上的 VPC CNI** — 叢集中的閘道節點和其他雲端節點必須使用 AWS VPC CNI。閘道依賴 VPC 原生路由來轉送 VPC 和 VXLAN 通道之間的流量。
+  **混合連線** — 您的 VPC 與內部部署環境之間需要私有連線。您可以使用 AWS Direct Connect、 AWS Site-to-Site VPN 或您自己的 VPN 解決方案。如需詳細資訊，請參閱[準備混合節點的聯網](hybrid-nodes-networking.md)。
+  **允許 VXLAN 流量** — 連接到閘道 EC2 執行個體的安全群組必須允許連接埠 8472 上的傳入和傳出 UDP 流量。在混合節點端，內部部署防火牆規則也必須允許 UDP 連接埠 8472 往返閘道節點 IP 地址的流量。
+  **路由表管理的 IAM 許可** — 閘道需要下列 EC2 動作來管理 VPC 路由表：
  +  `ec2:DescribeRouteTables` 
  +  `ec2:CreateRoute` 
  +  `ec2:ReplaceRoute` 
  +  `ec2:DescribeInstances` 

    您可以使用下列其中一種方法授予這些許可：

------
#### [ EKS Pod Identity (recommended) ]

    使用 [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) 僅將許可授予閘道 Pod 的服務帳戶。

    1. 如果尚未安裝 EKS Pod Identity Agent 附加元件，請在叢集上安裝：

       ```
       aws eks create-addon \
         --cluster-name {{CLUSTER_NAME}} \
         --addon-name eks-pod-identity-agent
       ```

    1. 使用 EKS Pod Identity 所需的 EC2 許可和信任政策建立 IAM 角色：

       ```
       cat > gateway-trust-policy.json << 'EOF'
       {
         "Version": "2012-10-17" 		 	 	 ,
         "Statement": [
           {
             "Effect": "Allow",
             "Principal": { "Service": "pods.eks.amazonaws.com" },
             "Action": ["sts:AssumeRole", "sts:TagSession"]
           }
         ]
       }
       EOF
       
       aws iam create-role \
         --role-name EKSHybridNodesGatewayRole \
         --assume-role-policy-document file://gateway-trust-policy.json
       
       aws iam put-role-policy \
         --role-name EKSHybridNodesGatewayRole \
         --policy-name HybridNodesGatewayRouteTable \
         --policy-document '{
           "Version": "2012-10-17" 		 	 	 ,
           "Statement": [{
             "Effect": "Allow",
             "Action": [
               "ec2:DescribeRouteTables",
               "ec2:CreateRoute",
               "ec2:ReplaceRoute",
               "ec2:DescribeInstances"
             ],
             "Resource": "*"
           }]
         }'
       ```

    1. 建立將 IAM 角色連結至閘道服務帳戶的 Pod 身分關聯：

       ```
       aws eks create-pod-identity-association \
         --cluster-name {{CLUSTER_NAME}} \
         --namespace eks-hybrid-nodes-gateway \
         --service-account eks-hybrid-nodes-gateway \
         --role-arn {{arn:aws:iam::ACCOUNT_ID:role/EKSHybridNodesGatewayRole}}
       ```

------
#### [ Node IAM role ]

    將具有必要許可的內嵌或受管政策連接至與閘道節點執行個體描述檔相關聯的 IAM 角色：

    ```
    aws iam put-role-policy \
      --role-name {{NODE_ROLE_NAME}} \
      --policy-name HybridNodesGatewayRouteTable \
      --policy-document '{
        "Version": "2012-10-17" 		 	 	 ,
        "Statement": [{
          "Effect": "Allow",
          "Action": [
            "ec2:DescribeRouteTables",
            "ec2:CreateRoute",
            "ec2:ReplaceRoute",
            "ec2:DescribeInstances"
          ],
          "Resource": "*"
        }]
      }'
    ```

    閘道節點上的所有 Pod 都將具有這些許可。

------
+  **EKS 自動模式 （如果閘道節點使用自動模式）** — 如果您計劃使用 EKS 自動模式來佈建閘道節點，則必須在 EKS 叢集上啟用自動模式。如需詳細資訊，請參閱[啟用 EKS 自動模式](https://docs.aws.amazon.com/eks/latest/userguide/migrate-auto.html)。

## 準備閘道節點
<a name="hybrid-nodes-gateway-prepare-nodes"></a>

閘道至少需要兩個 EC2 節點才能實現高可用性。閘道支援兩個節點組態選項：
+  [EKS Auto 模式 （建議）](#hybrid-nodes-gateway-auto-mode-nodes) — 節點會使用 `NodePool`和 自動佈建`NodeClass`。來源/目的地檢查、標籤和污點都是以宣告方式設定。
+  [受管節點群組](#hybrid-nodes-gateway-mng-nodes) — 您可以使用受管節點群組或自我管理節點佈建節點。可以透過受管節點群組 API 設定標籤，也可以使用自訂啟動範本搭配使用者資料來停用來源/目的地檢查。

### EKS Auto 模式 （建議）
<a name="hybrid-nodes-gateway-auto-mode-nodes"></a>

使用 EKS Auto Mode 時，您必須先建立 `NodePool`和 ，`NodeClass`再安裝 Helm Chart。NodePool 會使用正確的標籤、污點和來源/目的地檢查組態來佈建 EC2 執行個體。您不需要手動佈建或設定節點。

將下列資源套用至您的叢集，取代預留位置值：
+  {{YOUR\_NODE\_ROLE}} — EKS Auto Mode 用來佈建節點的節點 IAM 角色名稱。這是您在叢集上啟用自動模式時所設定 （或 EKS 建立的角色）。如需詳細資訊，請參閱[建立 EKS Auto Mode 的節點 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/auto-create-node-role.html)。
+  {{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_ROLE}}
  securityGroupSelectorTerms:
    - tags:
        aws:eks:cluster-name: {{YOUR_CLUSTER_NAME}}
  subnetSelectorTerms:
    - 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。

### 受管節點群組
<a name="hybrid-nodes-gateway-mng-nodes"></a>

使用受管節點群組時，請為閘道建立專用節點群組，其中包含必要的標籤、污點和自訂啟動範本，以在啟動時停用來源/目的地檢查。

#### 步驟 1：建立啟動範本
<a name="_step_1_create_a_launch_template"></a>

使用使用者資料建立啟動範本，以在執行個體開機時停用主要 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-name {{YOUR_CLUSTER_NAME}}-gateway-lt \
  --launch-template-data "{\"UserData\":\"${USERDATA}\",\"MetadataOptions\":{\"HttpTokens\":\"required\",\"HttpPutResponseHopLimit\":2}}"
```

**注意**  
節點的 IAM 角色必須具有`ec2:ModifyNetworkInterfaceAttribute`許可，使用者資料指令碼才能成功。MIME 分段格式可確保使用者資料與 EKS 引導指令碼一起執行。

#### 步驟 2：建立受管節點群組
<a name="_step_2_create_the_managed_node_group"></a>

從步驟 1 建立具有閘道標籤、污點和啟動範本的專用受管節點群組：

```
aws eks create-nodegroup \
  --cluster-name {{YOUR_CLUSTER_NAME}} \
  --nodegroup-name {{YOUR_CLUSTER_NAME}}-gateway-nodes \
  --subnets {{SUBNET_ID_1 SUBNET_ID_2}} \
  --node-role {{YOUR_NODE_ROLE_ARN}} \
  --instance-types {{INSTANCE_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 的節點選擇器以這些節點為目標。
+  `--taints` `NoSchedule` 新增了污點，因此只有閘道 Pod 在這些節點上具有相符的容錯排程。
+  `--launch-template` 連接啟動範本，該範本會在開機時停用來源/目的地檢查。

在不同可用區域中使用子網路以獲得高可用性。

## 使用 Helm 安裝
<a name="hybrid-nodes-gateway-install"></a>

### EKS 自動模式
<a name="hybrid-nodes-gateway-install-auto"></a>

執行下列命令以使用 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}}
```

### 受管節點群組或自我管理節點
<a name="hybrid-nodes-gateway-install-mng"></a>

對於受管節點群組或自我管理節點，設定 `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 值
<a name="hybrid-nodes-gateway-required-values"></a>

所有安裝都需要下列值：


| Value | 說明 | 
| --- | --- | 
|  `vpcCIDR`  | EKS 叢集 VPC 的 CIDR 區塊 （例如 `10.0.0.0/16`)。用於 Cilium VTEP 組態，以便混合節點透過閘道路由 VPC 繫結流量。 | 
|  `podCIDRs`  | Cilium 在混合節點上使用的 Pod CIDRs 逗號分隔清單 （例如 `10.100.0.0/16,10.101.0.0/16`)。閘道會為這些 CIDRs 建立 VPC 路由表項目和 VXLAN 路由。 | 
|  `routeTableIDs`  | 要程式設計的 VPC 路由表 IDs 逗號分隔清單 （例如 `rtb-0abc1234def567890,rtb-0fed9876cba543210`)。閘道會在這些資料表中建立將混合 Pod CIDRs 指向作用中閘道執行個體的路由。 | 

如需可設定值的完整清單，請參閱 [Amazon EKS 混合節點閘道組態參考](hybrid-nodes-gateway-configuration.md)。

## 驗證安裝
<a name="hybrid-nodes-gateway-verify"></a>

安裝閘道之後，請確認閘道執行正常。

### 檢查 Pod 狀態
<a name="hybrid-nodes-gateway-verify-pods"></a>

確認兩個閘道 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
```

### 檢查領導者選擇
<a name="hybrid-nodes-gateway-verify-leader"></a>

確認一個 Pod 已取得領導者選擇租用：

```
kubectl get lease -n eks-hybrid-nodes-gateway
```

輸出會在 `HOLDER`欄中顯示目前的領導者：

```
NAME                     HOLDER                                      AGE
hybrid-gateway-leader    eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12   2m
```

### 檢查運作狀態端點
<a name="hybrid-nodes-gateway-verify-health"></a>

驗證運作狀態端點是否使用連接埠轉送來回應領導 Pod：

```
kubectl port-forward -n eks-hybrid-nodes-gateway {{LEADER_POD_NAME}} 8088:8088 &
curl -s http://localhost:8088/healthz
```

運作狀態良好的閘道會傳回 HTTP 200 回應。

### 驗證 VPC 路由表項目
<a name="hybrid-nodes-gateway-verify-routes"></a>

在 Amazon VPC 主控台或使用 AWS CLI 中，確認您的 VPC 路由表包含指向領導閘道執行個體 ENI 的混合式 Pod CIDRs 項目：

```
aws ec2 describe-route-tables \
  --route-table-ids {{ROUTE_TABLE_ID}} \
  --query "RouteTables[].Routes[?DestinationCidrBlock=='POD_CIDR']"
```

每個混合 Pod CIDR 都應有一個路由，並將 `NetworkInterfaceId`設定為領導執行個體的主要 ENI。

## 解除安裝
<a name="hybrid-nodes-gateway-uninstall"></a>

若要移除混合節點閘道，請執行：

```
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-id {{ROUTE_TABLE_ID}} \
  --destination-cidr-block {{POD_CIDR}}
```

## 後續步驟
<a name="hybrid-nodes-gateway-getting-started-next"></a>
+  [Amazon EKS 混合節點閘道組態參考](hybrid-nodes-gateway-configuration.md) — 自訂 Helm 值、CLI 旗標和領導者選擇參數。
+  [Amazon EKS 混合節點閘道操作](hybrid-nodes-gateway-operations.md) — 監控閘道、了解容錯移轉行為，以及規劃擴展。
+  [Amazon EKS 混合節點閘道疑難排解](hybrid-nodes-gateway-troubleshooting.md) — 診斷並解決常見問題。