

 **協助改進此頁面** 

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

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

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

# 設定混合節點的附加元件
<a name="hybrid-nodes-add-ons"></a>

此頁面說明在 Amazon EKS 混合節點上執行 AWS 附加元件和社群附加元件的考量。若要進一步了解 Amazon EKS 附加元件，以及從叢集建立、升級和移除附加元件的程序，請參閱 [Amazon EKS 附加元件](eks-add-ons.md)。除非此頁面另有說明，否則對於具有混合節點的 Amazon EKS 叢集，建立、升級和移除 Amazon EKS 附加元件的程序與在 AWS Cloud 中執行節點的 Amazon EKS 叢集相同。只有此頁面中包含的附加元件已經過驗證，可與 Amazon EKS 混合節點相容。

下列 AWS 附加元件與 Amazon EKS 混合節點相容。


|  AWS 附加元件 | 相容的附加元件版本 | 
| --- | --- | 
|  kube-proxy  |  v1.25.14-eksbuild.2 及更新版本  | 
|  CoreDNS  |  v1.9.3-eksbuild.7 及更新版本  | 
|   AWS Distro for OpenTelemetry (ADOT)  |  v0.102.1-eksbuild.2 及更新版本  | 
|  CloudWatch 可觀測性代理程式  |  v2.2.1-eksbuild.1 及更新版本  | 
|  EKS Pod 身分識別代理程式  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/hybrid-nodes-add-ons.html)  | 
|  節點監控代理程式  |  v1.2.0-eksbuild.1 及更新版本  | 
|  CSI 快照控制器  |  v8.1.0-eksbuild.1 及更新版本  | 
|   AWS Kubernetes 專用私有 CA 連接器  |  v1.6.0-eksbuild.1 及更新版本  | 
|  Amazon FSx CSI 驅動程式  |  v1.7.0-eksbuild.1 及更高版本  | 
|   AWS Secrets Store CSI 驅動程式提供者  |  v2.1.1-eksbuild.1 及更高版本  | 

下列社群附加元件與 Amazon EKS 混合節點相容。若要進一步了解社群附加元件，請參閱 [社群附加元件](community-addons.md)。


| 社群附加元件 | 相容的附加元件版本 | 
| --- | --- | 
|  Kubernetes 指標伺服器  |  v0.7.2-eksbuild.1 及更新版本  | 
|  cert-manager  |  v1.17.2-eksbuild.1 及更新版本  | 
|  Prometheus Node Exporter  |  v1.9.1-eksbuild.2 及更新版本  | 
|  kube-state-metrics  |  v2.15.0-eksbuild.4 及更新版本  | 
|  外部 DNS  |  v0.19.0-eksbuild.1 及更新版本  | 

除了上表中的 Amazon EKS 附加元件之外，[Amazon Managed Service for Prometheus 收集器](prometheus.md)及適用於[應用程式傳入](alb-ingress.md) (HTTP) 和[負載平衡](network-load-balancing.md) (TCP/UDP) 的 [AWS Load Balancer 控制器](aws-load-balancer-controller.md)可與混合節點相容。

有些 AWS 附加元件和社群附加元件與 Amazon EKS 混合節點不相容。這些附加元件的最新版本對套用至混合節點的預設 `eks.amazonaws.com/compute-type: hybrid` 標籤具有反親和性規則。這可以防止它們在叢集中部署時於混合節點上執行。如果您有在 AWS Cloud 中同時執行混合節點和節點的叢集，您可以將叢集中的這些附加元件部署到在 AWS Cloud 中執行的節點。Amazon VPC CNI 與混合節點不相容，並且支援 Cilium 和 Calico 作為 Amazon EKS 混合節點的容器聯網介面 (CNI)。如需詳細資訊，請參閱[設定混合節點的 CNI](hybrid-nodes-cni.md)。

## AWS 附加元件
<a name="hybrid-nodes-add-ons-aws-add-ons"></a>

以下各節說明在混合節點上執行相容 AWS 附加元件與其他 Amazon EKS 運算類型之間的差異。

## kube-proxy 和 CoreDNS
<a name="hybrid-nodes-add-ons-core"></a>

當您使用 AWS API 和 AWS SDKs 建立 EKS 叢集時，EKS 預設會將 kube-proxy 和 CoreDNS 安裝為自我管理附加元件，包括來自 AWS CLI 的 。建立叢集後，您可以使用 Amazon EKS 附加元件覆寫這些附加元件。如需有關 [在 Amazon EKS 叢集中管理 `kube-proxy`](managing-kube-proxy.md) 和 [在 Amazon EKS 叢集中管理 DNS 的 CoreDNS](managing-coredns.md) 的詳細資訊，請參閱 EKS 文件。如果您執行的混合模式叢集同時具有混合節點和 AWS Cloud 中的節點， AWS 建議在混合節點上至少有一個 CoreDNS 複本，並在 AWS Cloud 中的節點上至少有一個 CoreDNS 複本。如需組態步驟，請參閱 [設定 CoreDNS 複本](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-coredns)。

## CloudWatch 可觀測性代理程式
<a name="hybrid-nodes-add-ons-cw"></a>

CloudWatch 可觀測性代理程式運算子使用 [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)。如果您在混合節點上執行運算子，您的內部部署 Pod CIDR 必須在內部部署網路上可路由，而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊，請參閱[設定混合節點的 Webhook](hybrid-nodes-webhooks.md)。

節點層級指標不適用於混合節點，因為 [CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 取決於節點層級指標的[執行個體中繼資料服務](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) (IMDS) 的可用性。叢集、工作負載、Pod 和容器層級指標可供混合節點使用。

遵循[使用 Amazon CloudWatch 可觀測性安裝 CloudWatch 代理程式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html)中所述的步驟安裝附加元件後，必須先更新附加元件資訊清單，然後代理程式才能在混合節點上成功執行。編輯叢集上的 `amazoncloudwatchagents` 資源，以新增 `RUN_WITH_IRSA` 環境變數，如下所示。

```
kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
```

```
apiVersion: v1
items:
- apiVersion: cloudwatch.aws.amazon.com/v1alpha1
  kind: AmazonCloudWatchAgent
  metadata:
    ...
    name: cloudwatch-agent
    namespace: amazon-cloudwatch
    ...
  spec:
    ...
    env:
    - name: RUN_WITH_IRSA # <-- Add this
      value: "True" # <-- Add this
    - name: K8S_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
          ...
```

## 適用於混合節點的 Amazon Managed Prometheus 受管收集器
<a name="hybrid-nodes-add-ons-amp"></a>

Amazon Managed Service for Prometheus (AMP) 受管收集器包含一個抓取器，並且可從 Amazon EKS 叢集中的資源探索和收集指標。AMP 會為您管理抓取器，而無需自行管理任何執行個體、代理程式或抓取器。

您可以使用 AMP 受管收集器，而無需任何其他專屬於混合節點的組態。不過，混合節點上應用程式的指標端點必須可從 VPC 連線，包括從 VPC 路由到遠端 Pod 網路 CIDR 及內部部署防火牆中開啟的連接埠。此外，您的叢集必須擁有[私有叢集端點存取權](cluster-endpoint.md)。

請遵循《Amazon Managed Service for Prometheus 使用者指南》中的[使用 AWS 受管收集器](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html)中的步驟。

## AWS Distro for OpenTelemetry (ADOT)
<a name="hybrid-nodes-add-ons-adot"></a>

您可以使用 AWS Distro for OpenTelemetry (ADOT) 附加元件，從混合節點上執行的應用程式收集指標、日誌和追蹤資料。ADOT 使用許可 [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/) 來變更和驗證收集器自訂資源請求。如果您在混合節點上執行 ADOT 運算子，您的內部部署 Pod CIDR 必須在內部部署網路上可路由，而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊，請參閱[設定混合節點的 Webhook](hybrid-nodes-webhooks.md)。

請遵循 [AWS Distro for OpenTelemetry 文件中的使用 EKS 附加元件的 Distro for OpenTelemetry 入門](https://aws-otel.github.io/docs/getting-started/adot-eks-add-on)中的步驟。 * AWS OpenTelemetry* 

## AWS Load Balancer控制器
<a name="hybrid-nodes-add-ons-lbc"></a>

您可以使用[AWS Load Balancer控制器](aws-load-balancer-controller.md)和 Application Load Balancer (ALB) 或 Network Load Balancer (NLB) 搭配混合節點上`ip`工作負載的目標類型。搭配 ALB 或 NLB 使用的 IP 目標必須可路由 AWS。The AWS Load Balancer 控制器也使用 [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)。如果您在混合節點上執行 AWS Load Balancer控制器運算子，您的內部部署 Pod CIDR 必須在內部部署網路上可路由，而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊，請參閱[設定混合節點的 Webhook](hybrid-nodes-webhooks.md)。

若要安裝 AWS Load Balancer控制器，請遵循 [AWS Application Load Balancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-alb)或 中的步驟[AWS Network Load Balancer](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-nlb)。

對於使用 ALB 的傳入，您必須指定以下註釋。如需詳細資訊，請參閱[透過 Application Load Balancer 路由應用程式與 HTTP 流量](alb-ingress.md)。

```
alb.ingress.kubernetes.io/target-type: ip
```

對於使用 NLB 的負載平衡，您必須指定以下註釋。如需詳細資訊，請參閱[透過 Network Load Balancer 路由 TCP 與 UDP 流量](network-load-balancing.md)。

```
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
```

## EKS Pod 身分識別代理程式
<a name="hybrid-nodes-add-ons-pod-id"></a>

**注意**  
若要在執行 Bottlerocket 的混合節點上成功部署 EKS Pod 身分識別代理程式附加元件，請確保您的 Bottlerocket 版本至少為 v1.39.0。在混合節點環境中，較早版本的 Bottlerocket 不支援 Pod 身分識別代理程式。

原始 Amazon EKS Pod Identity Agent DaemonSet 依賴節點上 EC2 IMDS 的可用性來取得所需的 AWS 登入資料。由於 IMDS 不適用於混合節點，因此從版本 1.3.3-eksbuild.1 開始，Pod 身分識別代理程式附加元件可選擇性地部署會掛載所需憑證的 DaemonSet。執行 Bottlerocket 的混合節點需要不同的方法來掛載憑證，並且版本 1.3.7-eksbuild.2 開始，Pod 身分識別代理程式附加元件可選擇性地部署專門以 Bottlerocket 混合節點為目標的 DaemonSet。下列各節說明啟用選用 DaemonSets 的程序。

### Ubuntu/RHEL/AL2023
<a name="_ubunturhelal2023"></a>

1. 若要在 Ubuntu/RHEL/Al2023 混合節點上使用 Pod 身分識別代理程式，請在 `nodeadm` 組態的混合區段中設定 `enableCredentialsFile: true`，如下所示：

   ```
   apiVersion: node.eks.aws/v1alpha1
   kind: NodeConfig
   spec:
       hybrid:
           enableCredentialsFile: true # <-- Add this
   ```

   這將設定 `nodeadm` 以建立憑證檔案，而該檔案可在 `/eks-hybrid/.aws/credentials` 下的節點上進行設定，且，在其將由 `eks-pod-identity-agent` Pod 使用。此登入資料檔案將包含將定期重新整理的臨時 AWS 登入資料。

1. 更新*每個*節點上的 `nodeadm` 組態後，請使用 `nodeConfig.yaml` 執行下列 `nodeadm init` 命令，以將混合節點加入 Amazon EKS 叢集。如果您的節點先前已加入叢集，仍請再次執行 `nodeadm init` 命令。

   ```
   nodeadm init -c file://nodeConfig.yaml
   ```

1. 使用 CLI 或 ，`eks-pod-identity-agent`在啟用混合節點支援的情況下安裝 AWS AWS 管理主控台。

   1.  AWS CLI：從您用來管理叢集的機器中，執行下列命令來安裝 `eks-pod-identity-agent`，並啟用混合節點的支援。使用您叢集的名稱取代 `my-cluster`。

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid":{"create": true}}}'
      ```

   1.  AWS 管理主控台：如果您透過 AWS 主控台安裝 Pod Identity Agent 附加元件，請將下列項目新增至選用組態，以部署以混合節點為目標的 DaemonSet。

      ```
      {"daemonsets":{"hybrid":{"create": true}}}
      ```

### Bottlerocket
<a name="_bottlerocket"></a>

1. 若要在 Bottlerocket 混合節點上使用 Pod 身分識別代理程式，請將 `--enable-credentials-file=true` 旗標新增至用於 Bottlerocket 引導容器使用者資料的命令，如 [使用 Bottlerocket 連接混合節點](hybrid-nodes-bottlerocket.md) 中所述。

   1. 如果您使用的是 SSM 憑證提供者，則您的命令應該如下所示：

      ```
      eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region> --enable-credentials-file=true
      ```

   1. 如果您使用的是 IAM Roles Anywhere 憑證提供者，則您的命令應該如下所示：

      ```
      eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key> --enable-credentials-file=true
      ```

      這將設定引導指令碼，以在 `/var/eks-hybrid/.aws/credentials` 下的節點上建立憑證，且其將由 `eks-pod-identity-agent` Pod 使用。此登入資料檔案將包含將定期重新整理的臨時 AWS 登入資料。

1. 使用 CLI 或 ，`eks-pod-identity-agent`在已啟用 Bottlerocket AWS 混合節點的支援下安裝 AWS 管理主控台。

   1.  AWS CLI：從您用來管理叢集的機器中，執行下列命令來安裝 `eks-pod-identity-agent` ，並啟用 Bottlerocket 混合節點的支援。使用您叢集的名稱取代 `my-cluster`。

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}'
      ```

   1.  AWS 管理主控台：如果您透過 AWS 主控台安裝 Pod Identity Agent 附加元件，請將下列項目新增至選用組態，以部署以 Bottlerocket 混合節點為目標的 DaemonSet。

      ```
      {"daemonsets":{"hybrid-bottlerocket":{"create": true}}}
      ```

## CSI 快照控制器
<a name="hybrid-nodes-add-ons-csi-snapshotter"></a>

從版本 開始`v8.1.0-eksbuild.2`，[CSI 快照控制器附加元件](csi-snapshot-controller.md)會套用混合節點的軟性反親和性規則，偏好控制器在與 Amazon EKS 控制平面相同的 AWS 區域中於 EC2 `deployment`上執行。在`deployment`與 Amazon EKS 控制平面相同的 AWS 區域中聯合放置 可改善延遲。

## 社群附加元件
<a name="hybrid-nodes-add-ons-community"></a>

以下各節說明在混合節點上執行相容的社群附加元件與其他 Amazon EKS 運算類型之間的差異。

## Kubernetes 指標伺服器
<a name="hybrid-nodes-add-ons-metrics-server"></a>

控制平面需要連接指標伺服器的 Pod IP (如果啟用 hostNetwork，則為節點 IP)。因此，除非您在 hostNetwork 模式下執行指標伺服器，否則您必須在建立 Amazon EKS 叢集時設定遠端 Pod 網路，而且必須使 Pod IP 位址可路由。使用 CNI 實作邊界閘道協定 (BGP) 是讓您的 Pod IP 位址可路由的常見方式之一。

## cert-manager
<a name="hybrid-nodes-add-ons-cert-manager"></a>

 `cert-manager` 會使用 [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)。如果您在混合節點上執行 `cert-manager`，您的內部部署 Pod CIDR 必須在內部部署網路上可路由，而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊，請參閱[設定混合節點的 Webhook](hybrid-nodes-webhooks.md)。