Wie wähle ich bestimmte IP-Adress-Subnetze für Pods in meinem Amazon-EKS-Cluster aus?
Ich möchte benutzerdefinierte Subnetze oder IP-Adressbereiche für meine Pods in Amazon Elastic Kubernetes Service (Amazon EKS) verwenden.
Lösung
Verwende benutzerdefinierte Netzwerke, um Pod-IP-Adressen aus anderen Subnetzen als den Subnetzen deiner Worker-Knoten zuzuweisen.
Benutzerdefinierte Netzwerke aktivieren
Bevor du benutzerdefinierte Netzwerke konfigurierst, überprüfe das folgende Standardverhalten:
- Knoten und Pods verwenden IP-Adressen aus denselben CIDR-Bereichen in deinem Amazon Virtual Private Cloud (VPC)-Cluster. Informationen zum Hinzufügen weiterer IP-Adress-CIDR-Bereiche zur Amazon VPC findest du unter Wie verwende ich mehrere CIDR-Bereiche bei Amazon EKS?
- Amazon EKS weist Pod-IP-Adressen aus dem Subnetz des Worker-Knotens zu.
- Du kannst nicht steuern, welches Subnetz den Pods IP-Adressen zuweist.
- Wenn im Subnetz eines Knotens keine IP-Adressen verfügbar sind, können neue Pods nicht gestartet werden, selbst wenn andere Subnetze verfügbare Adressen haben.
- Der gesamte Datenverkehr von Pods zu IP-Adressen außerhalb der Amazon VPC für den Amazon-EKS-Cluster-CIDR-Block verwendet die Hauptschnittstelle und die IP-Adresse des Knotens. Der Datenverkehr verwendet Sicherheitsgruppen und ein Subnetz von der primären Elastic-Network-Schnittstelle des Knotens. Er verwendet nicht das Subnetz und die Sicherheitsgruppen, die du in den ENIConfig-Objekten definiert hast.
- Wenn du Sicherheitsgruppen für Pods verwendest, verwenden die Pods die Sicherheitsgruppe, die du in der SecurityGroupPolicy angegeben hast. Die Pods verwenden nicht die Sicherheitsgruppe, die du in den ENIConfig-Objekten angegeben hast.
Hinweis: Weitere Informationen zum Pod-Datenverkehr-Routing findest du unter Ausgehenden Internetzugang für Pods aktivieren.
Aktiviere benutzerdefinierte Netzwerke im Amazon VPC Container Network Interface (Amazon VPC CNI)-Plug-in für Kubernetes. Verwende die Amazon-VPC-CNI-Plug-in-Version, die deiner Kubernetes-Version entspricht. Um auf das Plug-in zuzugreifen, findest du weitere Informationen unter amazon-vpc-cni-k8s auf der GitHub-Website.
Führe den folgenden Befehl aus, um die Version in der Amazon VPC für den Amazon-EKS-Cluster zu überprüfen:
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
Wenn du nicht über die richtige Plug-in-Version verfügst, aktualisiere die Amazon VPC CNI.
Führe den folgenden Befehl aus, um das benutzerdefinierte Netzwerk zu aktivieren:
kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
VPC CNI v1.18 und spätere Versionen unterstützen die automatische Subnetzerkennung und dynamische Adresszuweisung auf der Grundlage der IP-Adressnutzung in verfügbaren Subnetzen. Weitere Informationen findest du unter Amazon VPC CNI führt eine erweiterte Subnetzerkennung ein.
Mit dem Amazon-VPC-CNI-Plug-in kannst du außerdem Folgendes tun:
- Gib die für deine Pods zu verwendenden Amazon-VPC-Subnetze an.
- Definiere separate Sicherheitsgruppen für deine Pods.
ENIConfig-Objekte erstellen
Bevor du die ENIConfig-Objekte erstellst, überprüfe das folgende Standardverhalten:
- Jedes ENIConfig-Objekt definiert ein Subnetz und eine Liste von Sicherheitsgruppen.
- Du kannst jedem Knoten nur ein ENIConfig-Objekt zuweisen. Du kannst jedoch dasselbe ENIConfig-Objekt mehreren Knoten zuweisen.
- Wenn du einem Knoten ein ENIConfig-Objekt zuweist, verwenden die für den Knoten geplanten Pods das Subnetz und die Sicherheitsgruppen im ENIConfig-Objekt.
- Der Name deines ENIConfig-Objekts muss der Name deiner Availability Zone sein.
Führe den folgenden Befehl aus, um die ENIConfig-Objekte zu erstellen:
cat EOF | kubectl apply -f - apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: example-availability-zone spec: securityGroups: - example-security-group-id subnet: example-subnet-id EOF
Hinweis: Ersetze example-availability-zone durch deine Availability Zone. Ersetze example-security-group-id durch die ID deiner Sicherheitsgruppe. Ersetze example-subnet-id durch die ID deines Subnetzes.
ENIConfig-Objekte zuweisen
Um ein ENIConfig-Objekt einer Availability Zone zuzuweisen, weise deinen Knoten automatisch ENIConfig-Objekte zu. Um mehrere ENIConfig-Objekte derselben Availability Zone zuzuweisen, weise den Knoten manuell ENIConfig-Objekte zu.
ENIConfig-Objekte automatisch zuweisen
Führe den folgenden Befehl aus:
kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
ENIConfig-Objekte manuell zuweisen
Wichtig: Stelle sicher, dass sich der Knoten und das Subnetz im zugehörigen ENIConfig-Objekt in derselben Availability Zone befinden.
Führe den folgenden Befehl aus:
kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone
Hinweis: Ersetze example-node-name durch die vollständige Kennung deines Knotens. Ersetze example-availability-zone durch den Namen der Availability Zone, die du bei der Erstellung des ENIConfig-Objekts verwendet hast.
Neue Knoten starten
Um sekundäre Netzwerkschnittstellen und IP-Adressen aus den ENIConfig-Subnetzen zuzuweisen, musst du neue Knoten starten. Bestehende Knoten verwenden weiterhin ihre ursprüngliche Netzwerkkonfiguration, bis du sie ersetzt.
Führe die folgenden Schritte aus:
- Prüfe, ob du eine benutzerdefinierte Amazon Machine Image (AMI)-ID für deine selbstverwaltete Knotengruppe verwendest.
- Wenn du eine benutzerdefinierte AMI-ID verwendest, lege die maximale Anzahl an Pods für jeden Knotenwert fest. Du musst den Parameter --cni-custom-networking-enabled hinzufügen, wenn du das Skript max-pods-calculator.sh ausführst.
Hinweis: Wenn du keine Startvorlage oder AMI-ID verwendest, legt Amazon EKS automatisch die maximale Anzahl von Pods fest. - Aktualisiere das Benutzerdatenskript auf den neuen Knoten, um die maximale Anzahl von Pods basierend auf deinem Betriebssystem zu verwenden:
Amazon Linux 2, Bottlerocket, Ubuntu 20.04 und höher, Windows Server 2019 und höher#!/bin/bash /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
Hinweis: Ersetze in den vorherigen Befehlen example-cluster-name durch den Namen deines EKS-Clusters. Ersetze example-max-pods durch den maximalen Wert der Pods pro Knoten.--user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
Weitere Informationen zu bootstrap findest du unter awslabs/amazon-eks-ami auf der GitHub-Website. Informationen zu nodeadm findest du unter Upgrade von Amazon Linux 2 auf Amazon Linux 2023.
Amazon Linux 2023 (AL2023) - Erstelle die Pods neu, um die neue benutzerdefinierte Netzwerkkonfiguration zu verwenden.
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 7 Monaten
AWS OFFICIALAktualisiert vor 8 Monaten