AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Wie behebe ich Probleme mit dem Amazon VPC CNI-Add-on für Amazon EKS?
Ich möchte das Add-on für die Amazon Virtual Private Cloud (Amazon VPC) Container Network Interface (CNI) auf meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Clustern verwenden. Ich erhalte jedoch Fehler.
Behebung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Wenn der Worker-Knoten nicht bereit ist, weil das Amazon VPC CNI-Add-on nicht initialisiert wurde, erhältst du eine Fehlermeldung, die dem folgenden Beispiel ähnelt:
„container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized“
Führe den folgenden Befehl aus, um nach diesem Problem zu suchen:
kubectl describe node node_name
Hinweis: Ersetze node_name durch den Namen des Knotens. In der Ausgabe kannst du die Fehlermeldung cni plugin no initialized finden.
Gehe wie folgt vor, um dieses Problem zu beheben.
Prüfen, ob du das Amazon VPC CNI-Add-on installiert hast
Wenn die aws-node-Pods im Cluster fehlen, erhältst du in den Containerd-Protokollen eine Fehlermeldung, die dem folgenden Beispiel ähnelt:
„cni config load failed: no network config found in /etc/cni/net.d: cni plugin not initialized: failed to load cni config“
Um dieses Problem zu beheben, installiere das Amazon VCP CNI-Add-on.
Auf Probleme mit IAM-Berechtigungen prüfen
Um das Amazon VPC CNI-Add-on zu verwenden, verwende die verwaltete AmazonEKS_CNI_Policy AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Richtlinie. Oder, wenn du eine benutzerdefinierte Richtlinie verwendest, stelle sicher, dass sie die folgenden Berechtigungen enthält:
"ec2:AssignPrivateIpAddresses", "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:UnassignPrivateIpAddresses" "ec2:CreateTags"
Um fehlende IAM-Berechtigungen zu ermitteln, überprüfe die L-IPAM-Daemon-Protokolle (IPAMD) im Hostverzeichnis /var/log/aws-routed-eni/ipamd.log. Wenn das Amazon VPC CNI-Add-on keine erforderliche IAM-Berechtigung hat, erhältst du eine Fehlermeldung, die dem folgenden Beispiel ähnelt:
{"level":"error","ts":"2023-11-18T01:08:34.083Z","caller":"aws-k8s-agent/main.go:28","msg":"Initialization failure: ipamd init: failed to retrieve attached ENIs info: UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:sts::XXXXXXXXXXXXXXXXXXXX:assumed-role/rolename is not authorized to perform: ec2:DescribeNetworkInterfaces because no identity-based policy allows the ec2:DescribeNetworkInterfaces action\n\tstatus code: 403, request id: request id"}
Die vorstehende Beispielfehlermeldung zeigt, dass das Add-on die ec2:DescribeNetworkInterfaces-Berechtigung benötigt.
Wenn du keinen direkten Zugriff auf den Worker-Knoten hast, überprüfe die aws-node-Pods auf dem Worker-Knoten. Führe den folgenden Befehl aus, um den aws-node-Pod auf dem Worker-Knoten zu identifizieren:
kubectl describe node node_name
Hinweis: Ersetze node_name durch den Namen des Knotens. Suche im Abschnitt Non-terminated Pods (Nicht beendete Pods) der Ausgabe nach dem Pod-Namen aws-node.
Führe dann den folgenden Befehl aus, um Details zum aws-node-Pod anzuzeigen:
kubectl describe pod pod-name -n kube-system
Hinweis: Ersetze pod-name durch den Pod-Namen aws-node.
Klicke in der Ausgabe auf Event (Ereignis), um Informationen zu fehlenden Berechtigungen zu erhalten.
Beispielausgabe:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning MissingIAMPermissions 105s (x2 over 105s) aws-node Unauthorized operation: failed to call ec2:DescribeNetworkInterfaces due to missing permissions. Please refer https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/iam-policy.md to attach relevant policy to IAM role in the event section you can able to see the error message also you can check the AWS cloud trail event for the particular instance by filtering the cloudtrail with username and provide the instanceID there.
Oder verwende AWS CloudTrail, um nach bestimmten Ereignissen zu suchen. Überprüfe beispielsweise den Benutzernamen und die Instance-ID für den API-Aufruf DescribeNetworkInterfaces, um festzustellen, ob er ausgeführt wurde.
Auf Netzwerkprobleme prüfen
Das Amazon VPC CNI-Add-on muss den API-Serverendpunkt und den Amazon Elastic Compute Cloud (Amazon EC2)-Endpunkt erreichen, wenn es ausgeführt wird. Wenn eine der Verbindungen fehlschlägt, kann das Add-on nicht initialisiert werden und die Knoten wechseln in den Status NotReady.
Um die spezifische Fehlermeldung zu überprüfen, prüfe die IPAMD-Protokolle im Hostverzeichnis /var/log/aws-routed-eni/ipamd.log. Stelle sicher, dass die Pods kube-proxy und coreDNS fehlerfrei ausgeführt werden können.
Überprüfen der Versionen der Add-on-Komponenten
Es hat sich bewährt, die Kernkomponenten auf die neueste Version zu aktualisieren. Wenn die Add-on-Version nicht mit der Kubernetes-Cluster-Version übereinstimmt, kann das Add-on nicht initialisiert werden. Stelle sicher, dass die Add-on-Version mit der Kubernetes-Cluster-Version kompatibel ist.
Behebung von Amazon VPC CNI-Add-On-Fehlern
Um Add-On-Fehler zu identifizieren, verwende SSH, um eine Verbindung zum Worker-Knoten herzustellen, dem das Add-on die IP-Adresse nicht zuweisen kann. Überprüfe dann die IPAMD-Protokolle in der Datei /var/log/aws-routed-eni/ipamd.log auf Fehlermeldungen.
Fehler „Failed to assign ip“
Der Fehler Failed to assign ip tritt auf, wenn das Amazon VPC CNI-Add-on den Pods, die für die Worker-Knoten geplant sind, keine IP-Adressen zuweisen kann. Um den Fehler zu identifizieren, kannst du auch auf der CloudTrail-Event-Verlaufsseite nach dem Ereignis AssignPrivateIpAddresses suchen.
Um festzustellen, ob das zugewiesene Subnetz keine verfügbaren IP-Adressen hat, führe den folgenden AWS-CLI-Befehl describe-subnets aus:
aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'
Hinweis: Ersetze VPCID durch deine VPC-ID.
Der Fehler Failed to assign ip kann auch auftreten, wenn du die Werte der Umgebungsvariablen WARM_ENI_TARGET, WARM_IP_TARGET oder MINIMUM_IP_TARGET zu niedrig setzt. Stelle sicher, dass der Subnetz-CIDR-Bereich weit genug ist und über genügend IP-Adresszuweisungen für deinen Anwendungsfall verfügt. Weitere Informationen findest du unter WARM_ENI_TARGET, WARM_IP_TARGET and MINIMUM_IP_TARGET auf der GitHub-Website.
Um die Werte der Umgebungsvariablen zu überprüfen, führe den folgenden Befehl aus, um Pod-Details anzuzeigen:
kubectl describe pod pod-name -n kube-system
Hinweis: Ersetze pod-name durch den Pod-Namen aws-node.
Du kannst die Umgebungsvariablen im DaemonSet aws-node aktualisieren:
env: - name: WARM_ENI_TARGET value: "1" - name: WARM_IP_TARGET value: "5" - name: MINIMUM_IP_TARGET value: "25"
Oder führe den folgenden Befehl aus, um die Umgebungsvariablen zu aktualisieren:
kubectl set env ds aws-node -n kube-system WARM_ENI_TARGET=1 WARM_IP_TARGET=5 MINIMUM_IP_TARGET=25
Wenn du den Präfix-Delegierungsmodus verwendest und keinen dedizierten Pod-Subnetzbereich verwendest, kann die Subnetzfragmentierung dazu führen, dass das Add-on fehlschlägt. Das Add-on muss der Netzwerkschnittstelle einen kontinuierlichen Profilbereich /28 für IPv4 und /80 für IPv6 zuweisen. Weitere Informationen zur Präfix-Delegierung findest du unter ENABLE_PREFIX_DELEGATION auf der GitHub-Website.
Du kannst nicht direkt nach Subnetzfragmentierung suchen. Prüfe stattdessen, ob du noch mehr als 16 verfügbare IP-Adressen in deinem Subnetz-CIDR-Bereich hast. Wenn du über genügend IP-Adressen verfügst und immer noch häufig die Fehlermeldung Failed to assign ip erhältst, liegt das Problem in der Regel an der Subnetzfragmentierung. Um dieses Problem zu beheben, empfiehlt es sich, benutzerdefinierte Vernetzung mit Präfixdelegierung zu verwenden, um dedizierte Subnetze für die Pods einzurichten. Weitere Informationen findest du unter AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG auf der GitHub-Website.
Fehler Failed to get pod ENI config
Wenn du AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG verwendest, um die benutzerdefinierte Vernetzung zu aktivieren, aber keine ENIConfig-Ressource erstellst, erhältst du eine Fehlermeldung, die dem folgenden Beispiel ähnelt:
„{"level":"error","ts":"","caller":"ipamd/ipamd.go:798","msg":"Failed to get pod ENI config"}“
Führe den folgenden Befehl aus, um zu überprüfen, ob die ENIConfig-Ressource im Cluster vorhanden ist:
kubectl get eniconfig -o yaml
Wenn die benutzerdefinierte ENIConfig-Ressource nicht existiert, erstelle eine. Weitere Informationen zur benutzerdefinierten Vernetzung findest du unter AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG auf der GitHub-Website.
Fehler „Failed to watch“
Wenn du die YAML-Datei nicht im richtigen Format schreibst, erhältst du möglicherweise eine Fehlermeldung, die dem folgenden Beispiel ähnelt:
„Failed to watch *v1alpha1.ENIConfig: failed to list *v1alpha1.ENIConfig:json: cannot unmarshal string into Go struct field ENIConfigSpec.items.spec.securityGroups of type []string“
Dieses Problem tritt in der Regel auf, wenn die JSON-Daten und die Go-Datentypdefinition nicht übereinstimmen. Die vorstehende Beispielfehlermeldung zeigt, dass ein Problem mit dem Feld securityGroups vorliegt.
Um dieses Problem zu beheben, führe den folgenden Befehl aus, um die JSON-Daten zu überprüfen:
kubectl describe ENIConfig
Überprüfe in der Befehlsausgabe die Syntax auf der Grundlage des in der Fehlermeldung angegebenen Problems. Stelle beispielsweise sicher, dass das Feld securityGroups in JSON ein Array von Zeichenfolgen ist, nicht eine einzelne Zeichenfolge.
Beispielausgabe:
cat >$az_1.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: us-west-2a spec: securityGroups: - sg-0123456789abcdef0 subnet: subnet-0123456789abcdef0 EOF
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 6 Monaten
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 4 Jahren
AWS OFFICIALAktualisiert vor einem Jahr