Direkt zum Inhalt

Wie behebe ich Konnektivitätsprobleme mit dem API-Serverendpunkt meines Amazon-EKS-Clusters?

Lesedauer: 4 Minute
0

Ich kann keine kubectl-Befehle ausführen. Außerdem habe ich die Einstellung für den Endpunktzugriff in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster von öffentlich in privat geändert. Jetzt hängt mein Cluster im Status „Fehlgeschlagen“ fest.

Behebung

Hinweis: Informationen zum Einrichten des Zugriffs auf den Kubernetes-API-Serverendpunkt findest du unter Ändern des Cluster-Endpunktzugriffs.

kubectl-Befehlsfehler in einem neuen oder vorhandenen Cluster beheben

Bestätige, dass deine kubeconfig-Datei eine Verbindung zu deinem Cluster herstellt

Führe die folgenden Schritte aus:

  1. Vergewissere dich, dass du die richtige kubeconfig-Datei verwendet hast, um eine Verbindung mit deinem Cluster herzustellen. Weitere Informationen findest du unter Organizing cluster access using kubeconfig files (Organisieren des Cluster-Zugriffs mit kubeconfig-Dateien) (auf der Kubernetes-Website).

  2. Führe den folgenden Befehl aus, um die Cluster-Kontexte in deiner kubeconfig-Datei aufzulisten:

    kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

    Beispielausgabe:

    Cluster name Server "example-cluster-name" https://"example-cluster-endpoint".eks.amazonaws.com
  3. Stelle sicher, dass die Cluster-Namen und Endpunkte in deiner kubeconfig-Datei korrekt sind. Wenn der Name oder Endpunkt eines Clusters falsch ist, führe den folgenden Befehl aus, um den Kontext deines Clusters in der kubeconfig-Datei zu aktualisieren:

    aws eks update-kubeconfig --name example-cluster-name --region example-region

    Hinweis: Ersetze example-cluster-name durch den Namen des Clusters, den du aktualisierst, und example-region durch deine AWS-Region.

  4. Führe auf deinem Gerät den folgenden Telnet-Befehl auf Port 443 aus, um die API-Server-Endpunktkonnektivität zu überprüfen:

    telnet example-server-endpoint 443

    Hinweis: Ersetze example-server-endpoint durch deinen API-Server-Endpunkt.
    In der folgenden Beispielausgabe kann Port 433 eine Verbindung zum Server-Endpunkt D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com herstellen:

    $ echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443  
    Trying 18.224.160.210...  
    Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.  
    Escape character is '^]'.  
    Connection closed by foreign host.

Wenn dein Gerät über Port 433 keine Verbindung zum API-Server-Endpunkt herstellen kann, führe die Lösungsschritte in den folgenden Abschnitten aus.

Überprüfen des DNS-Resolvers

Führe den folgenden Befehl auf demselben Gerät aus, auf dem die kubectl-Befehle fehlgeschlagen sind:

nslookup example-server-endpoint

Hinweis: Ersetze example-server-endpoint durch deinen API-Server-Endpunkt.

Überprüfen, ob der öffentliche Zugriff auf den API-Serverendpunkt eingeschränkt ist

Ergreife je nach deinen Anforderungen eine der folgenden Maßnahmen:

  • Wenn du den Zugriff auf öffentliche API-Server-Endpunkte mit CIDR-Blöcken eingeschränkt hast, stelle sicher, dass die IP-Adresse deines Client-Computers in die zulässigen CIDR-Bereiche fällt.
  • Wenn du Zugriff von außerhalb deiner Amazon Virtual Private Cloud (Amazon VPC) benötigst, verwende einen öffentlichen Endpunkt mit CIDR-Einschränkungen.

Stelle sicher, dass die Zugriffskombination deines API-Server-Endpunkts deinen Zugriffsanforderungen entspricht.

Hinweis: Es hat sich bewährt, deinen API-Server-Endpunkt auf privat zu setzen und AWS-VPN für externen Zugriff zu konfigurieren. Weitere Informationen findest du unter Zugriff auf einen ausschließlich privaten API-Server.

kubectl-Befehlsfehler in einem Cluster beheben, nachdem der Endpunktzugriff von öffentlich zu privat geändert wurde

Ergreife die folgenden Maßnahmen:

  • Vergewissere dich, dass du einen Bastion-Host oder verbundene Netzwerke verwendest, um auf den Amazon EKS-API-Endpunkt zuzugreifen. Zu den verbundenen Netzwerken gehören gepeerte VPCs, AWS Direct Connect und VPNs.
    Hinweis: Im privaten Zugriffsmodus kannst du nur innerhalb der VPC des Clusters oder verbundenen Netzwerken auf den API-Endpunkt von Amazon EKS zugreifen.
  • Prüfe, ob die Sicherheitsgruppen oder Netzwerk-Zugriffssteuerungslisten (Netzwerk-ACLs) Anfragen an den Kubernetes-API-Server blockieren.
    Hinweis: Wenn du eine gepeerte VPC verwendest, stelle sicher, dass die Sicherheitsgruppen der Kontrollebene den Zugriff von der Peering-VPC auf Port 443 zulassen.

Probleme mit einem Cluster beheben, der im Status „Failed“ feststeckt, wenn du die Einstellung für den Endpunktzugriff nicht von öffentlich auf privat ändern kannst

Wenn es ein Berechtigungsproblem mit AWS Identity and Access Management (IAM) gibt, wechselt dein Cluster in den Status Failed.

Vergewissere dich, dass die von dir verwendete IAM-Rolle berechtigt ist, die AssociateVPCWithHostedZone-Aktion auszuführen.

Wenn die Aktion nicht blockiert ist, überprüfe, ob dein AWS-Konto über Service-Kontrollrichtlinien (SCPs) von AWS Organizations verfügt, die die API-Aufrufe blockieren.Stelle sicher, dass keine impliziten oder expliziten Ablehnungen die Berechtigungen deines IAM-Benutzers auf Organisations- oder Kontoebene blockieren. Deny-Anweisungen blockieren Berechtigungen auch dann, wenn der Kontoadministrator die IAM-Richtlinie AdministratorAccess mit den Berechtigungen */* für den Benutzer hinzufügt. Die SCPs von AWS Organizations setzen die Berechtigungen für IAM-Entitäten außer Kraft.

AWS OFFICIALAktualisiert vor 9 Monaten