Warum kann ich kubectl nicht verwenden, um eine Verbindung zu meinem EKS-Cluster herzustellen?
Wenn ich mit dem Befehlszeilentool kubectl versuche, eine Verbindung zu meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster herzustellen, erhalte ich eine Fehlermeldung.
Lösung
Wenn du bei der Verwendung von kubectl keine Verbindung zum Amazon EKS-Cluster herstellen kannst, hast du möglicherweise einen Service, eine Berechtigung oder eine Einstellung falsch konfiguriert. Ein Fehler kann auch auftreten, wenn die lokale Umgebung nicht mit dem API-Server des EKS-Clusters kommunizieren kann. Behebe das Problem anhand der Fehlermeldung, die du erhältst.
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. Stellen außerdem sicher, dass du die neueste Version von AWS CLI verwendest.
Voraussetzungen:
-
Führe den folgenden Befehl aus, um zu überprüfen, ob das System eine Verbindung mit dem richtigen Cluster herstellen kann:
kubectl config current-context -
Führe den folgenden AWS-CLI-Befehl get-caller-identity aus, um zu überprüfen, ob der bzw. die aktuell authentifizierte AWS Identity and Access Management (IAM)-Benutzer oder -Rolle korrekt ist:
aws sts get-caller-identityHinweis: Erlaube dem IAM-Prinzipal, basierend auf dem Cluster-Authentifizierungsmodus auf Kubernetes-Objekte im Cluster zuzugreifen.
Fehlermeldung „exec plugin invalid“
Wenn die Authentifizierungs-API-Version in der kubeconfig-Datei nicht mit der Kubernetes-API-Steuerungsebenenversion kompatibel ist, erhälst du die folgende Fehlermeldung:
„exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha"“
Führe den folgenden Befehl update-kubeconfig aus, um die kubeconfig-Datei für den Cluster zu aktualisieren:
aws eks update-kubeconfig --region region-code --name my-cluster
Hinweis: Ersetze region-code durch die AWS-Region, in der sich der Cluster befindet und my-cluster durch den Namen des Clusters.
Die kubectl-Version muss innerhalb eines geringfügigen früheren oder späteren Versionsunterschieds der Amazon EKS-Cluster-Steuerungsebene liegen. Ein Client, der beispielsweise die kubectl-Version 1.29 verwendet, arbeitet mit Kubernetes-Clustern 1.28, 1.29 und 1.30.
Fehlermeldung „couldn't get current server API group list“
Wenn die kubeconfig-Datei nicht existiert oder die Zertifizierungsstelle (CA) nicht enthält, erhältst du die folgende Fehlermeldung:
„couldn't get current server API group list: Get "https://xxxxxxxxxxxxxxxxxxxx..eks.amazonaws.com/api?timeout=32s": tls: failed to verify certificate: x509: certificate signed by unknown authority“
-
Führe den folgenden Befehl aus, um zu überprüfen, ob die Datei kubeconfig am Standardspeicherort (.kube) im Stammverzeichnis vorhanden ist:
cat ~/.kube/config -
Wenn die Datei existiert, stelle sicher, dass sich die Base64-kodierte Cluster-CA in der kubeconfig-Datei befindet. Überprüfe außerdem, ob die Datei certificate-authority-data existiert und ob du sie richtig konfiguriert hast.
-
Wenn die Datei kubeconfig nicht existiert, führe den folgenden Befehl aus, um sie neu zu erstellen:
kubectl get svc --insecure-skip-tls-verify -
Prüfe, ob du einen Proxy oder ein VPN verwendest, die TLS blockieren könnte.
Timeout-Fehlermeldung „could not get current server API group list“
Wenn der Quellhost auf Port 443 nicht mit dem API-Server kommunizieren kann, läuft die Anfrage ab und du erhälst die folgende Fehlermeldung:
„could not get current server API group list: Get "https://xxxxxxxxxxxxxxxxxxxx.gr7.<region-code>.eks.amazonaws.com/api?timeout=32s": dial tcp xx.yy.zz.vvv:443: i/o timeout“
Führe den folgenden Befehl aus, um Telnet auf Port 443 zu verwenden und die API-Serverendpunktkonnektivität vom Gerät aus zu überprüfen:
$ echo exit | telnet
Beispielausgabe:
xxxxxxxxxxxxxxxxxxxx.gr7.us-east-2.eks.amazonaws.com 443Trying 18.224.160.210... Connected to xxxxxxxxxxxxxxxxxxxx.gr7.us-east-2.eks.amazonaws.com. Escape character is '^]'. Connection closed by foreign host.
Wenn der Telnet-Befehl das Problem nicht behebt, gehe wie folgt vor:
- Wenn du den öffentlichen Zugriff auf dem API-Serverendpunkt aktiviert hast, überprüfe, ob du den Zugriff auf den API-Serverendpunkt auf einen bestimmten CIDR-Bereich beschränkt hast. Stelle sicher, dass die IP-Adresse des Geräts zum CIDR-Block gehört. Überprüfe außerdem das Zugriffsverhalten der API-Serverendpunkte.
- Wenn du nur den privaten Zugriff auf dem API-Serverendpunkt aktiviert hast, muss der gesamte Cluster-API-Serverdatenverkehr von der Virtual Private Cloud (VPC) oder einem verbundenen Netzwerk stammen. Außerdem müssen kubectl-Befehle aus der VPC oder einem verbundenen Netzwerk stammen. Weitere Informationen findest du unter Zugriff auf einen ausschließlich privaten API-Server.
- Prüfe, ob die Sicherheitsgruppen oder Netzwerk-Zugriffssteuerungslisten (Netzwerk-ACLs) Anfragen an den Kubernetes-API-Server blockieren. Stelle sicher, dass die Cluster-Sicherheitsgruppe den Datenverkehr auf Port 443 vom CIDR der Quelle zulässt.
Fehlermeldung „couldn't get current API server group list“
Wenn du versuchst, eine Aktion ohne Zugriff auf die Kubernetes-API auf dem Amazon EKS-Cluster auszuführen, wird die folgende Fehlermeldung angezeigt:
„couldn't get current server API group list: the server has asked for the client to provide credentials“
Gehe wie folgt vor, um das Problem zu beheben:
-
Führe den Befehl get-caller-identity aus, um zu überprüfen, wer die Anforderung für den Zugriff auf den EKS-Cluster gestellt hat:
aws sts get-caller-identityBeispielausgabe:
{ "UserId": "user-ID", "Account": "account-ID", "Arn": "arn:aws:iam::account-ID:user/kube-user" }Hinweis: Die vorherige Beispielausgabe enthält die Benutzer-ID, das AWS-Konto und den ARN der IAM-Entität, die die Anfrage gestellt hat.
-
Ändere den Authentifizierungsmodus entweder auf API_AND_CONFIG_MAP oder API und verwende dann EKS-Zugriffseinträge, um IAM-Benutzern Zugriff auf Kubernetes zu gewähren.
-
Um die entsprechenden Berechtigungen zu gewähren, verwende entweder den API- oder den API_AND_CONFIG_MAP-Authentifizierungsmodus, um den Eintrag der IAM-Entität hinzuzufügen.
API-Authentifizierungsmodus
Führe den folgenden create-access-entry aus, um einen Zugriffseintrag zu erstellen, der es dem IAM-Prinzipal ermöglicht, sich beim Amazon EKS-Cluster zu authentifizieren:aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:user/my-user --type STANDARD --username my-userHinweis: Ersetze im vorherigen Befehl den Prinzipal-ARN durch den ARN der IAM-Entität.
Führe den folgenden Befehl associate-access-policy aus, um den Zugriffseintrag einer Zugriffsrichtlinie zuzuordnen:aws eks associate-access-policy --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role \ --access-scope type=cluster --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicyAPI_AND_CONFIG_MAP-Authentifizierungsmodus
Für den API_AND_CONFIG_MAP-Authentifizierungsmodus kannst du entweder den vorherigen API-Authentifizierungsmodus verwenden oder die Configmap bearbeiten.
Führe den folgenden Befehl aus, um aws-auth configmap zu bearbeiten:kubectl edit configmap aws-auth -n kube-systemFüge die IAM-Rolle oder den IAM-Benutzer zum Abschnitt mapRoles oder mapUsers hinzu.
Im Folgenden findest du ein Beispiel für einen mapRoles-Abschnitt mit einem Eintrag für eine IAM-Rolle:mapRoles: | - groups: - system:masters rolearn: arn:aws:iam::111122223333:role/MyEKSrole username: eks-userHinweis: Ersetze den Beispiel-ARN durch den ARN der IAM-Rolle. Wenn du einen IAM-Benutzer verwendest, ersetze MapRoles durch MapUsers und den ARN durch den ARN des IAM-Benutzers.
Im vorherigen Beispiel wird der IAM-Prinzipal der system:masters-Gruppe zugeordnet, die vollen Administratorzugriff auf den Cluster gewährt. Für einen restriktiveren Zugriff ordne den IAM-Prinzipal einem benutzerdefinierten Kubernetes-Benutzer oder einer benutzerdefinierten Kubernetes-Gruppe zu und verwende rollenbasierte Zugriffskontrollobjekte (RBAC) von Kubernetes, um die erforderlichen Berechtigungen zu definieren. Weitere Informationen findest du unter Verwenden der RBAC-Autorisierung auf der Kubernetes-Website.
Fehlermeldung „Did you specify the right host or port?“
Wenn du die Datei kubeconfig nicht korrekt konfiguriert hast, kann kubectl keine Verbindung zum EKS-Cluster herstellen und du erhältst die folgende Fehlermeldung:
„The connection to the server localhost:8080 was refused - did you specify the right host or port?“
Gehe wie folgt vor, um dieses Problem zu beheben:
-
Führe den folgenden Befehl aus, um die Datei kubeconfig zu aktualisieren:
aws eks update-kubeconfig --region region-code --name my-cluster -
Führe den folgenden Befehl aus, um den aktuellen Kontext in der kubeconfig-Datei zu überprüfen:
kubectl config current-context -
Wenn die Ausgabe des Befehls „current-context“ nicht auf den erwarteten EKS-Cluster zeigt, führe den folgenden Befehl aus:
kubectl config use-context ;
Ähnliche Informationen
kubectl mit einem EKS-Cluster verbinden, indem du eine kubeconfig-Datei erstellst
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Monaten