

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
<a name="ipvs"></a>

EKS im IP Virtual Server (IPVS) -Modus behebt das [Problem der Netzwerklatenz, das häufig auftritt](https://docs.aws.amazon.com/eks/latest/best-practices/control-plane.html#reliability_cprunning_large_clusters), 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](https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables). Um dieses Problem zu umgehen, können Sie Ihren Cluster so konfigurieren, dass er im IPVS-Modus ausgeführt wird`kube-proxy`.

## -Übersicht
<a name="_overview"></a>

IPVS, seit [Kubernetes Version 1.11](https://kubernetes.io/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/) 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](https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-ipvs). 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
<a name="_implementation"></a>

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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) 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 ist`iptables`, 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
<a name="_validation"></a>

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`