Warum kann ich keine Verbindung zu meinem Amazon-EKS-Cluster herstellen?
Letzte Aktualisierung: 30.01.2023
Ich habe einen Amazon-Elastic-Kubernetes-Service-Cluster (Amazon-EKS) erstellt, kann aber keine Verbindung zu meinem Cluster 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 Amazon-EKS-API-Serverendpunkt herstellen.
Lösung
Sie haben die kubeconfig-Datei nicht erstellt
Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die aktuelle Version der AWS CLI verwenden.
1. Stellen Sie sicher, dass die AWS-CLI-Version 1.16.308 oder höher auf Ihrem System installiert ist:
$ aws --version
Wichtig: Auf Ihrem System muss Python Version 2.7.9 oder höher installiert sein. Andernfalls erhalten Sie eine Fehlermeldung.
Tipp: Verwenden Sie Paketmanager wie yum, apt-get oder homebrew für macOS, um die AWS CLI zu installieren.
2. Überprüfen Sie die aktuelle Identität, um sicherzustellen, dass Sie die richtigen Anmeldeinformationen verwenden, die über Berechtigungen für den Amazon-EKS-Cluster verfügen:
aws sts get-caller-identity
Hinweis: Der Benutzer oder die Rolle der Entität von AWS Identity and Access Management (IAM), die einen Amazon-Cluster erstellt, erhält automatisch Berechtigungen, wenn der Cluster erstellt wird. Diese Berechtigungen werden in der RBAC-Konfiguration des Clusters in der Steuerungsebene gewährt. IAM-Benutzern oder -Rollen kann auch Zugriff auf einen Amazon-EKS-Cluster in aws-auth-ConfigMap gewährt werden. Standardmäßig verwendet 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 Ihren EKS-Clusternamen.
Standardmäßig wird die Konfigurationsdatei für Linux im kubeconfig-Pfad ($HOME/.kube/config) in Ihrem Home-Verzeichnis erstellt. Die Datei könnte auch mit einer vorhandenen kubeconfig an diesem Speicherort zusammengeführt werden. Unter 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 benutzen:
$ 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 Resource Name (ARN) für die 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 führen Sie Schritt 6 im Abschnitt kubeconfig-Datei manuell erstellen unter Erstellen oder Aktualisieren einer kubeconfig-Datei für einen Amazon EKS-Cluster aus.
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 Amazon-EKS-API-Serverendpunkt herstellen
1. Stellen Sie sicher, dass Sie sich mit der richtigen Amazon-EKS-API-Server-URL verbinden. Schalten Sie dazu kubectl verbosity ein und führen Sie dann den folgenden Befehl aus:
$ kubectl get svc --v=9
Die Ausgabe sieht 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 Amazon-EKS-API-Server ö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 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"
]
}
- Öffnen Sie die Amazon EKS-Konsole.
- Wählen Sie den Cluster aus, den Sie aktualisieren möchten.
- Wählen Sie die Registerkarte Netzwerk und dann Netzwerk verwalten aus.
- Wählen Sie Öffentlich aus.
- Geben Sie unter Erweiterte Einstellungen für den CIDR-Block den gesamten öffentlichen CIDR-Bereich ein, der auf die Zulassungsliste gesetzt werden muss.
- Wählen Sie Änderungen speichern.
Wenn EndPointPrivateAccess in der vorherigen Ausgabe den Wert wahr hat, stellen Sie sicher, dass die kubectl-Anfrage 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 Cluster-Sicherheitsgruppe, um sicherzustellen, dass die Quell-IP oder der CIDR-Bereich auf der Zulaufliste steht. Dadurch kann der kubectl-Client eine Verbindung zum Amazon-EKS-API-Serverendpunkt herstellen.
Ähnliche Informationen
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?