Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Kube-Proxy im IPVS-Modus ausführen

Fokusmodus
Kube-Proxy im IPVS-Modus ausführen - Amazon EKS

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.

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.

EKS im IP Virtual Server (IPVS) -Modus behebt das Problem der Netzwerklatenz, das häufig auftritt, wenn große Cluster mit über 1.000 Diensten ausgeführt werden, wobei Kube-Proxy im Legacy-Iptables-Modus ausgeführt wird. Dieses Leistungsproblem ist das Ergebnis der sequentiellen Verarbeitung der iptables-Paketfilterregeln für jedes Paket. Dieses Latenzproblem wurde in nftables, dem Nachfolger von iptables, behoben. Zum Zeitpunkt der Erstellung dieses Artikels befindet sich Kube-Proxy jedoch noch in der Entwicklung, um Nftables zu nutzen. Um dieses Problem zu umgehen, können Sie Ihren Cluster so konfigurieren, dass er im IPVS-Modus ausgeführt wirdkube-proxy.

Übersicht

IPVS, seit Kubernetes Version 1.11 allgemein verfügbar, verwendet Hashtabellen statt linearer Suche, um Pakete zu verarbeiten, was Clustern mit Tausenden von Knoten und Diensten Effizienz bietet. IPVS wurde für den Lastenausgleich entwickelt und ist damit eine geeignete Lösung für Leistungsprobleme bei Kubernetes-Netzwerken.

IPVS bietet mehrere Optionen für die Verteilung des Datenverkehrs auf Backend-Pods. Detaillierte Informationen zu den einzelnen Optionen finden Sie in der offiziellen Kubernetes-Dokumentation. Eine einfache Liste finden Sie unten. Round Robin und Least Connections gehören zu den beliebtesten Optionen für IPVS-Lastenausgleichsoptionen in Kubernetes.

- rr (Round Robin)
- wrr (Weighted Round Robin)
- lc (Least Connections)
- wlc (Weighted Least Connections)
- lblc (Locality Based Least Connections)
- lblcr (Locality Based Least Connections with Replication)
- sh (Source Hashing)
- dh (Destination Hashing)
- sed (Shortest Expected Delay)
- nq (Never Queue)

Implementierung

Es sind nur wenige Schritte erforderlich, um IPVS in Ihrem EKS-Cluster zu aktivieren. Als Erstes müssen Sie sicherstellen, dass auf Ihren EKS-Worker-Knoten-Images das Linux Virtual ipvsadm Server-Verwaltungspaket installiert ist. Um dieses Paket auf einem Fedora-basierten Image wie Amazon Linux 2023 zu installieren, können Sie den folgenden Befehl auf der Worker-Node-Instance ausführen.

sudo dnf install -y ipvsadm

Auf einem Debian-basierten Image wie Ubuntu würde der Installationsbefehl so aussehen.

sudo apt-get install ipvsadm

Als Nächstes müssen Sie die Kernelmodule für die oben aufgeführten IPVS-Konfigurationsoptionen laden. Wir empfehlen, diese Module in eine Datei innerhalb des /etc/modules-load.d/ Verzeichnisses zu schreiben, damit sie einen Neustart überstehen.

sudo sh -c 'cat << EOF > /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc ip_vs_wlc ip_vs_lblc ip_vs_lblcr ip_vs_sh ip_vs_dh ip_vs_sed ip_vs_nq nf_conntrack EOF'

Sie können den folgenden Befehl ausführen, um diese Module auf einen Computer zu laden, der bereits läuft.

sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_lc sudo modprobe ip_vs_wlc sudo modprobe ip_vs_lblc sudo modprobe ip_vs_lblcr sudo modprobe ip_vs_sh sudo modprobe ip_vs_dh sudo modprobe ip_vs_sed sudo modprobe ip_vs_nq sudo modprobe nf_conntrack
Anmerkung

Es wird dringend empfohlen, diese Worker-Node-Schritte als Teil des Bootstrapping-Prozesses Ihres Worker-Knotens per Benutzerdatenskript oder in beliebigen Build-Skripten auszuführen, die zum Erstellen eines benutzerdefinierten Worker-Knoten-AMI ausgeführt werden.

Als Nächstes konfigurieren Sie Ihre Cluster so, dass sie im kube-proxy DaemonSet IPVS-Modus ausgeführt werden. Dazu setzen Sie kube-proxy mode auf eine der oben aufgeführten Lastenausgleichsoptionen auf ipvs und auf, zum Beispiel: rr für Round Robin. ipvs scheduler

Warnung

Dabei handelt es sich um eine störende Änderung, die außerhalb der Geschäftszeiten durchgeführt werden sollte. Wir empfehlen, diese Änderungen bei der ersten Erstellung des EKS-Clusters vorzunehmen, um die Auswirkungen zu minimieren.

Sie können einen AWS-CLI-Befehl ausgeben, um IPVS zu aktivieren, indem Sie das kube-proxy EKS-Add-on aktualisieren.

aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE

Oder Sie können dies tun, indem Sie die kube-proxy-config ConfigMap in Ihrem Cluster ändern.

kubectl -n kube-system edit cm kube-proxy-config

Suchen Sie die scheduler Einstellung unter ipvs und legen Sie den Wert auf eine der oben aufgeführten IPVS-Lastenausgleichsoptionen fest, zum Beispiel: rr für Round Robin. Suchen Sie die mode Einstellung, die standardmäßig istiptables, und ändern Sie den Wert auf. ipvs Das Ergebnis einer der beiden Optionen sollte der folgenden Konfiguration ähneln.

iptables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 0s syncPeriod: 30s ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "rr" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 mode: "ipvs" nodePortAddresses: null oomScoreAdj: -998 portRange: "" udpIdleTimeout: 250ms

Wenn Ihre Worker-Knoten Ihrem Cluster hinzugefügt wurden, bevor Sie diese Änderungen vorgenommen haben, müssen Sie den DaemonSet Kube-Proxy neu starten.

kubectl -n kube-system rollout restart ds kube-proxy

Validierung

Sie können überprüfen, ob Ihr Cluster und Ihre Worker-Knoten im IPVS-Modus ausgeführt werden, indem Sie den folgenden Befehl auf einem Ihrer Worker-Knoten ausführen.

sudo ipvsadm -L

Sie sollten mindestens ein Ergebnis wie das unten stehende sehen, das Einträge für den Kubernetes API Server-Dienst unter 10.100.0.1 und den CoreDNS-Dienst unter enthält. 10.100.0.10

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ip-10-100-0-1.us-east-1. rr -> ip-192-168-113-81.us-eas Masq 1 0 0 -> ip-192-168-162-166.us-ea Masq 1 1 0 TCP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0 UDP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0
Anmerkung

Diese Beispielausgabe stammt aus einem EKS-Cluster mit einem Service-IP-Adressbereich von. 10.100.0.0/16

Auf dieser Seite

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.