

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 为混合节点配置附加组件
<a name="hybrid-nodes-add-ons"></a>

本页介绍通过 Amazon EKS 混合节点功能运行 AWS 附加组件和社区附加组件的注意事项。要详细了解 Amazon EKS 附加组件以及在集群中创建、升级和移除附加组件的过程，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。除本页中另有说明的外，对于具有混合节点的 Amazon EKS 集群，创建、升级和删除 Amazon EKS 附加组件的过程与使用在 AWS 云端运行的节点的 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 容器组身份代理  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/eks/latest/userguide/hybrid-nodes-add-ons.html)  | 
|  节点监控代理  |  v1.2.0-eksbuild.1 及更高版本  | 
|  CSI 快照控制器  |  v8.1.0-eksbuild.1 及更高版本  | 
|   适用于 Kubernetes 的 AWS Private CA Connector  |  v1.6.0-eksbuild.1 及更高版本  | 
|  Amazon FSx CSI 驱动程序  |  v1.7.0-eksbuild.1 及更高版本  | 
|   AWS Secrets Store CSI Driver 提供程序  |  v2.1.1-eksbuild.1 及更高版本  | 

下列社区附加组件与 Amazon EKS 混合节点功能兼容。要了解有关社区组件的更多信息，请参阅[社区附加组件](community-addons.md)。


| 社区附加组件 | 兼容的附加组件版本 | 
| --- | --- | 
|  Kubernetes Metrics Server  |  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 及更高版本  | 
|  External DNS  |  v0.19.0-eksbuild.1 及更高版本  | 

除以上表格所列的 Amazon EKS 附加组件外，[Amazon Managed Service for Prometheus Collector](prometheus.md)，以及用于[应用程序入口](alb-ingress.md)（HTTP）和[负载均衡](network-load-balancing.md)（TCP/UDP）的 [AWS 负载均衡器控制器](aws-load-balancer-controller.md)也与混合节点功能兼容。

有些 AWS 附加组件和社区附加组件与 Amazon EKS 混合节点功能不兼容。这些附加组件的最新版本存在针对混合节点所应用默认 `eks.amazonaws.com/compute-type: hybrid` 标签的反亲和性规则。这会在集群中部署有混合节点时阻止这些附加组件在混合节点上运行。如果集群既有混合节点又有在 AWS 云端运行的节点，则可以在集群中将这些附加组件部署到在 AWS 云端运行的节点。Amazon VPC CNI 与混合节点功能不兼容，Amazon EKS 混合节点功能支持将 Cilium 和 Calico 作为容器网络接口（CNI）。请参阅[为混合节点配置 CNI](hybrid-nodes-cni.md)了解更多信息。

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

后续章节介绍了与其他 Amazon EKS 计算类型相比，在混合节点上运行兼容的 AWS 附加组件的区别。

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

使用 AWS API 和 AWS SDK（包括通过 AWS CLI）创建 EKS 集群时，EKS 会默认将 kube-proxy 和 CoreDNS 安装为自主管理型附加组件。您可以在集群创建后使用 Amazon EKS 附加组件覆盖这些附加组件。有关[在 Amazon EKS 集群中管理 `kube-proxy`](managing-kube-proxy.md)和[在 Amazon EKS 集群中管理 DNS 的 CoreDNS](managing-coredns.md)的详细信息，请参阅 EKS 文档。如果您运行混合模式集群，既有混合节点，也有位于 AWS 云的节点，则 AWS 建议混合节点上至少有一个 CoreDNS 副本，在 AWS 云的节点上也至少有一个 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/)。如果在混合节点上运行此操作符，则本地容器组 CIDR 必须可在本地网络上路由，并且必须为您的 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）可用的情况下才能提供节点级别指标。混合节点提供集群、工作负载、容器组和容器级别的指标。

按照[使用 Amazon CloudWatch Observability 安装 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 到远程容器组网络 CIDR 的路由以及本地防火墙中打开的端口。此外，集群必须具有[私有集群端点访问权限](cluster-endpoint.md)。

按照《Amazon Managed Service for Prometheus 用户指南》中 [Using an AWS managed collector](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 操作符，则本地容器组 CIDR 必须可在本地网络上路由，并且必须为您的 EKS 集群配置远程容器组网络。有关更多信息，请参阅[为混合节点配置 Webhook](hybrid-nodes-webhooks.md)。

按照《AWS Distro for OpenTelemetry》文档中 [Getting Started with AWS Distro for OpenTelemetry using EKS Add-Ons](https://aws-otel.github.io/docs/getting-started/adot-eks-add-on) **部分说明的步骤进行操作。

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

您可以将 [AWS 负载均衡器控制器](aws-load-balancer-controller.md)和应用程序负载均衡器（ALB）或目标类型为 `ip` 的网络负载均衡器（NLB）用于混合节点上的工作负载。与 ALB 或 NLB 一起使用的 IP 目标必须可从 AWS 路由。AWS 负载均衡器控制器也使用 [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)。如果在混合节点上运行 AWS 负载均衡器控制器操作符，则本地容器组 CIDR 必须可在本地网络上路由，并且必须为您的 EKS 集群配置远程容器组网络。有关更多信息，请参阅[为混合节点配置 Webhook](hybrid-nodes-webhooks.md)。

要安装 AWS 负载均衡器控制器，请按照[AWS 应用程序负载均衡器](hybrid-nodes-ingress.md#hybrid-nodes-ingress-alb)或[AWS 网络负载均衡器](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-nlb)部分说明的步骤操作。

对于使用 ALB 的 Ingress，您必须指定下面的注释。请参阅[使用应用程序负载均衡器路由应用程序和 HTTP 流量](alb-ingress.md)了解更多信息。

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

对于使用 NLB 的负载均衡，您必须指定下面的注释。请参阅[使用网络负载均衡器路由 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 容器组身份代理
<a name="hybrid-nodes-add-ons-pod-id"></a>

**注意**  
要在运行 Bottlerocket 的混合节点上成功部署 EKS 容器组身份代理附加组件，请确保您的 Bottlerocket 版本至少为 v1.39.0。混合节点环境中较早的 Bottlerocket 版本不支持容器组身份代理。

原始 Amazon EKS 容器组身份代理 DaemonSet 仅在节点上的 EC2 IMDS 可用时才能获取必需的 AWS 凭证。由于 IMDS 在混合节点上不可用，因此从版本 1.3.3-eksbuild.1 开始，容器组身份代理附加组件可以选择部署挂载所需凭证的 DaemonSet。运行 Bottlerocket 的混合节点需要不同的方法来挂载凭证，从 1.3.7-eksbuild.2 版本开始，容器组身份代理附加组件可以选择部署特别以 Bottlerocket 混合节点为目标的 DaemonSet。以下各节介绍启用可选 DaemonSet 的过程。

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

1. 要在 Ubuntu/RHEL/Al2023 混合节点上使用容器组身份代理，请按如下所示，在 `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` 容器组使用。此凭证文件包含将会定期刷新的临时 AWS 凭证。

1. 在*每个*节点上更新 `nodeadm` 配置后，使用您的 `nodeConfig.yaml` 运行以下 `nodeadm init` 命令，从而将混合节点加入 Amazon EKS 集群。如果节点之前已经加入集群，仍可再次运行 `nodeadm init` 命令。

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

1. 使用 AWS CLI 或 AWS 管理控制台安装 `eks-pod-identity-agent`，并启用混合节点支持。

   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 控制台安装容器组身份代理附加组件，请在可选配置中添加以下内容，以部署将混合节点作为目标的 DaemonSet。

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

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

1. 要在 Bottlerocket 混合节点上使用容器组身份代理，请在用于 Bottlerocket 引导容器用户数据的命令中添加 `--enable-credentials-file=true` 标志，如 [连接使用 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. 使用 AWS CLI 或 AWS 管理控制台安装 `eks-pod-identity-agent` 并启用 Bottlerocket 混合节点支持。

   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 控制台安装容器组身份代理附加组件，请在可选配置中添加以下内容，以部署将 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)执行针对混合节点的软反亲和性规则，偏向让控制器 `deployment` 在与 Amazon EKS 控制面板相同的 AWS 区域中的 EC2 上运行。将 `deployment` 与 Amazon EKS 控制面板托管在同一 AWS 区域有助于减少延迟。

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

后续章节介绍了与其他 Amazon EKS 计算类型相比，在混合节点上运行兼容的社区附加组件的区别。

## Kubernetes Metrics Server
<a name="hybrid-nodes-add-ons-metrics-server"></a>

控制面板需要能够连接到 Metrics Server 的容器组 IP（如果启用了 hostNetwork，则需要能够连接到节点 IP）。因此，除非在 hostNetwork 模式下运行 Metrics Server，否则在创建 Amazon EKS 集群时必须配置远程容器组网络，并且必须确保您的容器 IP 地址可路由。要使容器组 IP 地址可路由，一种常用的方法是使用 CNI 实现边界网关协议（BGP）。

## 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`，则本地容器组 CIDR 必须可在本地网络上路由，并且必须为您的 EKS 集群配置远程容器组网络。有关更多信息，请参阅[为混合节点配置 Webhook](hybrid-nodes-webhooks.md)。