View a markdown version of this page

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.

Kube-Proxy im IPVS-Modus ausführen

Wichtig

Kubernetes v1.35 hat den IPVS-Modus von Kube-Proxy als veraltet eingestuft. Verwenden Sie stattdessen den Nftables-Modus auf der Kubernetes-Website. https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables Der Nftables-Modus ist seit Version 1.33 allgemein verfügbar. Weitere Informationen zur Version v1.35 finden Sie in der Ankündigung zur Veröffentlichung von Kubernetes v1.35.

EKS im IP Virtual Server (IPVS) -Modus löst das Netzwerklatenzproblem, 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. Alternativ können Sie Ihren Cluster so konfigurieren, dass er im IPVS-Modus ausgeführt wirdkube-proxy.

-Übersicht

IPVS, das seit Kubernetes-Version 1.11 allgemein verfügbar ist, verwendet Hash-Tabellen anstelle einer linearen Suche, um Pakete zu verarbeiten, was für Effizienz bei Clustern mit Tausenden von Knoten und Diensten sorgt. IPVS wurde für den Lastausgleich entwickelt und ist daher eine geeignete Lösung für Leistungsprobleme im Kubernetes-Netzwerk.

IPVS bietet mehrere Optionen für die Verteilung des Datenverkehrs auf Backend-Pods. Detaillierte Informationen zu jeder Option finden Sie in der offiziellen Kubernetes-Dokumentation. Eine einfache Liste finden Sie jedoch unten. Round Robin und Least Connections gehören zu den beliebtesten Optionen für IPVS-Loadbalancing-Optionen 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-Administrationspaket 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-Knoten-Schritte als Teil des Bootstrapping-Prozesses Ihres Workerknotens über ein Benutzerdatenskript oder in beliebigen Build-Skripten auszuführen, die ausgeführt werden, um ein benutzerdefiniertes Worker-Knoten-AMI zu erstellen.

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 ipvs und auf eine der ipvs scheduler oben aufgeführten Load-Balancing-Optionen, zum Beispiel: rr für Round Robin.

Warnung

Dies ist eine disruptive Änderung und sollte außerhalb der Geschäftszeiten durchgeführt werden. Wir empfehlen, diese Änderungen bei der ersten Erstellung des EKS-Clusters vorzunehmen, um die Auswirkungen zu minimieren.

Sie können einen AWS-CLI-Befehl ausführen, 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 das 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 setzen Sie den Wert auf eine der oben aufgeführten IPVS-Loadbalancing-Optionen, zum Beispiel: rr für Round Robin. Suchen Sie nach der mode Einstellung, die standardmäßig auf eingestellt istiptables, und ändern Sie den Wert in. 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 vor diesen Änderungen mit Ihrem Cluster verbunden wurden, 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 sehen, das dem folgenden ähnelt und 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 von einem EKS-Cluster mit einem Dienst-IP-Adressbereich von. 10.100.0.0/16