Webhooks für Hybridknoten konfigurieren - Amazon EKS

Hilf mit, diese Seite zu verbessern

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Wenn Sie zu diesem Benutzerhandbuch beitragen möchten, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Webhooks für Hybridknoten konfigurieren

Auf dieser Seite werden Überlegungen zum Ausführen von Webhooks mit Hybridknoten beschrieben. Webhooks werden in Kubernetes-Anwendungen und Open-Source-Projekten wie dem Load AWS Balancer Controller und dem CloudWatch Observability Agent verwendet, um Mutations- und Validierungsfunktionen zur Laufzeit auszuführen.

Routbare Pod-Netzwerke

Wenn Sie in der Lage sind, Ihren lokalen Pod-CIDR in Ihrem lokalen Netzwerk routingfähig zu machen, können Sie Webhooks auf Hybridknoten ausführen. Es gibt verschiedene Techniken, mit denen Sie Ihren lokalen Pod-CIDR in Ihrem lokalen Netzwerk routingfähig machen können, darunter Border Gateway Protocol (BGP), statische Routen oder andere benutzerdefinierte Routing-Lösungen. BGP ist die empfohlene Lösung, da sie skalierbarer und einfacher zu verwalten ist als alternative Lösungen, die eine benutzerdefinierte oder manuelle Routenkonfiguration erfordern. AWS unterstützt die BGP-Funktionen von Cilium und Calico für Werbe-Pods CIDRs. Weitere Informationen finden Sie unter Ein CNI für Hybridknoten konfigurieren undRoutbarer Remote-Pod CIDRs.

Pod-Netzwerke, die nicht routbar sind

Wenn Sie Ihren lokalen Pod-CIDR in Ihrem lokalen Netzwerk nicht routingfähig machen können und Webhooks ausführen müssen, empfehlen wir, dass Sie alle Webhooks auf Cloud-Knoten im selben EKS-Cluster wie Ihre Hybridknoten ausführen.

Überlegungen zu Clustern im gemischten Modus

Cluster im gemischten Modus sind als EKS-Cluster definiert, bei denen sowohl Hybridknoten als auch Knoten in der AWS Cloud ausgeführt werden. Beachten Sie bei der Ausführung eines Clusters im gemischten Modus die folgenden Empfehlungen:

  • Führen Sie das VPC-CNI auf Knoten in der AWS Cloud und entweder Cilium oder Calico auf Hybridknoten aus. Cilium und Calico werden nicht unterstützt, AWS wenn sie auf Knoten in der Cloud ausgeführt werden. AWS

  • Konfigurieren Sie Webhooks so, dass sie auf Knoten in der Cloud ausgeführt werden. AWS Weitere Informationen Konfigurieren Sie Webhooks für Add-Ons zur Konfiguration der Webhooks für AWS und Community-Add-Ons finden Sie unter.

  • Wenn für Ihre Anwendungen Pods erforderlich sind, die auf Knoten in der AWS Cloud ausgeführt werden, um direkt mit Pods zu kommunizieren, die auf Hybridknoten ausgeführt werden („Ost-West-Kommunikation“), und Sie das VPC-CNI auf Knoten in der AWS Cloud und Cilium oder Calico auf Hybridknoten verwenden, muss Ihr lokales Pod-CIDR in Ihrem lokalen Netzwerk routbar sein.

  • Führen Sie mindestens ein CoreDNS-Replikat auf Knoten in der AWS Cloud und mindestens ein CoreDNS-Replikat auf Hybridknoten aus.

  • Konfigurieren Sie die Dienstdatenverkehrsverteilung so, dass der Dienstverkehr lokal in der Zone bleibt, aus der er stammt. Weitere Informationen zur Verteilung des Dienstverkehrs finden Sie unterKonfigurieren Sie die Verteilung des Servicedatenverkehrs.

  • Wenn Sie AWS Application Load Balancers (ALB) oder Network Load Balancers (NLB) für Workload-Verkehr auf Hybridknoten verwenden, müssen die IP-Ziele, die mit dem ALB oder NLB verwendet werden, routbar sein. AWS

  • Das Metrics Server-Add-on erfordert Konnektivität von der EKS-Steuerebene zur Pod-IP-Adresse des Metrics Servers. Wenn Sie das Metrics Server-Add-on auf Hybridknoten ausführen, muss Ihr lokales Pod-CIDR in Ihrem lokalen Netzwerk routingfähig sein.

  • Um Metriken für Hybridknoten mithilfe von Amazon Managed Service for Prometheus (AMP) Managed Collectors zu sammeln, muss Ihr lokaler Pod-CIDR in Ihrem lokalen Netzwerk routingfähig sein. Oder Sie können den AMP Managed Collector für die Metriken und Ressourcen der EKS-Kontrollebene, die in der AWS Cloud ausgeführt werden, und das AWS Add-on Distro for OpenTelemetry (ADOT) verwenden, um Metriken für Hybridknoten zu sammeln.

Cluster im gemischten Modus konfigurieren

Um die mutierenden und validierenden Webhooks zu sehen, die auf Ihrem Cluster ausgeführt werden, können Sie den Ressourcentyp Erweiterungen im Bereich Ressourcen der EKS-Konsole für Ihren Cluster anzeigen oder Sie können die folgenden Befehle verwenden. EKS meldet auch Webhook-Metriken im Cluster-Observability-Dashboard, weitere Informationen finden Sie unter. Überwachen Sie Ihren Cluster mit dem Observability-Dashboard

kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations

Konfigurieren Sie die Verteilung des Servicedatenverkehrs

Wenn Sie Cluster im gemischten Modus ausführen, empfehlen wir, Service Traffic Distribution zu verwenden, um den Dienstverkehr lokal in der Zone zu halten, aus der er stammt. Service Traffic Distribution (verfügbar für Kubernetes-Versionen 1.31 und höher in EKS) ist die empfohlene Lösung gegenüber Topology Aware Routing, da sie vorhersehbarer ist. Mit Service Traffic Distribution erhalten fehlerfreie Endpunkte in der Zone den gesamten Datenverkehr für diese Zone. Bei topologiebewusstem Routing muss jeder Dienst mehrere Bedingungen in dieser Zone erfüllen, um das benutzerdefinierte Routing anwenden zu können. Andernfalls wird der Verkehr gleichmäßig an alle Endpunkte weitergeleitet.

Wenn Sie Cilium als Ihr CNI verwenden, müssen Sie das CNI mit der enable-service-topology Einstellung auf ausführen, um Service Traffic Distribution true zu aktivieren. Sie können diese Konfiguration mit dem Helm-Installationsflag übergeben --set loadBalancer.serviceTopology=true oder eine bestehende Installation mit dem Cilium-CLI-Befehl cilium config set enable-service-topology true aktualisieren. Der Cilium-Agent, der auf jedem Knoten ausgeführt wird, muss nach der Aktualisierung der Konfiguration für eine bestehende Installation neu gestartet werden.

Ein Beispiel für die Konfiguration von Service Traffic Distribution für den CoreDNS-Dienst finden Sie im folgenden Abschnitt. Wir empfehlen, dass Sie dasselbe für alle Services in Ihrem Cluster aktivieren, um unbeabsichtigten Umgebungsverkehr zu vermeiden.

CoreDNS-Replikate konfigurieren

Wenn Sie Cluster im gemischten Modus ausführen, empfehlen wir, dass Sie mindestens ein CoreDNS-Replikat auf Hybridknoten und mindestens ein CoreDNS-Replikat auf Knoten in der Cloud haben. AWS

  1. Fügen Sie beispielsweise für jeden Ihrer Hybridknoten ein Topologiezonen-Label hinzu. topology.kubernetes.io/zone: onprem Sie können das Label auch in der nodeadm init Phase festlegen, indem Sie das Label in Ihrer nodeadm Konfiguration angeben, sieheNode Config zum Anpassen von Kubelet (optional). Beachten Sie, dass auf Knoten, die in der AWS Cloud laufen, automatisch ein Topologiezonenlabel zugewiesen wird, das der Availability Zone (AZ) des Knotens entspricht.

    kubectl label node hybrid-node-name topology.kubernetes.io/zone=zone
  2. Fügen podAntiAffinity Sie der CoreDNS-Bereitstellung mit dem Topologiezonenschlüssel hinzu. Oder Sie können die CoreDNS-Bereitstellung während der Installation mit EKS-Add-Ons konfigurieren.

    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. Fügen Sie die Einstellung trafficDistribution: PreferClose zur kube-dns Dienstkonfiguration hinzu, um die Verteilung des Dienstverkehrs zu aktivieren.

    kubectl patch svc kube-dns -n kube-system --type=merge -p '{ "spec": { "trafficDistribution": "PreferClose" } }'
  4. Sie können überprüfen, ob Service Traffic Distribution aktiviert ist, indem Sie sich die Endpunkt-Slices für den kube-dns Service ansehen. Ihre Endpunkt-Slices müssen die Zonenbeschriftungen hints für Ihre Topologie aufweisen, wodurch bestätigt wird, dass Service Traffic Distribution aktiviert ist. Wenn Sie die nicht hints für jede Endpunktadresse sehen, ist Service Traffic Distribution nicht aktiviert.

    kubectl get endpointslice -A | grep "kube-dns"
    kubectl get endpointslice [.replaceable]`kube-dns-<id>` -n kube-system -o yaml
    addressType: IPv4 apiVersion: discovery.k8s.io/v1 endpoints: - addresses: - <your-hybrid-node-pod-ip> hints: forZones: - name: onprem nodeName: <your-hybrid-node-name> zone: onprem - addresses: - <your-cloud-node-pod-ip> hints: forZones: - name: us-west-2a nodeName: <your-cloud-node-name> zone: us-west-2a

Konfigurieren Sie Webhooks für Add-Ons

Die folgenden Add-Ons verwenden Webhooks und werden für die Verwendung mit Hybridknoten unterstützt.

  • AWS Load Balancer Balancer-Controller

  • CloudWatch Agent für Beobachtbarkeit

  • AWS Distribution für OpenTelemetry (ADOT)

  • cert-manager

In den folgenden Abschnitten finden Sie Informationen zur Konfiguration der Webhooks, die von diesen Add-Ons für die Ausführung auf Knoten in der Cloud verwendet werden. AWS

AWS Load Balancer Balancer-Controller

Um den Load AWS Balancer Controller in einem Cluster-Setup im gemischten Modus zu verwenden, müssen Sie den Controller auf Knoten in der AWS Cloud ausführen. Fügen Sie dazu Ihrer Helm-Wertekonfiguration Folgendes hinzu oder geben Sie die Werte mithilfe der EKS-Add-On-Konfiguration an.

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

CloudWatch Observability-Agent

Das CloudWatch Observability Agent-Add-on verfügt über einen Kubernetes-Operator, der Webhooks verwendet. Um den Operator auf Knoten in der AWS Cloud in einem Cluster-Setup im gemischten Modus auszuführen, bearbeiten Sie die CloudWatch Observability Agent-Operatorkonfiguration. Sie können die Operatoraffinität während der Installation mit Helm- und EKS-Add-Ons nicht konfigurieren (siehe containers-roadmap issue #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 Distribution für (ADOT) OpenTelemetry

Das Add-on AWS Distro for OpenTelemetry (ADOT) verfügt über einen Kubernetes-Operator, der Webhooks verwendet. Um den Operator auf Knoten in der AWS Cloud in einem Cluster-Setup im gemischten Modus auszuführen, fügen Sie Ihrer Helm-Wertekonfiguration Folgendes hinzu oder geben Sie die Werte mithilfe der EKS-Add-On-Konfiguration an.

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

Wenn Ihr Pod-CIDR in Ihrem lokalen Netzwerk nicht routbar ist, muss der ADOT-Collector auf Hybridknoten ausgeführt werden, um die Metriken von Ihren Hybridknoten und den darauf laufenden Workloads zu extrahieren. Bearbeiten Sie dazu die benutzerdefinierte Ressourcendefinition (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

Sie können den ADOT-Collector so konfigurieren, dass er nur Metriken von Hybridknoten und Ressourcen, die auf Hybridknoten ausgeführt werden, scannt, indem Sie scrape_configs in der ADOT Collector-CRD-Konfiguration jeweils Folgendes relabel_configs hinzufügen.

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

cert-managerFür die Installation des ADOT-Add-Ons müssen die TLS-Zertifikate, die vom ADOT-Operator Webhook verwendet werden, installiert werden. cert-managerführt auch Webhooks aus und Sie können es so konfigurieren, dass es auf Knoten in der AWS Cloud mit der folgenden Konfiguration für Helm-Werte ausgeführt wird.

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

cert-manager

Das cert-manager Add-on führt Webhooks aus und Sie können es so konfigurieren, dass es auf Knoten in der AWS Cloud mit der folgenden Helm-Wertekonfiguration ausgeführt wird.

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