Beheben von Problemen in Amazon EKS Connector - Amazon EKS

Beheben von Problemen in Amazon EKS Connector

In diesem Thema werden einige der häufigsten Fehler behandelt, die bei der Verwendung des Amazon EKS Connectors auftreten können, und Anweisungen zur Behebung, Problemumgehungen und häufig gestellte Fragen dargelegt.

Häufige Probleme

In diesem Abschnitt wird beschrieben, wie Sie einige funktionale Probleme beheben können, die bei der Verwendung von Amazon EKS Connector auftreten können. Er bietet Lösungen und Problemumgehungen für diese Probleme.

Wenn der Cluster nach der Registrierung des Clusters in der Amazon EKS-Konsole im Zustand Pending feststeckt, kann es daran liegen, dass Amazon EKS Connector den Cluster nich nicht erfolgreich mit AWS verbunden hat. Für einen registrierten Cluster bedeutet der Zustand Pending, dass die Verbindung nicht bereits erfolgreich hergestellt wurde. Um dieses Problem zu lösen, stellen Sie sicher, dass Sie das Manifest auf den Kubernetes-Ziel-Cluster angewendet haben. Wenn Sie es auf den Cluster angewendet haben, sich der Cluster jedoch immer noch im Status „Ausstehend“ befindet, ist Amazon EKS Connector in Ihrem Cluster höchstwahrscheinlich fehlerhaft. Weitere Informationen zum Beheben dieses Problems finden Sie im Abschnitt Amazon EKS-Connector-pods stürzen laufend ab in diesem Thema.

Amazon EKS Connector verwendet den Benutzer-Identitätswechsel von Kubernetes, um im Namen von Benutzern aus der AWS Management Console zu handeln. Jeder IAM-Identität, die von dem AWS eks-connector-Servicekonto auf die Kubernetes-API zugreift, muss die Berechtigung erteilt werden, sich als den entsprechenden Kubernetes-Benutzer mit einem IAM-ARN als Benutzernamen auszugeben. In den folgenden Beispielen wird der IAM-ARN einem Kubernetes-Benutzer zugeordnet.

  • IAM-Benutzer john von AWS-Konto 111122223333 ist einem Kubernetes-Benutzer zugeordnet.

    arn:aws:iam::111122223333:user/john
  • IAM-Rolle admin von AWS-Konto 111122223333 ist einem Kubernetes-Benutzer zugeordnet:

    arn:aws:iam::111122223333:role/admin

    Das Ergebnis ist ein ARN der IAM-Rolle anstelle des ARN der STS-Sitzung.

Eine Anleitung zum Konfigurieren der ClusterRole und ClusterRoleBinding, um dem eks-connector die Dienstkonto-Berechtigung zu gewähren, sich als zugeordneter Benutzer auszugeben, finden Sie unter Gewähren des Zugriffs für einen Benutzer zum Anzeigen von Kubernetes-Ressource eines Clusters. Stellen Sie sicher, dass in der Vorlage %IAM_ARN% durch den IAM-ARN des AWS Management Console-Benutzers ersetzt wird.

Betrachten Sie das folgende Problem. Der Amazon EKS Connector hat sich erfolgreich als den anfordernden AWS Management Console-Benutzer im Kubernetes-Ziel-Cluster ausgegeben. Der imitierte Benutzer hat jedoch keine RBAC-Berechtigung für Kubernetes-API-Vorgänge.

Um diese Probleme zu beheben, müssen Sie als Cluster-Administrator einzelnen Kubernetes-Benutzern die entsprechende Stufe an RBAC-Berechtigungen erteilen. Weitere Informationen und Beispiele finden Sie unter Gewähren des Zugriffs für einen Benutzer zum Anzeigen von Kubernetes-Ressource eines Clusters.

Wenn der Amazon EKS-Service nicht mit dem Amazon EKS-Connector im Zielcluster kommunizieren kann, kann dies einen der folgenden Gründe haben:

  • Der Amazon EKS Connector im Zielcluster ist fehlerhaft.

  • Schlechte Konnektivität oder eine unterbrochene Verbindung zwischen dem Zielcluster und der AWS-Region.

Um dieses Problem zu lösen, überprüfen Sie die Überprüfen Sie die Protokolle von Amazon EKS Connector. Wenn kein Fehler für den Amazon EKS Connector angezeigt wird, versuchen Sie die Verbindung nach einigen Minuten erneut. Wenn Sie regelmäßig eine hohe Latenz oder intermittierende Konnektivität für den Zielcluster haben, sollten Sie den Cluster erneut in einer AWS-Region registrieren, die näher ist.

Es gibt viele Gründe, die dazu führen können, dass ein EKS-Connector-pod in den CrashLoopBackOff-Status übergeht. Dieses Problem betrifft wahrscheinlich den Connector-Init-Container. Im folgenden Beispiel war es der Connector-Init-Container, der in den CrashLoopBackOff-Status überging.

kubectl get pods -n eks-connector NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s

Zur Behebung dieses Problems: Überprüfen Sie die Protokolle von Amazon EKS Connector.

Wenn Sie Amazon EKS Connector zum ersten Mal starten, registriert er einen activationId und activationCode mit Amazon Web Services. Die Registrierung könnte fehlschlagen, was dazu führen kann, dass der connector-init-Container abstürzt.

F1116 20:30:47.261469 1 init.go:43] failed to initiate eks-connector: InvalidActivation:

Berücksichtigen Sie die folgenden Ursachen und empfohlenen Korrekturen, um dieses Problem zu beheben:

  • Die Registrierung ist möglicherweise fehlgeschlagen, da ActivationId und ActivationCode nicht in Ihrer Manifestdatei enthalten sind. Stellen Sie in diesem Fall sicher, dass es sich um die richtigen Werte handelt, die von dem RegisterCluster-API-Vorgang zurückgegeben wurden, und dass sich der ActivationCode in der Manifestdatei befindet. Der ActivationCode wird zu Kubernetes-Geheimnissen hinzugefügt, daher muss er base64-codiert sein. Weitere Informationen finden Sie unter Schritt 1: Registrieren des Clusters.

  • Die Registrierung ist möglicherweise fehlgeschlagen, da Ihre Aktivierung abgelaufen ist. Dies liegt daran, dass Sie aus Sicherheitsgründen den EKS-Connector innerhalb von 3 Tagen nach der Registrierung des Clusters aktivieren müssen. Um dieses Problem zu lösen, stellen Sie sicher, dass Sie vor Ablaufdatum und -uhrzeit das EKS-Connector-Manifest auf den Kubernetes-Ziel-Cluster angewendet haben. Um das Ablaufdatum der Aktivierung zu bestätigen, rufen Sie den DescribeCluster-API-Vorgang auf. In der folgenden Beispielantwort wird das Ablaufdatum und die Uhrzeit als 2021-11-12T22:28:51.101000-08:00 aufgezeichnet.

    aws eks describe-cluster --name my-cluster { "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster", "createdAt": "2021-11-09T22:28:51.449000-08:00", "status": "FAILED", "tags": { }, "connectorConfig": { "activationId": "00000000-0000-0000-0000-000000000000", "activationExpiry": "2021-11-12T22:28:51.101000-08:00", "provider": "OTHER", "roleArn": "arn:aws:iam::123456789012:role/my-connector-role" } } }

    Wenn das activationExpiry erreicht wurde, melden Sie den Cluster ab und registrieren Sie ihn erneut. Dadurch wird eine neue Aktivierung generiert.

Um ordnungsgemäß zu funktionieren, benötigt der EKS-Connector eine ausgehende Konnektivität zu mehreren AWS-Endpunkten. Sie können einen privaten Cluster ohne ausgehende Konnektivität nicht mit einem Ziel-AWS-Region verbinden. Um dieses Problem zu lösen, müssen Sie die erforderliche ausgehende Konnektivität hinzufügen. Weitere Informationen zu den Anforderungen für Konnektoren finden Sie unter Überlegungen zum Amazon EKS Connector.

Wenn Sie den getpods-Befehl ausführen und sich pods im ImagePullBackOff-Status befinden, können sie nicht richtig funktionieren. Wenn sich der EKS-Connector-pod im ImagePullBackOff-Status, befindet, kann er nicht richtig arbeiten. Sehen Sie sich das folgende -Beispiel an:

kubectl get pods -n eks-connector NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:ImagePullBackOff 0 4s

Die standardmäßige Amazon EKS Connector-Manifestdatei verweist auf Bilder aus dem Amazon ECR Public Registry. Es ist möglich, dass der Kubernetes-Ziel-Cluster keine Bilder von Amazon ECR Public abrufen kann. Beheben Sie entweder das Image-Abrufproblem von Amazon ECR Public oder erwägen Sie, die Images in der privaten Container-Registry Ihrer Wahl zu spiegeln.

Häufig gestellte Fragen

F: Wie funktioniert die zugrunde liegende Technologie hinter Amazon EKS Connector?

A: Der Amazon EKS Connector basiert auf dem SSM Agent (Systems Manager). Der EKS Connector läuft als StatefulSet auf Ihrem Kubernetes-Cluster. Er stellt eine Verbindung her und ermöglicht die Kommunikation zwischen dem API-Server Ihres Clusters und Amazon Web Services. Dadurch werden Clusterdaten in der Amazon EKS-Konsole angezeigt, bis Sie den Cluster von AWS trennen. SSM Agent ist ein Open-Source-Projekt. Weitere Informationen zu diesem Projekt finden Sie auf der GitHub-Projektseite.

F: Ich habe einen On-Premises-Kubernetes-Cluster, den ich verbinden möchte. Muss ich Firewall-Ports öffnen, um ihn zu verbinden?

A: Nein, Sie müssen keine Firewall-Ports öffnen. Der AWS-Regionen-Cluster benötigt nur eine ausgehende Verbindung zu Kubernetes. AWS-Services greifen niemals auf Ressourcen in Ihrem On-Premises-Netzwerk zu. Der Amazon EKS Connector läuft auf Ihrem Cluster und leitet die Verbindung mit AWS ein. Wenn die Clusterregistrierung abgeschlossen ist, gibt AWS Befehle nur an den Amazon EKS Connector aus, nachdem Sie eine Aktion von der Amazon-EKS-Konsole aus gestartet haben, die Informationen vom Kubernetes-API-Server auf Ihrem Cluster benötigt.

F: Welche Daten werden vom Amazon EKS Connector über meinen Cluster an AWS gesendet?

A: Der Amazon EKS Connector sendet technische Informationen, die erforderlich sind, damit Ihr Cluster in AWS registriert wird. Er sendet auch Cluster- und Workload-Metadaten für die Funktionen der Amazon EKS-Konsole, die Kunden anfordern. Amazon EKS Connector sammelt oder sendet diese Daten nur, wenn Sie eine Aktion von der Amazon EKS-Konsole oder der Amazon EKS API aus starten, die das Senden der Daten an AWS erforderlich macht. Neben der Kubernetes-Versionsnummer speichert AWS standardmäßig keine Daten. Er speichert sie nur, wenn Sie dies autorisieren.

F: Kann ich einen Cluster außerhalb einer AWS-Region verbinden?

A: Ja, Sie können einen Cluster von jedem Standort aus mit Amazon EKS verbinden. Darüber hinaus kann sich der EKS-Service in jeder AWS-öffentlichen kommerziellen AWS-Region befinden. Dies funktioniert mit einer gültigen Netzwerkverbindung vom Cluster zur Ziel-AWS-Region. Wir empfehlen Ihnen, eine AWS-Region auszuwählen, die Ihrem Clusterstandort am nächsten ist, um die Leistungsoptimierung der Benutzeroberfläche zu gewährleisten. Wenn beispielsweise ein Cluster in Tokio ausgeführt wird, verbinden Sie zwecks niedriger Latenz den Cluster mit der AWS-Region in Tokio (also mit der AWS-Region ap-northeast-1). Sie können einen Cluster von jedem Standort aus mit dem Amazon EKS in jeder öffentlichen kommerziellen AWS-Regionen verbinden, mit Ausnahme von AWS-Regionen in China und GovCloud.

Grundlegende Fehlersuche

In diesem Abschnitt werden Schritte zur Diagnose eines nicht eindeutigen Problems beschrieben.

Überprüfen Sie den Status von Amazon EKS Connector mithilfe der folgenden Befehle.

kubectl get pods -n eks-connector

Der Amazon EKS Connector Pod besteht aus drei Containern. Führen Sie die folgenden Befehle aus, um vollständige Protokolle für alle diese Container abzurufen, damit Sie sie überprüfen können:

  • connector-init

    kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
  • connector-proxy

    kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
  • connector-agent

    kubectl exec eks-connector-0 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log kubectl exec eks-connector-1 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log

Amazon-EKS-Cluster werden von clusterName innerhalb eines einzigen AWS-Kontos und einer AWS-Region-Region eindeutig identifiziert. Wenn Sie mehrere verbundene Cluster in Amazon EKS haben, können Sie bestätigen, in welchem Amazon-EKS-Cluster der aktuelle Kubernetes-Cluster registriert ist. Geben Sie dafür Folgendes ein, um den clusterName des aktuellen Clusters herauszufinden.

kubectl exec eks-connector-0 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log \ | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" \ | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/" kubectl exec eks-connector-1 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log \ | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" \ | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/"

Die folgenden Befehle sind nützlich, um Informationen abzurufen, die Sie zur Behebung von Problemen benötigen.

  • Verwenden Sie den folgenden Befehl, um Bilder zu sammeln, die von pods im Amazon EKS Connector verwendet werden.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" \ | tr -s '[[:space:]]' '\n'
  • Verwenden Sie den folgenden Befehl, um Worker-Knotennamen zu sammeln, auf denen Amazon EKS Connector ausgeführt wird.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.nodeName}" \ | tr -s '[[:space:]]' '\n'
  • Führen Sie den folgenden Befehl aus, um Ihre Kubernetes-Client- und Server-Versionen abzurufen.

    kubectl version
  • Führen Sie den folgenden Befehl aus, um Informationen zu Ihren Worker-Knoten abzurufen.

    kubectl get nodes -o wide --show-labels