选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

为混合节点配置 Webhook

聚焦模式
为混合节点配置 Webhook - Amazon EKS

帮助改进此页面

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

帮助改进此页面

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

本页详细介绍了使用混合节点运行 Webhook 的注意事项。在 Kubernetes 应用程序和开源项目(例如 AWS 负载均衡器控制器和 CloudWatch 可观测性代理)中,Webhook 用于执行运行时更改和验证功能。

如果在混合节点上运行 Webhook,则本地容器组 CIDR 必须可在本地网络上路由,并且必须为 EKS 集群配置远程容器组网络,以便 EKS 控制面板能够与在混合节点上运行的 Webhook 通信。

您可以通过多种方法来使本地容器组 CIDR 可在本地网络上路由,包括边界网关协议(BGP)、静态路由或其他自定义路由解决方案。我们推荐使用 BGP 方案,因为与需要自定义或手动路由配置的备选解决方案相比,此方案具有更好的可扩展性并且更易于管理。AWS 支持使用 Cilium 和 Calico 的 BGP 功能来公开混合节点的容器组 CIDR,有关更多信息,请参阅为混合节点配置 CNI

如果无法使本地容器组 CIDR 可在本地网络上路由,并且需要运行 Webhook,则建议在混合节点所在同一 EKS 集群中的 EC2 实例上运行 Webhook。

混合模式集群的注意事项

混合模式集群是指为既有混合节点又有在 AWS 云端运行的节点的 EKS 集群。运行混合模式集群时应注意以下建议:

  • 在 AWS 云端节点上运行 VPC CNI,在混合节点上运行 Cilium 或 Calico。在 AWS 云端节点上运行时,AWS 不支持 Cilium 和 Calico。

  • 如果应用程序要求在 AWS 云端节点上运行的容器组直接与在混合节点上运行的容器组通信(“东西向通信”),并且您在 AWS 云端节点上使用 VPC CNI,在混合节点上以叠加/隧道模式使用 Cilium 或 Calico,则必须使本地容器组 CIDR 可在本地网络上路由。

  • 在 AWS 云端节点上运行至少一个 CoreDNS 副本,在混合节点上至少运行一个 CoreDNS 副本。要了解配置步骤,请参阅为混合模式集群配置附加组件和 Webhook

  • 配置要在 AWS 云端节点上运行的 Webhook。要了解在运行混合模式集群时如何配置将由 AWS 和社区附加组件使用的 Webhook,请参阅为附加组件配置 Webhook

  • 如果使用应用程序负载均衡器(ALB)或网络负载均衡器(NLB)来处理在混合节点上运行的工作负载流量,则用于 ALB 或 NLB 的 IP 目标必须可以从 AWS 路由。

  • Metrics Server 附加组件需要能够从 EKS 控制面板连接到 Metrics Server 容器组 IP 地址。如果在混合节点上运行 Metrics Server 附加组件,则本地容器组 CIDR 必须可在本地网络上路由。

  • 要使用 Amazon Managed Service for Prometheus(AMP)托管式收集器来收集混合节点的指标,本地容器组 CIDR 必须可在本地网络上路由。您也可以将 AMP 托管式收集器用于 EKS 控制面板指标以及在 AWS 云端运行的节点,以及使用 AWS Distro for OpenTelemetry(ADOT)附加组件来收集混合节点的指标。

为混合模式集群配置附加组件和 Webhook

要查看集群上运行的更改和验证 Webhook,可以通过集群的 EKS 控制台的资源面板查看扩展资源类型,也可以使用以下命令。EKS 还会在集群可观测性控制面板中报告 Webhook 指标,有关更多信息,请参阅使用可观测性仪表板监控您的集群

kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations

配置 CoreDNS 副本

如果您运行混合模式集群,既有混合节点,也有位于 AWS 云端的节点,则建议混合节点上至少有一个 CoreDNS 副本,在 AWS 云端的节点上也至少有一个 CoreDNS 副本。可按以下步骤操作,混合模式集群设置中将 CoreDNS 服务配置为首选距离最近的 CoreDNS 副本,来预防延迟和网络问题。

  1. 为每个混合节点添加一个拓扑分区标签,例如 topology.kubernetes.io/zone: onprem。此外也可以通过在 nodeadm 配置中指定该标签,从而在 nodeadm init 阶段完成此操作。请注意,在 AWS 云端运行的节点会自动应用一个拓扑分区标签,与节点的可用区(AZ)相对应。

    kubectl label node hybrid-node-name topology.kubernetes.io/zone=zone
  2. 使用拓扑分区键将 podAntiAffinity 添加到 CoreDNS 部署配置中。您也可以在安装过程中使用 EKS 附加组件配置 CoreDNS 部署。

    kubectl edit deployment coredns -n kube-system
    spec: template: spec: affinity: ... podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname weight: 100 - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: topology.kubernetes.io/zone weight: 50 ...
  3. trafficDistribution 添加到 kube-dns 服务配置中。

    kubectl edit service kube-dns -n kube-system
    spec: ... trafficDistribution: PreferClose

为附加组件配置 Webhook

以下附加组件使用 Webhook,并支持将 Webhook 用于混合节点。

  • AWS Load Balancer Controller

  • CloudWatch 可观测性代理

  • AWS Distro for OpenTelemetry (ADOT)

请参阅以下章节,了解如何配置这些附加组件使用的 Webhook,以在 AWS 云端的节点上运行。

AWS Load Balancer Controller

要在混合模式集群设置下在 AWS 云端节点上运行 AWS 负载均衡器控制器,请将以下内容添加到您的 Helm 值配置中,或者使用 EKS 附加组件配置来指定值。

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

CloudWatch 可观测性代理

CloudWatch 可观测性代理附加组件有一个使用 Webhook 的操作符。要在混合模式集群设置下在 AWS 云端节点上运行此操作符,请编辑 CloudWatch 可观测性代理操作符配置。已计划在未来的发行版中推出在安装过程中使用 Helm 和 EKS 附加组件配置操作符亲和性的功能(参见 containers-roadmap 问题 #2431)。

kubectl edit -n amazon-cloudwatch deployment amazon-cloudwatch-observability-controller-manager
spec: ... template: ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

AWS Distro for OpenTelemetry (ADOT)

AWS Distro for OpenTelemetry(ADOT)附加组件有一个使用 Webhook 的操作符。要在混合模式集群设置下在 AWS 云端节点上运行此操作符,请将以下内容添加到您的 Helm 值配置中,或者使用 EKS 附加组件配置来指定值。

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

如果您的容器组 CIDR 无法在本地网络上路由,请将 ADOT 收集器自定义资源定义(CRD)配置为在混合节点上运行,以便可以从混合节点以及在其上运行的工作负载中抓取指标。

kubectl -n opentelemetry-operator-system edit opentelemetrycollectors.opentelemetry.io adot-col-prom-metrics
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid

您可以通过在 ADOT 收集器 CRD 配置中将以下 relabel_configs 添加到每个 scrape_configs 中,从而将 ADOT 收集器配置为仅从混合节点以及在混合节点上运行的资源中抓取指标。

relabel_configs: - action: keep regex: hybrid source_labels: - __meta_kubernetes_node_label_eks_amazonaws_com_compute_type

ADOT 附加组件的一个先决条件是为 ADOT 操作符 Webhook 使用的 TLS 证书安装证书管理器。该证书管理器也会运行 Webhook,您可以使用以下 Helm 值配置将其配置为在 AWS 云端节点上运行。

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。