Probleme mit EKS Amazon-Clustern und -Knoten beheben - Amazon EKS

Hilf mit, diese Seite zu verbessern

Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Probleme mit EKS Amazon-Clustern und -Knoten beheben

In diesem Kapitel werden einige häufig auftretende Fehler behandelt, die bei der Nutzung von Amazon auftreten können, EKS und wie Sie diese umgehen können. Wenn Sie Probleme in bestimmten EKS Amazon-Bereichen beheben müssen, lesen Sie die separaten Themen Problembehebung IAMProbleme mit Amazon EKS Connector beheben, und Fehlerbehebung für die ADOT Verwendung von EKS Add-Ons.

Weitere Informationen zur Fehlerbehebung finden Sie in den Knowledge Center-Inhalten zu Amazon Elastic Kubernetes Service unter AWS re:Post.

Unzureichende Kapazität

Wenn Sie beim Versuch, einen EKS Amazon-Cluster zu erstellen, die folgende Fehlermeldung erhalten, verfügt eine der von Ihnen angegebenen Availability Zones nicht über ausreichend Kapazität, um einen Cluster zu unterstützen.

Cannot create cluster 'example-cluster' because region-1d, the targeted Availability Zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these Availability Zones: region-1a, region-1b, region-1c

Versuchen Sie erneut, Ihren Cluster mit Subnetzen in Ihrem Cluster zu erstellenVPC, die in den Availability Zones gehostet werden, die in dieser Fehlermeldung angezeigt wurden.

Es gibt Availability Zones, in denen sich kein Cluster befinden darf. Vergleichen Sie die Availability Zones, in denen sich Ihre Subnetze befinden, mit der Liste der Availability Zones unter Subnetz-Anforderungen und -Überlegungen.

Knoten können nicht mit dem Cluster verknüpft werden

Es gibt zwei häufige Gründe, aus denen Knoten nicht mit dem Cluster verknüpft werden können:

  • Wenn es sich bei den Knoten um verwaltete Knoten handelt, EKS fügt Amazon aws-auth ConfigMap beim Erstellen der Knotengruppe Einträge hinzu. Wenn der Eintrag entfernt oder geändert wurde, müssen Sie ihn erneut hinzufügen. Weitere Informationen erhalten Sie durch Eingabe von eksctl create iamidentitymapping --help im Terminal. Sie können Ihre aktuellen aws-auth ConfigMap Einträge anzeigen, indem Sie sie ersetzen my-cluster geben Sie den folgenden Befehl mit dem Namen Ihres Clusters ein und führen Sie dann den geänderten Befehl aus:eksctl get iamidentitymapping --cluster my-cluster. Die ARN Rolle, die Sie angeben, darf keinen anderen Pfad als enthalten/. Wenn der Name Ihrer Rolle beispielsweise lautetdevelopment/apps/my-role, müssen Sie ihn my-role bei der Angabe von ARN für die Rolle in ändern. Stellen Sie sicher, dass Sie die IAM Knotenrolle angeben ARN (nicht das InstanzprofilARN).

    Wenn die Knoten selbst verwaltet werden und Sie keine Zugriffseinträge für die IAM Rolle ARN des Knotens erstellt haben, führen Sie dieselben Befehle aus, die für verwaltete Knoten aufgeführt sind. Wenn Sie einen Zugriffseintrag ARN für die IAM Rolle Ihres Knotens erstellt haben, ist dieser im Zugriffseintrag möglicherweise nicht richtig konfiguriert. Stellen Sie sicher, dass die IAM Knotenrolle ARN (nicht das InstanzprofilARN) ARN in Ihrem aws-auth ConfigMap Eintrag oder Zugriffseintrag als Principal angegeben ist. Weitere Informationen zu Zugriffseinträgen finden Sie unter Gewähren Sie IAM Benutzern Zugriff auf Kubernetes mit EKS Zugriffseinträgen.

  • Die AWS CloudFormation Vorlage ClusterNamein Ihrem Knoten entspricht nicht genau dem Namen des Clusters, dem Ihre Knoten beitreten sollen. Wenn Sie einen falschen Wert an dieses Feld übergeben, führt dies zu Fehlern in der Konfiguration der /var/lib/kubelet/kubeconfig-Datei des Knotens und dieser kann nicht mit dem Cluster verknüpft werden.

  • Der Knoten ist nicht als Eigentum des Clusters gekennzeichnet. Auf Ihre Worker-Knoten muss die folgende Markierung angewendet werden, wobei my-cluster durch den Namen des Clusters ersetzt wird.

    Schlüssel Wert

    kubernetes.io/cluster/my-cluster

    owned

  • Die Knoten können möglicherweise nicht über eine öffentliche IP-Adresse auf den Cluster zugreifen. Stellen Sie sicher, dass den Knoten, die in öffentlichen Subnetzen bereitgestellt werden, eine öffentliche IP-Adresse zugewiesen wird. Ist dies nicht der Fall, können Sie einem Knoten eine Elastic-IP-Adresse nach dem Start zuordnen. Weitere Informationen dazu finden Sie unter Zuordnen einer Elastic-IP-Adresse zu einer laufenden Instance oder einer Netzwerkschnittstelle. Wenn das öffentliche Subnetz nicht so eingestellt ist, dass es Instances, die es nutzen, automatisch öffentliche IP-Adressen zuweist, empfehlen wir, diese Einstellung zu aktivieren. Weitere Informationen finden Sie unter Ändern des öffentlichen IPv4-Adressierungsattributs für Ihr Subnetz. Wenn der Knoten in einem privaten Subnetz bereitgestellt wird, muss das Subnetz über eine Route zu einem NAT Gateway verfügen, dem eine öffentliche IP-Adresse zugewiesen ist.

  • Der AWS STS Endpunkt für den AWS-Region , für den Sie die Knoten bereitstellen, ist für Ihr Konto nicht aktiviert. Informationen zum Aktivieren der Region finden Sie unter Aktivieren und Deaktivieren AWS STS in einem AWS-Region.

  • Der Knoten hat keinen privaten DNS Eintrag, was dazu führt, dass das kubelet Protokoll einen node "" not found Fehler enthält. Stellen Sie sicher, dass für den VPC Ort, an dem der Knoten erstellt wurde, Werte für domain-name und domain-name-servers wie Options in a festgelegt sindDHCP options set. Die Standard-Werte sind domain-name:<region>.compute.internal und domain-name-servers:AmazonProvidedDNS. Weitere Informationen finden Sie unter DHCPOptionssätze im VPCAmazon-Benutzerhandbuch.

  • Wenn die Knoten in der verwalteten Knotengruppe innerhalb von 15 Minuten keine Verbindung zum Cluster herstellen, wird ein Systemfehler von „NodeCreationFailure“ ausgegeben und der Konsolenstatus wird auf gesetztCreate failed. Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Windows AMIsbei denen die Startzeiten langsam sind, kann dieses Problem mithilfe von Fast Launch behoben werden.

Zur Ermittlung und Behebung häufiger Ursachen, die den Beitritt von Worker-Knoten zu einem Cluster verhindern, können Sie das Runbook AWSSupport-TroubleshootEKSWorkerNode verwenden. Weitere Informationen finden Sie unter AWSSupport-TroubleshootEKSWorkerNode in der Referenz zum Automation-Runbook für AWS Systems Manager .

Nicht autorisiert oder Zugriff verweigert (kubectl)

Wenn Sie beim Ausführen von kubectl Befehlen einen der folgenden Fehler erhalten, haben Sie nicht richtig für Amazon kubectl konfiguriert EKS oder die Anmeldeinformationen für den IAM Principal (Rolle oder Benutzer), den Sie verwenden, sind nicht zugeordnet Kubernetes Nutzername, der über ausreichende Berechtigungen verfügt für Kubernetes Objekte in Ihrem EKS Amazon-Cluster.

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn't have a resource type "svc"

Das kann auf eine der folgenden Ursachen zurückzuführen sein:

  • Der Cluster wurde mit Anmeldeinformationen für einen IAM Prinzipal erstellt und kubectl ist so konfiguriert, dass er Anmeldeinformationen für einen anderen IAM Prinzipal verwendet. Aktualisieren Sie in diesem Fall die Datei kube config mit den Anmeldeinformationen, mit denen der Cluster erstellt wurde, um das Problem zu beheben. Weitere Informationen finden Sie unter Verbinden kubectl zu einem EKS Cluster durch Erstellen eines kubeconfig file.

  • Wenn Ihr Cluster die minimalen Plattformanforderungen im Abschnitt Voraussetzungen von erfülltGewähren Sie IAM Benutzern Zugriff auf Kubernetes mit EKS Zugriffseinträgen, ist für Ihren IAM Prinzipal kein Zugriffseintrag vorhanden. Wenn er existiert, verfügt er nicht über die erforderlichen Kubernetes Für sie wurden Gruppennamen definiert oder ihr wurde nicht die richtige Zugriffsrichtlinie zugewiesen. Weitere Informationen finden Sie unter Gewähren Sie IAM Benutzern Zugriff auf Kubernetes mit EKS Zugriffseinträgen.

  • Wenn Ihr Cluster die Mindestanforderungen für die Plattform in nicht erfülltGewähren Sie IAM Benutzern Zugriff auf Kubernetes mit EKS Zugriffseinträgen, ist kein Eintrag mit Ihrem IAM Principal in der vorhanden aws-authConfigMap. Wenn er existiert, ist er nicht zugeordnet Kubernetes Gruppennamen, die an a gebunden sind Kubernetes Roleoder ClusterRole mit den erforderlichen Berechtigungen. Weitere Informationen zur Kubernetes Rollenbasierte Authorization (RBAC) -Objekte, siehe RBACAutorisierung verwenden in Kubernetes -Dokumentation. Sie können Ihre aktuellen aws-auth ConfigMap Einträge anzeigen, indem Sie my-cluster geben Sie den folgenden Befehl mit dem Namen Ihres Clusters ein und führen Sie dann den geänderten Befehl aus:eksctl get iamidentitymapping --cluster my-cluster. Wenn ein Eintrag für mit dem Ihres IAM Prinzipals nicht in ARN der enthalten istConfigMap, geben Sie ihn eksctl create iamidentitymapping --help in Ihr Terminal ein, um zu erfahren, wie Sie einen erstellen.

Wenn Sie das installieren und konfigurieren AWS CLI, können Sie die von Ihnen verwendeten IAM Anmeldeinformationen konfigurieren. Weitere Informationen finden Sie unter Konfigurieren der AWS CLI im AWS Command Line Interface -Leitfaden. Sie können auch kubectl die Verwendung einer IAM Rolle konfigurieren, wenn Sie eine IAM Rolle für den Zugriff annehmen Kubernetes Objekte auf Ihrem Cluster. Weitere Informationen finden Sie unter Verbinden kubectl zu einem EKS Cluster durch Erstellen eines kubeconfig file.

hostname doesn't match

Die Python-Version Ihres Systems muss 2.7.9 oder höher sein. Andernfalls erhalten Sie hostname doesn't match Fehler bei AWS CLI Anrufen bei AmazonEKS. Weitere Informationen finden Sie auf der Seite mit häufig gestellten Fragen der Python Requests-Website unter What are “hostname doesn’t match” errors?.

getsockopt: no route to host

Docker läuft im 172.17.0.0/16 CIDR Bereich in EKS Amazon-Clustern. Wir empfehlen, dass sich die VPC Subnetze Ihres Clusters nicht mit diesem Bereich überschneiden. Andernfalls erhalten Sie den folgenden Fehler:

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

Instances failed to join the Kubernetes cluster

Wenn Sie den Fehler Instances failed to join the Kubernetes cluster in der erhalten, stellen Sie sicher AWS Management Console, dass entweder der private Endpunktzugriff des Clusters aktiviert ist oder dass Sie CIDR Blöcke für den Zugriff auf öffentliche Endpunkte korrekt konfiguriert haben. Weitere Informationen finden Sie unter Steuern Sie den Netzwerkzugriff auf den API Clusterserver-Endpunkt.

Fehlercodes bei verwalteten Knotengruppen

Wenn in Ihrer verwalteten Knotengruppe ein Problem mit dem Hardwarestatus auftritt, EKS gibt Amazon einen Fehlercode zurück, der Ihnen bei der Diagnose des Problems hilft. Diese Gesundheitschecks erkennen keine Softwareprobleme, da sie auf EC2Amazon-Gesundheitschecks basieren. Die Fehlercodes sind in der folgenden Liste beschrieben.

AccessDenied

Amazon EKS oder einer oder mehrere Ihrer verwalteten Knoten können sich nicht authentifizieren oder autorisieren mit Ihrem Kubernetes Cluster-ServerAPI. Weitere Informationen zum Beheben einer häufigen Ursache finden Sie unter Behebung einer häufigen Ursache für AccessDenied-Fehler bei verwalteten Knotengruppen. Privat Windows AMIskann diesen Fehlercode auch zusammen mit der Not authorized for images Fehlermeldung verursachen. Weitere Informationen finden Sie unter Not authorized for images.

AmiIdNotFound

Wir konnten die mit Ihrer Startvorlage verknüpfte AMI ID nicht finden. Vergewissern Sie sich, dass die Datei AMI existiert und mit Ihrem Konto geteilt wird.

AutoScalingGroupNotFound

Die Auto-Scaling-Gruppe, die der verwalteten Knotengruppe zugeordnet ist, konnte nicht gefunden werden. Möglicherweise können Sie eine Auto-Scaling-Gruppe mit den gleichen Einstellungen zur Wiederherstellung erstellen.

ClusterUnreachable

Amazon EKS oder einer oder mehrere Ihrer verwalteten Knoten können nicht mit Ihrem kommunizieren Kubernetes APICluster-Server. Dies kann passieren, wenn es zu Netzwerkunterbrechungen kommt oder wenn API Server bei der Bearbeitung von Anfragen eine Zeitüberschreitung hinnehmen.

Ec2 SecurityGroupNotFound

Die Cluster-Sicherheitsgruppe für den Cluster konnte nicht gefunden werden. Sie müssen Ihren Cluster neu erstellen.

Ec2 SecurityGroupDeletionFailure

Die RAS-Sicherheitsgruppe für Ihre verwaltete Knotengruppe konnte nicht gelöscht werden. Entfernen Sie alle Abhängigkeiten aus der Sicherheitsgruppe.

Ec2 LaunchTemplateNotFound

Wir konnten die EC2 Amazon-Startvorlage für Ihre verwaltete Knotengruppe nicht finden. Sie müssen Ihre Knotengruppe neu erstellen, um sie wiederherzustellen.

Ec2 LaunchTemplateVersionMismatch

Die Version der EC2 Amazon-Startvorlage für Ihre verwaltete Knotengruppe stimmt nicht mit der Version überein, die Amazon EKS erstellt hat. Möglicherweise können Sie zu der Version zurückkehren, die Amazon für die Wiederherstellung EKS erstellt hat.

IamInstanceProfileNotFound

Wir konnten das IAM Instance-Profil für Ihre verwaltete Knotengruppe nicht finden. Möglicherweise können Sie erneut ein Instance-Profil mit den gleichen Einstellungen zur Wiederherstellung erstellen.

IamNodeRoleNotFound

Wir konnten die IAM Rolle für Ihre verwaltete Knotengruppe nicht finden. Möglicherweise können Sie eine IAM Rolle mit denselben Einstellungen neu erstellen, um sie wiederherzustellen.

AsgInstanceLaunchFailures

Beim Versuch, Instances zu starten, treten in Ihrer Auto-Scaling-Gruppe Fehlfunktionen auf.

NodeCreationFailure

Ihre gestarteten Instances können sich nicht bei Ihrem EKS Amazon-Cluster registrieren. Häufige Ursachen für diesen Fehler sind unzureichende Berechtigungen für IAMKnotenrollen oder mangelnder ausgehender Internetzugang für die Knoten. Ihre Knoten müssen eine der folgenden Anforderungen erfüllen:

InstanceLimitExceeded

Ihr AWS Konto kann keine weiteren Instances des angegebenen Instance-Typs starten. Möglicherweise können Sie eine Erhöhung des EC2 Amazon-Instance-Limits für die Wiederherstellung beantragen.

InsufficientFreeAddresses

Mindestens eines der Subnetze, die Ihrer verwalteten Knotengruppe zugeordnet sind, verfügt nicht über genügend verfügbare IP-Adressen für neue Knoten.

InternalFailure

Diese Fehler werden normalerweise durch ein EKS serverseitiges Problem von Amazon verursacht.

Die häufigste Ursache für AccessDenied-Fehler beim Ausführen von Vorgängen auf verwalteten Knotengruppen ist das Fehlen von eks:node-manager, ClusterRole oder ClusterRoleBinding. Amazon EKS richtet diese Ressourcen in Ihrem Cluster als Teil des Onboardings mit verwalteten Knotengruppen ein. Sie sind für die Verwaltung der Knotengruppen erforderlich.

Die ClusterRole kann sich im Laufe der Zeit ändern, sollte aber dem folgenden Beispiel ähneln:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create

Die ClusterRoleBinding kann sich im Laufe der Zeit ändern, sollte aber dem folgenden Beispiel ähneln:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Stellen Sie sicher, dass die Ressource eks:node-manager ClusterRole besteht.

kubectl describe clusterrole eks:node-manager

Wenn bestehend, vergleichen Sie die Ausgabe mit dem vorherigen ClusterRole-Beispiel.

Stellen Sie sicher, dass die Ressource eks:node-manager ClusterRoleBinding besteht.

kubectl describe clusterrolebinding eks:node-manager

Wenn bestehend, vergleichen Sie die Ausgabe mit dem vorherigen ClusterRoleBinding-Beispiel.

Wenn Sie einen fehlenden oder defekten ClusterRole oder ClusterRoleBinding als Ursache eines AcessDenied-Fehlers beim Anfordern verwalteter Knotengruppenoperationen finden, können Sie sie wiederherstellen. Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen eks-node-manager-role.yaml.

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Wenden Sie die Datei an.

kubectl apply -f eks-node-manager-role.yaml

Wiederholen Sie den Vorgang der Knotengruppe, um festzustellen, ob das Problem dadurch behoben wurde.

Not authorized for images

Eine mögliche Ursache für eine Not authorized for images Fehlermeldung ist die Verwendung eines privaten Amazon EKS Windows AMIum zu starten Windows verwaltete Knotengruppen. Nach der Veröffentlichung neuer Windows AMIs, AWS macht AMIs die, die älter als 4 Monate sind, privat, wodurch sie nicht mehr zugänglich sind. Wenn Ihre verwaltete Knotengruppe eine private Windows AMI, erwägen Sie, Ihre zu aktualisieren Windows verwaltete Knotengruppe. Wir können zwar nicht garantieren, dass wir Zugriff auf privat gemachte AMIs Inhalte gewähren können, aber du kannst den Zugriff beantragen, indem du ein Ticket beim AWS Support einreichst. Weitere Informationen finden Sie unter Patches, Sicherheitsupdates und AMI IDs im EC2Amazon-Benutzerhandbuch.

Der Knoten befindet sich im NotReady Status

Wenn Ihr Knoten in einen NotReady Status wechselt, deutet dies wahrscheinlich darauf hin, dass der Knoten fehlerhaft ist und nicht für einen neuen Knoten geplant werden kann Pods. Dies kann verschiedene Ursachen haben, z. B. weil dem Knoten nicht genügend RessourcenCPU, Arbeitsspeicher oder verfügbarer Festplattenspeicher fehlen.

Für Amazon EKS optimiert Windows AMIs, es gibt keine Reservierung für Rechenressourcen, die standardmäßig in der kubelet Konfiguration angegeben sind. Um Ressourcenproblemen vorzubeugen, können Sie Rechenressourcen für Systemprozesse reservieren, indem Sie die kubelet Konfigurationswerte für kube-reservedund/oder angeben system-reserved. Dazu verwenden Sie den -KubeletExtraArgs Befehlszeilenparameter im Bootstrap-Skript. Weitere Informationen finden Sie unter Reservieren von Rechenressourcen für System-Daemons im Kubernetes Dokumentation und Bootstrap-Skriptkonfigurationsparameter in diesem Benutzerhandbuch.

CNITool zum Sammeln von Protokollen

Das Tool Amazon VPC CNI plugin for Kubernetes hat ein eigenes Fehlerbehebungsskript, das auf Knoten unter verfügbar ist/opt/cni/bin/aws-cni-support.sh. Sie können das Skript verwenden, um Diagnoseprotokolle für Support-Fälle und allgemeine Fehlerbehebung zu sammeln.

Mit dem folgenden Befehl können Sie das Skript auf dem Knoten ausführen:

sudo bash /opt/cni/bin/aws-cni-support.sh
Anmerkung

Wenn das Skript an diesem Ort nicht vorhanden ist, konnte der CNI Container nicht ausgeführt werden. Sie können das Skript mit dem folgenden Befehl manuell herunterladen und ausführen:

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh

Das Skript sammelt die folgenden Diagnoseinformationen: Die CNI Version, die Sie bereitgestellt haben, kann älter als die Skriptversion sein.

This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information... Trying to collect SELinux status... Trying to collect iptables information... Trying to collect installed packages... Trying to collect active system services... Trying to collect Docker daemon information... Trying to collect kubelet information... Trying to collect L-IPAMD information... Trying to collect sysctls information... Trying to collect networking information... Trying to collect CNI configuration information... Trying to collect running Docker containers and gather container data... Trying to collect Docker daemon logs... Trying to archive gathered information... Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Die Diagnoseinformationen werden gesammelt und gespeichert unter:

/var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Container-Laufzeitnetzwerk nicht bereit

Möglicherweise erhalten Sie einen Container runtime network not ready-Fehler und einen Autorisierungsfehler, die den folgenden ähneln:

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized 4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

Dieses Problem kann folgende Ursachen haben:

  1. Sie haben entweder keine in aws-auth ConfigMap Ihrem Cluster oder sie enthält keine Einträge für die IAM Rolle, mit der Sie Ihre Knoten konfiguriert haben.

    Dieser ConfigMap-Eintrag ist erforderlich, wenn Ihre Knoten eines der folgenden Kriterien erfüllen:

    Um das Problem zu beheben, sehen Sie sich die vorhandenen Einträge in Ihrem an, ConfigMap indem Sie sie ersetzen my-cluster geben Sie den folgenden Befehl mit dem Namen Ihres Clusters ein und führen Sie dann den geänderten Befehl aus:eksctl get iamidentitymapping --cluster my-cluster. Sollten Sie im Zusammenhang mit dem Befehl eine Fehlermeldung erhalten, verfügt Ihr Cluster möglicherweise nicht über eine aws-auth ConfigMap. Der folgende Befehl fügt ConfigMap einen Eintrag hinzu. Ist ConfigMap nicht vorhanden, wird sie durch den Befehl erstellt. Ersetzen 111122223333 mit der AWS-Konto ID für die IAM Rolle und myAmazonEKSNodeRole mit dem Namen der Rolle Ihres Knotens.

    eksctl create iamidentitymapping --cluster my-cluster \ --arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}

    Die ARN Rolle, die Sie angeben, darf keinen anderen Pfad als enthalten/. Wenn der Name Ihrer Rolle beispielsweise lautetdevelopment/apps/my-role, müssen Sie ihn my-role bei der Angabe ARN der Rolle in ändern. Stellen Sie sicher, dass Sie die IAM Knotenrolle angeben ARN (nicht das InstanzprofilARN).

  2. Ihre selbstverwalteten Knoten befinden sich in einem Cluster mit einer Plattformversion in der Mindestversion, die in den Voraussetzungen im Gewähren Sie IAM Benutzern Zugriff auf Kubernetes mit EKS Zugriffseinträgen Thema aufgeführt ist, aber ein Eintrag für die IAM Rolle des Knotens ist nicht aufgeführt aws-auth ConfigMap (siehe vorheriges Element) oder es gibt keinen Zugriffseintrag für die Rolle. Um das Problem zu beheben, sehen Sie sich Ihre vorhandenen Zugriffseinträge an, indem Sie sie ersetzen my-cluster geben Sie den folgenden Befehl mit dem Namen Ihres Clusters ein und führen Sie dann den geänderten Befehl aus:aws eks list-access-entries --cluster-name my-cluster. Der folgende Befehl fügt einen Zugriffseintrag für die IAM Rolle des Knotens hinzu. Ersetzen 111122223333 mit der AWS-Konto ID für die IAM Rolle und myAmazonEKSNodeRole mit dem Namen der Rolle Ihres Knotens. Wenn Sie einen Windows-Knoten haben, ersetzen Sie EC2_Linux mitEC2_Windows. Stellen Sie sicher, dass Sie die IAM Knotenrolle angeben ARN (nicht das InstanzprofilARN).

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --type EC2_Linux

TLSHandshake-Timeout

Wenn ein Knoten keine Verbindung zum Endpunkt des öffentlichen API Servers herstellen kann, wird möglicherweise ein Fehler angezeigt, der dem folgenden Fehler ähnelt.

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

Der kubelet Prozess wird kontinuierlich neu gestartet und der API Serverendpunkt getestet. Der Fehler kann auch vorübergehend während jeder Prozedur auftreten, die eine laufende Aktualisierung des Clusters auf der Steuerungsebene durchführt, z. B. eine Konfigurationsänderung oder eine Versionsaktualisierung.

Um das Problem zu beheben, überprüfen Sie die Routing-Tabelle und die Sicherheitsgruppen, um sicherzustellen, dass der Datenverkehr von den Knoten den öffentlichen Endpunkt erreichen kann.

InvalidClientTokenId

Wenn Sie IAM Rollen für Dienstkonten für einen verwenden Pod oder in einem Cluster in China DaemonSet AWS-Region bereitgestellt und die AWS_DEFAULT_REGION Umgebungsvariable nicht in der Spezifikation festgelegt wurde, Pod oder DaemonSet es wird möglicherweise der folgende Fehler angezeigt:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

Um das Problem zu beheben, müssen Sie die AWS_DEFAULT_REGION Umgebungsvariable zu Ihrem hinzufügen Pod oder DaemonSet Spezifikation, wie im folgenden Beispiel gezeigt Pod spezifikation.

apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "region-code"

Knotengruppen müssen übereinstimmen Kubernetes Version vor dem Upgrade der Steuerungsebene

Bevor Sie eine Steuerungsebene auf eine neue aktualisieren Kubernetes Version, die Nebenversion der verwalteten Knoten und der Fargate-Knoten in Ihrem Cluster muss mit der Version der aktuellen Version Ihrer Kontrollebene identisch sein. Amazon EKS update-cluster-version API lehnt Anfragen ab, bis Sie alle von Amazon EKS verwalteten Knoten auf die aktuelle Cluster-Version aktualisiert haben. Amazon EKS bietet APIs die Möglichkeit, verwaltete Knoten zu aktualisieren. Für Informationen zum Upgrade einer verwalteten Knotengruppe Kubernetes Version finden Sie unterAktualisieren Sie eine verwaltete Knotengruppe für Ihren Cluster. Um die Version eines Fargate-Knotens zu aktualisieren, löschen Sie den pod das wird durch den Knoten repräsentiert, und stellen Sie das erneut bereit pod nachdem Sie Ihre Steuerungsebene aktualisiert haben. Weitere Informationen finden Sie unter Aktualisieren Sie den vorhandenen Cluster auf die neue Kubernetes-Version.

Beim Starten vieler Knoten gibt es Too Many Requests-Fehler

Wenn Sie viele Knoten gleichzeitig starten, wird in den Ausführungsprotokollen der EC2Amazon-Benutzerdaten möglicherweise eine Fehlermeldung angezeigt, die besagtToo Many Requests. Dies kann auftreten, weil die Steuerebene mit describeCluster-Aufrufen überlastet wird. Die Überladung führt zu einer Drosselung, Knoten, die das Bootstrap-Skript nicht ausführen können, und Knoten, die dem Cluster insgesamt nicht beitreten können.

Stellen Sie sicher, dass die Argumente --apiserver-endpoint, --b64-cluster-ca und --dns-cluster-ip an das Bootstrap-Skript des Knotens übergeben werden. Wenn Sie diese Argumente einschließen, muss das Bootstrap-Skript keinen describeCluster-Aufruf ausführen, wodurch verhindert wird, dass die Steuerebene überlastet wird. Weitere Informationen finden Sie unter Geben Sie Benutzerdaten an, um Argumente an die bootstrap.sh Datei zu übergeben, die in einem EKS Amazon-optimiertenLinux/enthalten ist Bottlerocket AMI.

HTTP401 unautorisierte Fehlerantwort auf Kubernetes APIServeranfragen

Sie sehen diese Fehler, wenn PodDas Dienstkonto-Token ist auf einem Cluster abgelaufen.

Die Ihres EKS Amazon-Clusters Kubernetes APIDer Server lehnt Anfragen ab, deren Token älter als 90 Tage sind. In der Vergangenheit Kubernetes In den Versionen hatten Tokens kein Ablaufdatum. Clients, die diese Tokens verwenden, müssen die Tokens nun innerhalb einer Stunde aktualisieren. Um das zu verhindern Kubernetes APIdass der Server Ihre Anfrage aufgrund eines ungültigen Tokens ablehnt, Kubernetes Die von Ihrem Workload verwendete SDK Client-Version muss dieselbe oder eine neuere Version als die folgenden Versionen sein:

  • Go-Version 0.15.7 und höher

  • Python-Version 12.0.0 und höher

  • Java-Version 9.0.0 und höher

  • JavaScript Version 0.10.3 und später

  • Ruby master-Branch

  • Haskell-Version 0.3.0.0

  • C# Version 7.0.5 und später

Sie können alle vorhandenen identifizieren Pods in Ihrem Cluster, die veraltete Token verwenden. Weitere Informationen finden Sie unter Kubernetes Dienstkonten.

Die EKS Amazon-Plattformversion liegt mehr als zwei Versionen hinter der aktuellen Plattformversion

Dies kann passieren, wenn Amazon die Plattformversion Ihres Clusters EKS nicht automatisch aktualisieren kann. Obwohl es dafür viele Ursachen gibt, folgen einige der häufigsten Ursachen. Wenn eines dieser Probleme auf Ihren Cluster zutrifft, funktioniert er möglicherweise immer noch, seine Plattformversion wird nur nicht von Amazon aktualisiertEKS.

Problem

Die IAMClusterrolle wurde gelöscht — Diese Rolle wurde bei der Erstellung des Clusters angegeben. Sie können mit dem folgenden Befehl überprüfen, welche Rolle angegeben wurde. Ersetzen my-cluster mit dem Namen Ihres Clusters.

aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2

Eine Beispielausgabe sieht wie folgt aus.

eksClusterRole
Lösung

Erstellen Sie eine neue IAMClusterrolle mit demselben Namen.

Problem

Ein bei der Clustererstellung festgelegtes Subnetz wurde gelöscht – Die mit dem Cluster zu verwendenden Subnetze wurden bei der Clustererstellung angegeben. Sie können mit dem folgenden Befehl überprüfen, welche Subnetze angegeben wurden. Ersetzen my-cluster mit dem Namen Ihres Clusters.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.subnetIds

Eine Beispielausgabe sieht wie folgt aus.

[ "subnet-EXAMPLE1", "subnet-EXAMPLE2" ]
Lösung

Bestätigen Sie, ob das Subnetz in Ihrem Konto IDs existiert.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"

Eine Beispielausgabe sieht wie folgt aus.

[ "subnet-EXAMPLE3", "subnet-EXAMPLE4" ]

Wenn das in der Ausgabe IDs zurückgegebene Subnetz nicht mit dem Subnetz übereinstimmtIDs, das bei der Erstellung des Clusters angegeben wurde, müssen Sie die vom Cluster verwendeten Subnetze ändern, wenn Sie möchten, dass Amazon EKS den Cluster aktualisiert. Das liegt daran, dass Amazon, wenn Sie bei der Erstellung Ihres Clusters mehr als zwei Subnetze angegeben haben, EKS nach dem Zufallsprinzip Subnetze auswählt, in denen Sie neue elastische Netzwerkschnittstellen erstellt haben. Diese Netzwerkschnittstellen ermöglichen es der Steuerebene, mit Ihren Knoten zu kommunizieren. Amazon aktualisiert den Cluster EKS nicht, wenn das ausgewählte Subnetz nicht existiert. Sie haben keine Kontrolle darüber, in welchem der Subnetze, die Sie bei der Cluster-Erstellung angegeben EKS haben, Amazon eine neue Netzwerkschnittstelle erstellt.

Wenn Sie eine initiieren Kubernetes Versionsupdate für Ihren Cluster, das Update kann aus demselben Grund fehlschlagen.

Problem

Eine bei der Clustererstellung angegebene Sicherheitsgruppe wurde gelöscht — Wenn Sie bei der Clustererstellung Sicherheitsgruppen angegeben haben, können Sie diese IDs mit dem folgenden Befehl einsehen. Ersetzen my-cluster mit dem Namen Ihres Clusters.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.securityGroupIds

Eine Beispielausgabe sieht wie folgt aus.

[ "sg-EXAMPLE1" ]

Wenn [] zurückgegeben wird, wurden beim Erstellen des Clusters keine Sicherheitsgruppen angegeben und eine fehlende Sicherheitsgruppe ist nicht das Problem. Wenn Sicherheitsgruppen zurückgegeben werden, vergewissern Sie sich, dass die Sicherheitsgruppen in Ihrem Konto vorhanden sind.

Lösung

Bestätigen Sie, ob diese Sicherheitsgruppen in Ihrem Konto vorhanden sind.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"

Eine Beispielausgabe sieht wie folgt aus.

[ "sg-EXAMPLE2" ]

Wenn die in der Ausgabe IDs zurückgegebene Sicherheitsgruppe nicht mit der Sicherheitsgruppe übereinstimmtIDs, die bei der Erstellung des Clusters angegeben wurde, müssen Sie die vom Cluster verwendeten Sicherheitsgruppen ändern, wenn Sie möchten, dass Amazon EKS den Cluster aktualisiert. Amazon aktualisiert einen Cluster EKS nicht, wenn die bei der Clustererstellung IDs angegebene Sicherheitsgruppe nicht existiert.

Wenn Sie eine initiieren Kubernetes Versionsupdate für Ihren Cluster, das Update kann aus demselben Grund fehlschlagen.

Andere Gründe, warum Amazon die Plattformversion Ihres Clusters EKS nicht aktualisiert
  • Sie haben nicht mindestens sechs verfügbare IP-Adressen (wir empfehlen jedoch 16) in jedem der Subnetze, die Sie bei der Erstellung Ihres Clusters angegeben haben. Wenn Sie nicht über genügend verfügbare IP-Adressen im Subnetz verfügen, müssen Sie entweder IP-Adressen im Subnetz freigeben oder die vom Cluster verwendeten Subnetze ändern, um Subnetze mit genügend verfügbaren IP-Adressen zu verwenden.

  • Sie haben die Verschlüsselung von Geheimnissen aktiviert, als Sie Ihren Cluster erstellt haben, und der von Ihnen angegebene AWS KMS Schlüssel wurde gelöscht. Wenn Sie möchtenEKS, dass Amazon den Cluster aktualisiert, müssen Sie einen neuen Cluster erstellen.

FAQsCluster-Integritäts- und Fehlercodes mit Lösungspfaden

Amazon EKS erkennt Probleme mit Ihren EKS Clustern und der Cluster-Infrastruktur und speichert sie im Cluster-Status. Mithilfe von Cluster-Integritätsinformationen können Sie Cluster-Probleme schneller erkennen, behandeln und beheben. Auf diese Weise können Sie Anwendungsumgebungen erstellen, die sicherer und sicherer sind up-to-date. Darüber hinaus ist es für Sie möglicherweise unmöglich, auf neuere Versionen von zu aktualisieren Kubernetes oder für AmazonEKS, um Sicherheitsupdates auf einem heruntergestuften Cluster zu installieren, der aufgrund von Problemen mit der erforderlichen Infrastruktur oder Clusterkonfiguration beeinträchtigt wurde. Es EKS kann 3 Stunden dauern, bis Amazon Probleme erkennt oder feststellt, dass ein Problem gelöst wurde.

Die Integrität eines EKS Amazon-Clusters liegt in der gemeinsamen Verantwortung von Amazon EKS und seinen Benutzern. Sie sind verantwortlich für die erforderliche Infrastruktur von IAM Rollen und VPC Amazon-Subnetzen sowie für andere notwendige Infrastrukturen, die im Voraus bereitgestellt werden müssen. Amazon EKS erkennt Änderungen an der Konfiguration dieser Infrastruktur und des Clusters.

Um in der EKS Amazon-Konsole auf den Status Ihres Clusters zuzugreifen, suchen Sie auf der Registerkarte Übersicht der EKS Amazon-Cluster-Detailseite nach einem Abschnitt mit dem Namen Health Issues. Diese Daten sind auch verfügbar, wenn Sie die DescribeCluster Aktion im aufrufen EKSAPI, z. B. von der aus AWS Command Line Interface.

Warum sollte ich diese Funktion verwenden?

Sie erhalten einen besseren Überblick über den Zustand Ihres EKS Amazon-Clusters und können Probleme schnell diagnostizieren und beheben, ohne Zeit mit dem Debuggen oder dem Öffnen von AWS Supportanfragen verbringen zu müssen. Beispiel: Sie haben versehentlich ein Subnetz für den EKS Amazon-Cluster gelöscht, Amazon kann EKS keine kontoübergreifenden Netzwerkschnittstellen erstellen und Kubernetes AWS CLI Befehle wie kubectl Exec oder kubectl Logs. Diese werden mit dem Fehler fehlschlagen: Error from server: error dialing backend: remote error: tls: internal error. Jetzt wird ein EKS Amazon-Gesundheitsproblem angezeigt, das besagt:subnet-da60e280 was deleted: could not create network interface.

In welcher Beziehung steht diese Funktion zu anderen AWS Diensten oder funktioniert mit ihnen?

IAMRollen und VPC Amazon-Subnetze sind zwei Beispiele für eine vorausgesetzte Infrastruktur, bei der Cluster Health Probleme erkennt. Diese Funktion gibt detaillierte Informationen zurück, wenn diese Ressourcen nicht ordnungsgemäß konfiguriert sind.

Fallen für Cluster mit Integritätsproblemen Gebühren an?

Ja, jeder EKS Amazon-Cluster wird zum EKS Amazon-Standardpreis abgerechnet. Die Funktion Cluster-Integrität steht ohne Aufpreis zur Verfügung.

Funktioniert diese Funktion bei aktivierten EKS Amazon-Clustern AWS Outposts?

Ja, Clusterprobleme wurden bei EKS Clustern in der AWS Cloud erkannt, einschließlich erweiterter Cluster AWS Outposts und eingeschalteter lokaler Cluster AWS Outposts. Der Clusterstatus erkennt keine Probleme mit Amazon EKS Anywhere oder Amazon EKS Distro (EKS-D).

Kann ich benachrichtigt werden, wenn neue Probleme erkannt werden?

Nein, Sie müssen in der EKS Amazon-Konsole nachschauen oder die anrufen EKS DescribeClusterAPI.

Werden in der Konsole Warnungen im Zusammenhang mit Integritätsproblemen ausgegeben?

Ja. Cluster mit Problemen verfügen über ein Banner im oberen Bereich der Konsole.

Die ersten beiden Spalten werden für API Antwortwerte benötigt. Das dritte Feld des ClusterIssueHealth-Objekts ist resourceIds, dessen Rückgabe vom Typ des Problems abhängt.

Code Fehlermeldung ResourceIds Cluster wiederherstellbar?

SUBNET_NOT_FOUND

We couldn't find one or more subnets currently associated with your cluster. Rufen Sie Amazon an EKS update-cluster-config APIum Subnetze zu aktualisieren.

Subnetz-IDs Ja
SECURITY_GROUP_NOT_FOUND We couldn't find one or more security groups currently associated with your cluster. Rufen Sie Amazon EKS update-cluster-config API an, um Sicherheitsgruppen zu aktualisieren Sicherheitsgruppen-IDs Ja
IP_NOT_AVAILABLE In einem oder mehreren der mit Ihrem Cluster verknüpften Subnetze sind nicht genügend IP-Adressen verfügbar, damit Amazon EKS Cluster-Management-Operationen durchführen kann. Geben Sie Adressen in den Subnetzen frei oder ordnen Sie Ihrem Cluster mithilfe von Amazon verschiedene Subnetze zu. EKS update-cluster-config API Subnetz-IDs Ja
VPC_NOT_FOUND Wir konnten die mit Ihrem Cluster VPC verknüpften Dateien nicht finden. You must delete and recreate your cluster. VPCid Nein
ASSUME_ROLE_ACCESS_DENIED Ihr Cluster verwendet Amazon nicht EKS service-linked-role. Wir konnten die Ihrem Cluster zugeordnete Rolle nicht übernehmen, um die erforderlichen EKS Amazon-Verwaltungsvorgänge durchzuführen. Check the role exists and has the required trust policy. Die IAM Cluster-Rolle Ja

PERMISSION_ACCESS_DENIED

Ihr Cluster verwendet Amazon nicht EKS service-linked-role. Die Ihrem Cluster zugeordnete Rolle gewährt Amazon nicht genügend BerechtigungenEKS, um die erforderlichen Verwaltungsvorgänge durchzuführen. Check the policies attached to the cluster role and if any separate deny policies are applied. Die IAM Cluster-Rolle Ja

ASSUME_ROLE_ACCESS_DENIED_USING_SLR

Wir konnten das EKS Amazon-Clustermanagement nicht übernehmen service-linked-role. Check the role exists and has the required trust policy. Der Amazon EKS service-linked-role Ja

PERMISSION_ACCESS_DENIED_USING_SLR

Die EKS Amazon-Clusterverwaltung gewährt Amazon service-linked-role nicht genügend BerechtigungenEKS, um die erforderlichen Verwaltungsvorgänge durchzuführen. Check the policies attached to the cluster role and if any separate deny policies are applied.

Der Amazon EKS service-linked-role

Ja

OPT_IN_REQUIRED

Ihr Konto hat kein EC2 Amazon-Serviceabonnement. Update your account subscriptions in your account settings page.

N/A Ja

STS_REGIONAL_ENDPOINT_DISABLED

Das Tool STS Der regionale Endpunkt ist deaktiviert. Aktivieren Sie den Endpunkt, damit Amazon EKS die erforderlichen Clusterverwaltungsvorgänge ausführen kann.

N/A Ja

KMS_KEY_DISABLED

Der mit Ihrem Cluster verknüpfte AWS KMS Schlüssel ist deaktiviert. Re-enable the key to recover your cluster.

Das Tool KMS Key Arn

Ja

KMS_KEY_NOT_FOUND

Wir konnten den mit Ihrem Cluster verknüpften AWS KMS Schlüssel nicht finden. You must delete and recreate the cluster.

Das Tool KMS Key ARN

Nein

KMS_GRANT_REVOKED

Zuschüsse für den mit Ihrem Cluster verknüpften AWS KMS Schlüssel wurden widerrufen. You must delete and recreate the cluster.

Das Tool KMS Key Arn

Nein