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

Lesedauer: 6 Minute
0

Ich habe einen Cluster in Amazon Elastic Kubernetes Service (Amazon EKS) erstellt, kann aber keine Verbindung zu ihm herstellen.

Kurzbeschreibung

Möglicherweise können Sie aus einem der folgenden Gründe keine Verbindung zu Ihrem EKS-Cluster herstellen:

  • Sie haben die kubeconfig-Datei für Ihren Cluster nicht erstellt.
  • Sie können keine Verbindung zum API-Server-Endpunkt von Amazon EKS herstellen.

Behebung

Sie haben die kubeconfig-Datei nicht erstellt

Nachdem Sie einen Amazon EKS-Cluster erstellt haben, müssen Sie mithilfe von AWS Command Line Interface (AWS CLI) Ihre kubeconfig-Datei konfigurieren. Diese Konfiguration ermöglicht Ihnen die Herstellung einer Verbindung zum Cluster über die kubectl-Befehlszeile. Die folgende Behebung zeigt Ihnen, wie Sie mit dem AWS CLI-Befehl update-kubeconfig eine kubeconfig-Datei für Ihren Cluster erstellen können. Informationen zum manuellen Aktualisieren Ihrer kubeconfig-Datei ohne Verwendung von AWS CLI finden Sie unter Erstellen oder Aktualisieren einer kubeconfig-Datei für einen Amazon EKS-Cluster.

Hinweis: Wenn beim Ausführen von Befehlen in AWS CLI Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

1.Stellen Sie sicher, dass AWS CLI 1.16.308 oder eine spätere Version auf Ihrem System installiert ist:

$ aws --version

Wichtig: Sie müssen Python 2.7.9 oder eine spätere Version auf Ihrem System installiert haben. Andernfalls erhalten Sie eine Fehlermeldung.

Tipp: Verwenden Sie Paketmanager wie yum, apt-get oder homebrew für macOS, um AWS CLI zu installieren.

2.Überprüfen Sie die aktuelle Identität, um sicherzustellen, dass Sie mit den verwendeten Anmeldeinformationen über Berechtigungen für den Amazon EKS-Cluster verfügen:

aws sts get-caller-identity

Hinweis: Dem Benutzer oder der Rolle der AWS Identity and Access Management (IAM)-Entität, der oder die einen Amazon-Cluster erstellt, werden dabei automatisch Berechtigungen erteilt. Diese Berechtigungen werden in der RBAC-Konfiguration des Clusters auf Steuerungsebene gewährt. IAM-Benutzern oder -Rollen kann auch in aws-auth ConfigMap Zugriff auf einen Amazon EKS-Cluster gewährt werden. Standardmäßig verwendet der AWS IAM Authenticator für Kubernetes die konfigurierte AWS-CLI- oder AWS-SDK-Identität. Weitere Informationen finden Sie unter Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster.

3.Erstellen oder aktualisieren Sie die kubeconfig-Datei für Ihren Cluster:

aws eks --region example_region update-kubeconfig --name cluster_name

Hinweis: Ersetzen Sie example_region durch den Namen Ihrer AWS-Region. Ersetzen Sie cluster_name durch den Namen Ihres EKS-Clusters.

Standardmäßig wird die Konfigurationsdatei für Linux im kubeconfig-Pfad ($HOME/.kube/config) Ihres Stammverzeichnisses erstellt. Die Datei kann an diesem Speicherort auch mit einer vorhandenen kubeconfig zusammengeführt werden. Für Windows befindet sich die Datei unter %USERPROFILE%\.kube\config.

Sie können auch einen anderen Pfad angeben, indem Sie die Umgebungsvariable KUBECONFIG (von der Kubernetes-Website) festlegen oder die folgende --kubeconfig-Option verwenden:

$ kubectl get pods --kubeconfig ./.kube/config

Hinweis: Für die Authentifizierung beim Ausführen von kubectl-Befehlen können Sie mit der Option**--role-arn** einen Amazon-Ressourcennamen (ARN) für eine IAM-Rolle angeben. Andernfalls wird die IAM-Entität in Ihrer standardmäßigen AWS-CLI- oder AWS-SDK-Anmeldeinformationskette verwendet. Weitere Informationen finden Sie unter update-kubeconfig. Oder Sie führen manuell Schritt 6 im Abschnitt kubeconfig-Datei manuell erstellen der Ressource Erstellen oder Aktualisieren einer kubeconfig-Datei für einen Amazon EKS-Cluster durch.

4.Testen Sie Ihre Konfiguration:

$ kubectl get svc

Beispielausgabe:

NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   1m

Hinweis: Wenn Sie andere Autorisierungs- oder Ressourcentypfehler erhalten, lesen Sie Nicht autorisiert oder Zugriff verweigert (kubectl).

Sie können keine Verbindung zum API-Server-Endpunkt von Amazon EKS herstellen

1.Stellen Sie sicher, dass Sie eine Verbindung zur richtigen API-Server-URL bei Amazon EKS herstellen. Schalten Sie dazu kubectl verbosity ein und führen Sie den folgenden Befehl aus:

$ kubectl get svc --v=9

Die Ausgabe sieht etwa wie folgt aus:

I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/config
I0110 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.Stellen Sie sicher, dass der API-Server von Amazon EKS öffentlich zugänglich ist, indem Sie den folgenden Befehl ausführen:

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

Die Ausgabe sieht etwa wie folgt aus:

{
    "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"
    ]
}

3.Wenn endpointPublicAccess in der obigen Ausgabe den Wert true hat, stellen Sie sicher, dass Sie alle Quell-IP-Adressen in der publicAccessCidrs-Liste zulassen. Gehen Sie dazu wie folgt vor:

  1. Öffnen Sie die Amazon-EKS-Konsole.
  2. Wählen Sie den Cluster aus, den Sie aktualisieren möchten.
  3. Wählen Sie die Registerkarte Netzwerk und dann Netzwerk verwalten aus.
  4. Wählen Sie Öffentlich aus.
  5. Geben Sie unter Erweiterte Einstellungen für CIDR-Block den gesamten öffentlichen CIDR-Bereich ein, der zugelassen werden muss.
  6. Wählen Sie Änderungen speichern aus.

Wenn in der obigen Ausgabe endpointPrivateAccess den Wert true hat, stellen Sie sicher, dass die kubectl-Anforderung aus dem Netzwerk des Clusters stammt. Wenn Ihre kubectl-Anfrage von außerhalb Ihrer Amazon Virtual Private Cloud (Amazon VPC) stammt, erhalten Sie den folgenden Timeout-Fehler:

$ kubectl get svc --v=9
I0110 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

Aktualisieren Sie außerdem die Sicherheitsgruppe des Clusters, um sicherzustellen, dass die Quell-IP oder der entsprechende CIDR-Bereich auf der Zulassungsliste steht. Dies ermöglicht es dem kubectl-Client, eine Verbindung zum API-Server-Endpunkt von Amazon EKS herzustellen.

Ähnliche Informationen

Amazon-EKS-Fehlerbehebung

Wie behebe ich den Fehler „Sie müssen beim Server angemeldet sein (nicht autorisiert)“, wenn ich eine Verbindung zum Amazon-EKS-API-Server herstelle?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr