Direkt zum Inhalt

Warum kann ich keine Verbindung zu meinem Amazon EKS-Cluster herstellen?

Lesedauer: 5 Minute
0

Ich habe einen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster erstellt, zu dem ich keine Verbindung herstellen kann.

Kurzbeschreibung

Möglicherweise kannst du aus einem der folgenden Gründe keine Verbindung zu deinem Amazon EKS-Cluster herstellen:

  • Du hast die kubeconfig-Datei für deinen Cluster nicht erstellt.
  • Du kannst keine Verbindung zum API-Server-Endpunkt von Amazon EKS herstellen.

Lösung

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.

Du hast die kubeconfig-Datei nicht erstellt

Nachdem du deinen Amazon EKS-Cluster erstellt hast, konfiguriere deine kubeconfig-Datei so, dass du die kubectl-Befehlszeile verwenden kannst, um eine Verbindung zu deinem Cluster herzustellen. Die kubeconfig-Datei enthält deine Kubernetes-Cluster-Konfiguration.

Je nach Betriebssystem (OS) findest du deine kubeconfig-Datei an den folgenden Speicherorten:

  • Gehe für Linux oder macOS zu $HOME/.kube/config.
  • Gehe für Windows zu %USERPROFILE%\.kube\config.

Um einen anderen Dateispeicherort zu verwenden, führe eine der folgenden Aktionen aus:

  • Stelle die Umgebungsvariable KUBECONFIG so ein, dass sie auf den neuen Speicherort zeigt.
  • Verwende das Flag --kubeconfig, wenn du kubectl-Befehle ausführst, um einen benutzerdefinierten Dateipfad anzugeben.

Wenn am Standardspeicherort bereits eine kubeconfig-Datei vorhanden ist, führt Amazon EKS neue Konfigurationen mit der vorhandenen Datei zusammen. Du kannst den Befehl kubectl config verwenden, um deine Cluster-Kontexte zu verwalten. Weitere Informationen findest du unter kubectl config auf der Kubernetes-Website.

Du kannst keine Verbindung zum API-Server-Endpunkt von Amazon EKS herstellen

Gehe wie folgt vor, um dieses Problem zu beheben:

  1. Um zu überprüfen, ob du eine Verbindung zur Amazon EKS-API-Server-URL herstellen kannst, führe den folgenden Befehl mit erhöhter Ausführlichkeit aus:

    kubectl get svc --v=9

    Die Befehlsausgabe zeigt detaillierte Verbindungsinformationen, einschließlich der API-Server-URL, die deine Verbindung verwendet. Überprüfe die IP-Adressen, die für HTTP Trace: DNS-Suche aufgeführt sind.
    Beispielausgabe:

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 16:43:36.936844   48173 round_trippers.go:466] curl -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500'
    I0110 16:43:37.362185   48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }]
    I0110 16:43:37.402538   48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed
    I0110 16:43:37.500276   48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds
    I0110 16:43:37.500302   48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms
    I0110 16:43:37.500308   48173 round_trippers.go:577] Response Headers:
    I0110 16:43:37.500316   48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564
    I0110 16:43:37.500323   48173 round_trippers.go:580] Cache-Control: no-cache, private
    I0110 16:43:37.500329   48173 round_trippers.go:580] Content-Type: application/json
    I0110 16:43:37.500334   48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f
    I0110 16:43:37.500340   48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c
    I0110 16:43:37.500345   48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
  2. Um zu überprüfen, ob der Amazon EKS-API-Server öffentlich zugänglich ist, führe den folgenden describe-cluster-AWS-CLI-Befehl aus:

    aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

    Hinweis: Ersetze cluster_name durch den Namen deines Clusters und example_region durch deine AWS-Region.
    Beispielausgabe:

    {    "subnetIds": [
            "subnet-abc1",
            "subnet-abc2",
            "subnet-abc3",
            "subnet-abc4",
            "subnet-abc5",
            "subnet-abc6"
        ],
        "securityGroupIds": [
           "sg-abc7"
        ],
        "clusterSecurityGroupId": "sg-abc7",
        "vpcId": "vpc-abc9",
        "endpointPublicAccess": true,
        "endpointPrivateAccess": false,
        "publicAccessCidrs": [
            "0.0.0.0/0"
        ]
    }

    Um den öffentlichen Zugriff zu ermöglichen, stelle sicher, dass endpointPublicAccess den Wert true hat. Um den Zugriff privat zu halten, stelle sicher, dass endpointPublicAccess den Wert false hat. Wenn endpointPublicAccess den Wert false hat, fahre mit Schritt 9 fort. Wenn endpointPublicAccess den Wert true hat, ist es eine bewährte Sicherheitsmethode, endpointPublicAccess auf bestimmte IP-Adressbereiche zu beschränken. Führe die Schritte 3–8 aus, um deine erlaubten IP-Adressen zur publicAccessCidrs-Zulassungsliste hinzuzufügen.

  3. Öffne die Amazon EKS-Konsole.

  4. Wähle Cluster und dann den Cluster aus, den du aktualisieren möchtest.

  5. Wähle die Registerkarte Netzwerk und dann Netzwerk verwalten aus.

  6. Wähle Öffentlich aus.

  7. Gib unter Erweiterte Einstellungen für CIDR-Block den öffentlichen CIDR-Bereich ein, den du zur Zulassungsliste hinzufügen möchtest.
    Wichtig: Gib die IP-Adresse des NAT-Gateways an, über das die Worker-Knoten in deinen privaten Subnetzen auf das Internet zugreifen. Gib auch die IP-Adressen aller Netzwerkkomponenten von NAT-Geräten an.

  8. Wähle Änderungen speichern.

  9. Wenn du den API-Server des Clusters im reinen Privatmodus konfiguriert hast, stelle sicher, dass die kubectl-Anfrage aus dem Netzwerk des Clusters stammt. Wenn deine kubectl-Anfrage von außerhalb deiner Amazon Virtual Private Cloud (Amazon VPC) stammt, erhältst du den folgenden Timeout-Fehler, wenn du den get svc-Befehl ausführst:

    $ kubectl get svc --v=9I0110 17:15:58.889798   50514 loader.go:373] Config loaded from file:  /Users/example-user/.kube/config
    I0110 17:15:58.896715   50514 round_trippers.go:466] curl -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500'
    I0110 17:15:59.374499   50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }]
    I0110 17:16:14.285027   50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout
    I0110 17:16:29.191768   50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout
    I0110 17:16:29.196959   50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500  in 30300 milliseconds
    I0110 17:16:29.197724   50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms
    I0110 17:16:29.197768   50514 round_trippers.go:577] Response Headers:
    I0110 17:16:29.199254   50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout
    Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
  10. Aktualisiere die Cluster-Sicherheitsgruppe, um die Quell-IP-Adresse oder den CIDR-Bereich zu deiner Zulassungsliste hinzuzufügen. Dadurch kann der kubectl-Client von der Cluster-VPC aus eine Verbindung zum Amazon EKS-API-Serverendpunkt herstellen.

Ähnliche Informationen

Probleme mit Amazon EKS-Clustern und -Knoten beheben

Wie behebe ich den Fehler , wenn ich eine Verbindung zum Amazon EKS-API-Server herstelle?"You must be logged in to the server (Unauthorized)"

Cluster-Netzwerke für Amazon EKS-Worker-Knoten entmystifizieren

Wie sperre ich den API-Zugriff auf bestimmte IP-Adressen in meinem Amazon EKS-Cluster?