Wie kann ich meine Worker-Knoten dazu bringen, meinem Amazon EKS-Cluster beizutreten?

Lesedauer: 9 Minute
0

Meine Worker-Knoten treten meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster nicht bei.

Kurzbeschreibung

Gehen Sie wie folgt vor, um Worker-Knoten dazu zu bringen, dem Amazon EKS-Cluster beizutreten:

  • Verwenden Sie das AWS Systems Manager Automation-Runbook, um häufig auftretende Probleme zu ermitteln.
  • Vergewissern Sie sich, dass Sie über DNS-Unterstützung für die Amazon Virtual Private Cloud (Amazon VPC) verfügen.
  • Vergewissern Sie sich, dass die Worker-Knoten Ihres Instance-Profils über die richtigen Berechtigungen verfügen.
  • Konfigurieren Sie die Benutzerdaten für die Worker-Knoten.
  • Stellen Sie sicher, dass das Netzwerk für die Amazon VPC-Subnetze korrekt konfiguriert ist.
  • Stellen Sie sicher, dass sich die Worker-Knoten in derselben VPC wie das EKS-Cluster befinden.
  • Aktualisieren Sie die aws-auth ConfigMap mit der NodeInstanceRole der Worker-Knoten.
  • Erfüllen Sie die Sicherheitsgruppenanforderungen der Worker-Knoten.
  • Legen Sie die Tags für die Worker-Knoten fest.
  • Vergewissern Sie sich, dass die Worker-Knoten den API-Serverendpunkt für das EKS-Cluster erreichen können.
  • Vergewissern Sie sich, dass die Clusterrolle Ihres EKS-Clusters korrekt konfiguriert ist.
  • Stellen Sie für AWS-Regionen, die AWS Security Token Service (AWS STS)-Endpunkte unterstützen, sicher, dass der regionale AWS STS-Endpunkt aktiviert ist.
  • Stellen Sie sicher, dass das AMI für die Verwendung mit Amazon EKS konfiguriert ist und die erforderlichen Komponenten enthält.
  • Verwenden Sie SSH, um eine Verbindung zur Amazon Elastic Compute Cloud (Amazon EC2)-Instance des Worker-Knotens herzustellen, und durchsuchen Sie dann die kubelet-Agent-Protokolle nach Fehlern.
  • Verwenden Sie das Collector-Skript des Amazon EKS-Protokolls, um Fehler zu beheben.

Wichtig: Die folgenden Schritte beinhalten keine Konfigurationen, die für die Registrierung von Worker-Knoten in Umgebungen erforderlich sind, in denen die folgenden Kriterien nicht erfüllt sind:

  • In der VPC für das Cluster ist der Konfigurationsparameter domain-name-servers auf AmazonProvidedDNS festgelegt. Weitere Informationen finden Sie unter DHCP-Optionssätze.
  • Sie verwenden ein Amazon EKS-optimiertes Linux Amazon Machine Image (AMI), um die Worker-Knoten zu starten.
    Hinweis: Das für Amazon EKS optimierte Linux AMI bietet alle erforderlichen Konfigurationen, einschließlich eines /etc/eks/bootstrap.sh-Bootstrap-Skripts, um Worker-Knoten im Cluster zu registrieren.

Behebung

Das Systems Manager Automation-Runbook verwenden, um häufig auftretende Probleme zu identifizieren

Verwenden Sie das AWSSupport-TroubleshootEKSWorkerNode-Runbook, um häufig auftretende Probleme zu finden, die verhindern, dass Worker-Knoten dem Cluster beitreten.

Wichtig: Damit die Automatisierung funktioniert, müssen die Worker-Knoten berechtigt sein, auf Systems Manager zuzugreifen und Systems Manager auszuführen. Um diese Berechtigung zu gewähren, fügen Sie die AmazonSSMManagedInstanceCore-Richtlinie der AWS Identity and Access Management (IAM)-Rolle hinzu. Dies ist die IAM-Rolle, die Ihrem Amazon EC2-Instance-Profil entspricht. Dies ist die Standardkonfiguration für von Amazon EKS verwaltete Knotengruppen, die Sie über eksctl erstellen. Verwenden Sie das folgende Format für den Clusternamen: [-a-zA-Z0-9]{1,100}$.

  1. Öffnen sie das Runbook.
  2. Vergewissern Sie sich, dass die AWS-Region in der AWS-Managementkonsole der Region entspricht, die für das Cluster eingestellt ist.
    Hinweis: Weitere Informationen zum Runbook finden Sie im Abschnitt Dokumentdetails des Runbook.
  3. Geben Sie im Abschnitt Eingabeparameter den Namen des Clusters im Feld ClusterName und die Amazon EC2-Instance-ID im Feld WorkerID an.
  4. (Optional) Geben Sie im Feld AutomationAssumeRole die IAM-Rolle an, die den Systems Manager Aktionen ausführen lässt. Wenn Sie diese nicht angeben, werden die IAM-Berechtigungen Ihrer aktuellen IAM-Entität verwendet, um die Aktionen im Runbook auszuführen.
  5. Wählen Sie Ausführen aus.
  6. Sehen Sie im Abschnitt Ausgaben nach, warum der Worker-Knoten dem Cluster nicht beitritt und welche Schritte Sie unternehmen können, um das Problem zu lösen.

Prüfen, ob DNS-Unterstützung für die Amazon VPC verfügbar ist

Vergewissern Sie sich, dass für die Amazon VPC des EKS-Clusters DNS-Hostnamen und DNS-Auflösung aktiviert sind.

Gehen Sie wie folgt vor, um diese Attribute zu überprüfen und zu aktivieren:

  1. Öffnen Sie die Amazon VPC-Konsole.
  2. Wählen Sie im Navigationsbereich Ihre VPCs aus.
  3. Wählen Sie die VPC aus, die Sie bearbeiten möchten.
  4. Überprüfen Sie auf der Registerkarte Details, ob DNS-Hostnamen und DNS-Auflösung aktiviert sind.
  5. Wenn sie nicht aktiviert sind, wählen Sie für beide Attribute die Option Aktivieren aus.
  6. Wählen Sie Änderungen speichern aus.

Weitere Informationen finden Sie unter DNS-Attribute für Ihre VPC anzeigen und aktualisieren.

Sicherstellen, dass die Worker-Knoten des Instance-Profils über die richtigen Berechtigungen verfügen

Hängen Sie der Rolle, die den Worker-Knoten des Instance-Profils zugeordnet ist, die folgenden von AWS verwalteten Richtlinien an:

  • AmazonEKSWorkerNodePolicy
  • AmazonEKS_CNI_Policy
  • AmazonEC2ContainerRegistryReadOnly

Informationen zum Anhängen von Richtlinien an Rollen finden Sie unter Hinzufügen von IAM-Identitätsberechtigungen (Konsole).

Die Benutzerdaten für die Worker-Knoten konfigurieren

Hinweis: Wenn Sie AWS CloudFormation verwenden, um die Worker-Knoten zu starten, müssen Sie die Benutzerdaten für die Worker-Knoten nicht konfigurieren. Folgen Sie stattdessen den Anweisungen zum Starten selbstverwalteter Amazon Linux-Knoten in der AWS-Managementkonsole.

Wenn Sie die Worker-Knoten mithilfe verwalteter Knotengruppen starten, müssen Sie keine Benutzerdaten mit Amazon EKS-optimierten Amazon Linux-AMIs konfigurieren. Sie müssen die Benutzerdaten nur konfigurieren, wenn Sie benutzerdefinierte AMIs verwenden, um die Worker-Knoten über verwaltete Knotengruppen zu starten.

Wenn Sie von Amazon verwaltete Knotengruppen mit benutzerdefinierter Startvorlage verwenden, geben Sie in der Startvorlage die richtigen Benutzerdaten an. Wenn das Amazon EKS-Cluster ein vollständig privates Cluster ist, das VPC-Endpunkte verwendet, um Verbindungen herzustellen, geben Sie in den Benutzerdaten Folgendes an:

  • certificate-authority
  • api-server-endpoint
  • DNS-Cluster-IP

Falls erforderlich, geben Sie Benutzerdaten an, um Argumente an die Datei bootstrap.sh zu übergeben, die in einem für Amazon EKS optimierten Linux/Bottlerocket-AMI enthalten ist.

Um Benutzerdaten für die Worker-Knoten zu konfigurieren, geben Sie die Benutzerdaten an, wenn Sie die Amazon EC2-Instances starten.

Wenn Sie beispielsweise ein Drittanbieter-Tool wie Terraform verwenden, aktualisieren Sie das Feld Benutzerdaten, um die EKS-Worker-Knoten zu starten:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

Wichtig:

  • Ersetzen Sie ${ClusterName} durch den Namen des EKS-Clusters.
  • Ersetzen Sie ${BootstrapArguments} durch zusätzliche Bootstrap-Werte oder lassen Sie diese Eigenschaft leer.

Sicherstellen, dass das Netzwerk für die Amazon VPC-Subnetze korrekt konfiguriert ist

  • Wenn Sie ein Internet-Gateway verwenden, stellen Sie sicher, dass es korrekt und ohne Blackhole an die Routing-Tabelle angehängt ist.
  • Wenn Sie ein NAT-Gateway verwenden, stellen Sie sicher, dass es in einem öffentlichen Subnetz korrekt konfiguriert ist. Stellen Sie außerdem sicher, dass die Routing-Tabelle kein Blackhole enthält.
  • Wenn Sie private VPC-Endpunkte für ein vollständig privates Cluster verwenden, stellen Sie sicher, dass Sie über die folgenden Endpunkte verfügen:
    com.amazonaws.region.ec2 (Schnittstellenendpunkt)
    com.amazonaws.region.ecr.api (Schnittstellenendpunkt)
    com.amazonaws.region.ecr.dkr (Schnittstellenendpunkt)
    com.amazonaws.region.s3 (Gateway-Endpunkt)
    com.amazonaws.region.sts (Schnittstellenendpunkt)
  • Pods, die Sie mit IAM-Rollen für Servicekonten konfigurieren, erhalten Anmeldeinformationen über einen API-Aufruf von AWS Security Token Service (AWS STS). Wenn kein ausgehender Internetzugang besteht, müssen Sie einen AWS STS VPC-Endpunkt in der VPC erstellen und verwenden.
  • Die Sicherheitsgruppe für den VPC-Endpunkt muss über eine Regel für eingehenden Datenverkehr verfügen, die den Datenverkehr von Port 443 zulässt. Weitere Informationen finden Sie unter Steuern des Datenverkehrs zu Ressourcen mithilfe von Sicherheitsgruppen.
  • Stellen Sie sicher, dass die Richtlinie, die an den VPC-Endpunkt angehängt ist, über die erforderlichen Berechtigungen verfügt.

Hinweis: Wenn Sie einen anderen AWS-Service verwenden, müssen Sie diese Endpunkte erstellen. Informationen zu einigen häufig verwendeten Diensten und Endpunkten finden Sie unter Anforderungen an private Cluster. Sie können zudem Ihrem Anwendungsfall entsprechend einen Endpunktdienst erstellen.

Sicherstellen, dass sich die Worker-Knoten in derselben Amazon VPC befinden wie das EKS-Cluster

  1. Öffnen Sie die Amazon-EKS-Konsole.
  2. Wählen Sie Cluster und dann Ihr Cluster aus.
  3. Suchen Sie im Abschnitt Netzwerk nach den Subnetzen, die dem Cluster zugeordnet sind.

Hinweis: Sie können verschiedene Subnetze konfigurieren, in denen die Worker-Knoten gestartet werden. Die Subnetze müssen in derselben Amazon VPC existieren und entsprechend gekennzeichnet sein. Amazon EKS verwaltet automatisch Tags nur für Subnetze, die Sie bei der Cluster-Erstellung konfigurieren. Stellen Sie daher sicher, dass Sie die Subnetze entsprechend kennzeichnen.

Weitere Informationen finden Sie unter Anforderungen und Überlegungen zu Subnetzen.

Die aws-auth ConfigMap mit der NodeInstanceRole der Worker-Knoten aktualisieren

Stellen Sie sicher, dass die aws-auth ConfigMap korrekt mit der IAM-Rolle des Worker-Knotens und nicht mit dem Instance-Profil konfiguriert ist.

Führen Sie den folgenden Befehl aus, um die aws-auth ConfigMap-Datei zu überprüfen:

kubectl describe configmap -n kube-system aws-auth

Wenn die aws-auth ConfigMap nicht richtig konfiguriert ist, wird der folgende Fehler angezeigt:

571 reflector.go:153\] k8s.io/kubernetes/pkg/kubelet/kubelet.go:458 : Failed to list \*v1.Node: Unauthorized

Die Sicherheitsgruppenanforderungen der Worker-Knoten erfüllen

Vergewissern Sie sich, dass die Sicherheitsgruppe und die Worker-Knoten-Sicherheitsgruppe der Steuerebene mit Einstellungen konfiguriert sind, die als bewährte Methoden für eingehenden und ausgehenden Datenverkehr gelten. Stellen Sie außerdem sicher, dass die benutzerdefinierten Netzwerk-ACL-Regeln so konfiguriert sind, dass sie Datenverkehr von und zu 0.0.0.0/0 für die Ports 80, 443 und 1025-65535 zulassen.

Tags für die Worker-Knoten festlegen

Legen Sie für die Tag-Eigenschaft der Worker-Knoten Key auf kubernetes.io/cluster/clusterName und Value auf owned fest.

Weitere Informationen finden Sie unter Anforderungen und Überlegungen zu VPCs.

Sicherstellen, dass die Worker-Knoten den API-Serverendpunkt für das EKS-Cluster erreichen können

Beachten Sie die folgenden Tipps:

  • Sie können Worker-Knoten in einem Subnetz starten, das mit einer Routing-Tabelle verknüpft ist, die über ein NAT- oder Internet-Gateway zum API-Endpunkt leitet.
  • Wenn Sie die Worker-Knoten in einem eingeschränkten privaten Netzwerk starten, stellen Sie sicher, dass die Worker-Knoten den EKS-API-Serverendpunkt erreichen können.
  • Wenn Sie Worker-Knoten mit einer Amazon VPC starten, die ein benutzerdefiniertes DNS anstelle von AmazonProvidedDNS verwendet, lösen sie den Endpunkt möglicherweise nicht auf. Ein ungelöster Endpunkt liegt vor, wenn der öffentliche Zugriff auf den Endpunkt deaktiviert und nur der private Zugriff aktiviert ist. Weitere Informationen finden Sie unter Aktivieren der DNS-Auflösung für Amazon EKS-Cluster-Endpunkte.

Sicherstellen, dass die Clusterrolle für das Cluster korrekt konfiguriert ist

Das Cluster muss über die Cluster-Rolle mit der Mindestberechtigung AmazonEKSClusterPolicy verfügen. Außerdem muss das Vertrauensverhältnis des Clusters den Dienst eks.amazonaws.com für sts:AssumeRole zulassen.

Beispiel:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  \]
}

Weitere Informationen finden Sie unter Amazon EKS-Cluster-IAM-Rolle.

Bestätigen, dass die regionalen STS-Endpunkte aktiviert sind

Wenn sich das Cluster in einer Region befindet, die STS-Endpunkte unterstützt, aktivieren Sie den regionalen STS-Endpunkt, um das kubelet zu authentifizieren. Das kubelet kann dann das Knotenobjekt erstellen.

Sicherstellen, dass das AMI für die Verwendung mit EKS konfiguriert ist und die erforderlichen Komponenten enthält

Wenn das für Worker-Knoten verwendete AMI nicht das für Amazon EKS optimierte Amazon Linux-AMI ist, stellen Sie sicher, dass sich die folgenden Kubernetes-Komponenten im aktiven Zustand befinden:

  • kurbelt
  • AWS IAM Authenticator
  • Docker (Amazon EKS Version 1.23 und früher)
  • containerd

Mit SSH eine Verbindung zur EKS-Worker-Knoten-Instance herstellen und die kubelet-Agent-Protokolle überprüfen

Der kubelet-Agent ist als systemd-Dienst konfiguriert.

1.    Führen Sie den folgenden Befehl aus, um die kubelet-Protokolle zu validieren:

journalctl -f -u kubelet

2.    Um Probleme zu lösen, durchsuchen Sie die Amazon EKS-Anleitung zur Problembehebung nach häufigen Fehlern.

Das Collector-Skript des Amazon EKS-Protokolls verwenden, um Fehler zu beheben

Sie können die Protokolldateien und Betriebssystemprotokolle verwenden, um die Probleme im Amazon EKS zu beheben.

Sie müssen SSH verwenden, um eine Verbindung zum Worker-Knoten mit dem Problem herzustellen und das folgende Skript auszufü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

Relevante Informationen

Wie behebe ich Fehler bei der Erstellung von Amazon EKS-verwalteten Knoten-Gruppen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr