帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 副本,来预防延迟和网络问题。
-
为每个混合节点添加一个拓扑分区标签,例如
topology.kubernetes.io/zone: onprem
。此外也可以通过在nodeadm
配置中指定该标签,从而在nodeadm init
阶段完成此操作。请注意,在 AWS 云端运行的节点会自动应用一个拓扑分区标签,与节点的可用区(AZ)相对应。kubectl label node
hybrid-node-name
topology.kubernetes.io/zone=zone
-
使用拓扑分区键将
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 ...
-
将
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