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.
Windows-Netzwerke
Überblick über Windows-Containernetzwerke
Windows-Container unterscheiden sich grundlegend von Linux-Containern. Linux-Container verwenden Linux-Konstrukte wie Namespaces, das Union-Dateisystem und Cgroups. Unter Windows werden diese Konstrukte aus dem Container des Host Compute Service (
Aus Netzwerksicht sorgen HCS und HNS dafür, dass Windows-Container wie virtuelle Maschinen funktionieren. Beispielsweise hat jeder Container einen virtuellen Netzwerkadapter (vNIC), der mit einem Hyper-V virtuellen Switch (vSwitch) verbunden ist, wie in der Abbildung oben dargestellt.
IP-Adressverwaltung
Ein Knoten in Amazon EKS verwendet sein Elastic Network Interface (ENI), um eine Verbindung zu einem AWS-VPC-Netzwerk herzustellen. Derzeit wird nur eine einzige ENI pro Windows-Worker-Knoten unterstützt. Die IP-Adressverwaltung für Windows-Knoten wird vom VPC Resource Controller
Die Anzahl der Pods, die ein Windows-Worker-Knoten unterstützen kann, hängt von der Größe des Knotens und der Anzahl der verfügbaren IPv4-Adressen ab. Sie können die auf dem Knoten verfügbare IPv4-Adresse wie folgt berechnen:
-
Standardmäßig werden der ENI nur sekundäre IPv4-Adressen zugewiesen. In einem solchen Fall:
Total IPv4 addresses available for Pods = Number of supported IPv4 addresses in the primary interface - 1
Wir ziehen eine von der Gesamtzahl ab, da eine IPv4-Adresse als primäre Adresse der ENI verwendet wird und daher den Pods nicht zugewiesen werden kann.
-
Wenn der Cluster für eine hohe Pod-Dichte konfiguriert wurde, indem die Funktion zur Präfix-Delegierung aktiviert wurde, dann-
Total IPv4 addresses available for Pods = (Number of supported IPv4 addresses in the primary interface - 1) * 16
Anstatt sekundäre IPv4-Adressen zuzuweisen, weist VPC Resource Controller hier zu, sodass die Gesamtzahl der verfügbaren IPv4-Adressen um das 16-fache erhöht wird.
/28 prefixes
Mit der obigen Formel können wir die maximale Anzahl an Pods für einen Windows-Worker berechnen, der auf der Grundlage einer m5.large-Instanz wie folgt geknotet wird:
-
Standardmäßig, wenn es im sekundären IP-Modus ausgeführt wird
10 secondary IPv4 addresses per ENI - 1 = 9 available IPv4 addresses
-
Bei Verwendung von
prefix delegation-(10 secondary IPv4 addresses per ENI - 1) * 16 = 144 available IPv4 addresses
Weitere Informationen darüber, wie viele IP-Adressen ein Instance-Typ unterstützen kann, finden Sie unter IP-Adressen pro Netzwerkschnittstelle pro Instance-Typ.
Ein weiterer wichtiger Aspekt ist der Fluss des Netzwerkverkehrs. Bei Windows besteht das Risiko, dass die Ports auf Knoten mit mehr als 100 Diensten ausgelastet werden. Wenn dieser Zustand eintritt, geben die Knoten Fehler mit der folgenden Meldung aus:
„Fehler bei der Erstellung der Richtlinie: HCN CreateLoadBalancer ist in Win32 fehlgeschlagen: Der angegebene Port ist bereits vorhanden.“
Um dieses Problem zu lösen, nutzen wir Direct Server Return (DSR). DSR ist eine Implementierung der asymmetrischen Netzwerklastverteilung. Mit anderen Worten, der Anfrage- und Antwortverkehr verwendet unterschiedliche Netzwerkpfade. Diese Funktion beschleunigt die Kommunikation zwischen Pods und verringert das Risiko einer Überlastung der Ports. Wir empfehlen daher, DSR auf Windows-Knoten zu aktivieren.
DSR ist in Windows Server SAC EKS Optimized AMIs standardmäßig aktiviert. Für LTSC EKS-optimierte AMIs für Windows Server 2019 müssen Sie es während der Instanzbereitstellung mithilfe des folgenden Skripts und mithilfe von Windows Server 2019 Full oder Core als AMIFamily in der NodeGroup aktivieren. eksctl Weitere Informationen finden Sie unter eksctl custom AMI
nodeGroups: - name: windows-ng instanceType: c5.xlarge minSize: 1 volumeSize: 50 amiFamily: WindowsServer2019CoreContainer ssh: allow: false
Um DSR in Windows Server 2019 und höher verwenden zu können, müssen Sie beim Start der Instanz die folgenden Kube-Proxy-Flags
<powershell> [string]$EKSBinDir = "$env:ProgramFiles\Amazon\EKS" [string]$EKSBootstrapScriptName = 'Start-EKSBootstrap.ps1' [string]$EKSBootstrapScriptFile = "$EKSBinDir\$EKSBootstrapScriptName" (Get-Content $EKSBootstrapScriptFile).replace('"--proxy-mode=kernelspace",', '"--proxy-mode=kernelspace", "--feature-gates WinDSR=true", "--enable-dsr",') | Set-Content $EKSBootstrapScriptFile & $EKSBootstrapScriptFile -EKSClusterName "eks-windows" -APIServerEndpoint "https://<REPLACE-EKS-CLUSTER-CONFIG-API-SERVER>" -Base64ClusterCA "<REPLACE-EKSCLUSTER-CONFIG-DETAILS-CA>" -DNSClusterIP "172.20.0.10" -KubeletExtraArgs "--node-labels=alpha.eksctl.io/cluster-name=eks-windows,alpha.eksctl.io/nodegroup-name=windows-ng-ltsc2019 --register-with-taints=" 3>&1 4>&1 5>&1 6>&1 </powershell>
Die DSR-Aktivierung kann anhand der Anweisungen im Microsoft Networking-Blog
Wenn es für Ihr Subnetz entscheidend ist, Ihre verfügbaren IPv4-Adressen beizubehalten und Verschwendung zu minimieren, wird generell empfohlen, den Präfix-Delegierungsmodus nicht zu verwenden, wie unter Präfixmodus für Windows — Wann zu vermeiden beschrieben. Wenn die Verwendung der Präfix-Delegierung weiterhin gewünscht wird, können Sie Maßnahmen ergreifen, um die IPv4-Adressnutzung in Ihrem Subnetz zu optimieren. Ausführliche Anweisungen zur Feinabstimmung des IPv4-Adressanforderungs- und Zuteilungsprozesses finden Sie unter Konfiguration der Parameter für die Präfixdelegierung. Durch die Anpassung dieser Konfigurationen können Sie ein Gleichgewicht zwischen der Beibehaltung von IPv4-Adressen und den Vorteilen der Präfix-Delegierung in Bezug auf die Pod-Dichte finden.
Wenn Sie die Standardeinstellung für die Zuweisung sekundärer IPv4-Adressen verwenden, gibt es derzeit keine unterstützten Konfigurationen, um zu manipulieren, wie der VPC Resource Controller IPv4-Adressen anfordert und zuweist. Genauer gesagt werden sie nur für den minimum-ip-target warm-ip-target Präfix-Delegierungsmodus unterstützt. Beachten Sie auch, dass der VPC Resource Controller im sekundären IP-Modus, abhängig von den verfügbaren IP-Adressen auf der Schnittstelle, in Ihrem Namen normalerweise 3 ungenutzte IPv4-Adressen auf dem Knoten zuweist, um warme IPs für schnellere Pod-Startzeiten aufrechtzuerhalten. Wenn Sie die IP-Verschwendung ungenutzter warmer IP-Adressen minimieren möchten, könnten Sie versuchen, mehr Pods auf einem bestimmten Windows-Knoten einzuplanen, sodass Sie so viel IP-Adresskapazität des ENI wie möglich nutzen. Genauer gesagt könnten Sie verhindern, dass warme, ungenutzte IP-Adressen verwendet werden, wenn alle IP-Adressen auf dem ENI bereits vom Knoten und den laufenden Pods verwendet werden. Eine weitere Problemumgehung, mit der Sie Einschränkungen bei der Verfügbarkeit von IP-Adressen in Ihren Subnetzen beheben können, könnte darin bestehen, die Größe Ihres Subnetzes zu erhöhen oder Ihre Windows-Knoten in eigene dedizierte Subnetze aufzuteilen.
Darüber hinaus ist es wichtig zu beachten, dass IPv6 derzeit auf Windows-Knoten nicht unterstützt wird.
Optionen für Container Network Interface (CNI)
Das AWSVPC CNI ist de facto das CNI-Plugin für Windows- und Linux-Worker-Knoten. Das AWSVPC CNI erfüllt zwar die Bedürfnisse vieler Kunden, dennoch kann es vorkommen, dass Sie Alternativen wie ein Overlay-Netzwerk in Betracht ziehen müssen, um eine IP-Erschöpfung zu vermeiden. In diesen Fällen kann das Calico CNI anstelle des AWSVPC CNI verwendet werden. Project Calico
Netzwerkrichtlinien
Es wird als bewährte Methode angesehen, vom Standardmodus der offenen Kommunikation zwischen Pods auf Ihrem Kubernetes-Cluster zur Zugriffsbeschränkung auf der Grundlage von Netzwerkrichtlinien zu wechseln. Das Open-Source-Projekt Calico
Anweisungen zur Installation von Calico in EKS finden Sie auf der Seite Calico auf Amazon EKS installieren.
Darüber hinaus gelten die Hinweise im Amazon EKS Best Practices Guide for Security — Network Section auch für EKS-Cluster mit Windows-Worker-Knoten, allerdings werden einige Funktionen wie „Sicherheitsgruppen für Pods“ derzeit nicht von Windows unterstützt.