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

Lesedauer: 8 Minute
0

Meine Worker-Knoten treten meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster nicht bei. Ich möchte dieses Problem beheben.

Behebung

Gehe wie folgt vor, um Worker-Knoten mit deinem Amazon-EKS-Cluster zu verbinden.

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 Virtual Private Cloud (VPC) für den Cluster ist der Konfigurationsparameter domain-name-servers auf AmazonProvidedDNS festgelegt. Weitere Informationen findest du unter DHCP-Optionssätze in Amazon Virtual Private Cloud (Amazon VPC).
  • Du verwendest ein Amazon-EKS-optimiertes Linux Amazon Machine Image (AMI), um die Worker-Knoten zu starten. 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.

Verwendung des Automatisierungs-Runbooks des Systems Managers, um häufig auftretende Probleme zu identifizieren

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

Wichtig: Um sicherzustellen, dass die Automatisierung ordnungsgemäß funktioniert, muss AWS Systems Manager ausgeführt werden, und die Worker-Knoten müssen die Berechtigung haben, auf Systems Manager zuzugreifen. Um AWS Systems Manager eine Zugriffsberechtigung zu gewähren, füge die AmazonSSMManagedInstanceCore-Richtlinie der AWS Identity and Access Management (IAM)-Rolle hinzu. Diese IAM-Rolle entspricht deinem Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Profil. Diese Konfiguration ist auch der Standard für von Amazon EKS verwaltete Knotengruppen, die du über eksctl erstellst.

Verwende das folgende Format für den Clusternamen: [-a-zA-Z0-9]{1,100}$.

Führe die folgenden Schritte aus:

  1. Öffne das Runbook.
  2. Vergewissere dich, dass die AWS-Region in der AWS-Managementkonsole auf dieselbe Region wie dein Cluster eingestellt ist.
    Hinweis: Weitere Informationen zum Runbook findest du im Abschnitt Dokumentdetails des Runbook.
  3. Gib im Abschnitt Eingabeparameter den Namen des Clusters im Feld ClusterName und die Amazon EC2-Instance-ID im Feld WorkerID an.
  4. (Optional) Gib im Feld AutomationAssumeRole die IAM-Rolle an, die den Systems Manager Aktionen ausführen lässt. Wenn du diese nicht angibst, werden die IAM-Berechtigungen deiner aktuellen IAM-Entität verwendet, um die Aktionen im Runbook auszuführen.
  5. Wähle Ausführen.
  6. Sieh im Abschnitt Ausgaben nach, warum dein Worker-Knoten deinem Cluster nicht beitritt, und überprüfe die Schritte, die du unternehmen kannst, um das Problem zu lösen.

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

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

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

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

Weitere Informationen findest du unter Anzeigen und Aktualisieren von DNS-Attributen für deine VPC.

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

Hänge 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 findest du unter Hinzufügen von IAM-Identitätsberechtigungen (Konsole).

Die Benutzerdaten für die Worker-Knoten konfigurieren

Hinweis: Wenn du AWS CloudFormation verwendest, um die Worker-Knoten zu starten, musst du die Benutzerdaten für die Worker-Knoten nicht konfigurieren. Folge stattdessen den Anweisungen zum Starten selbstverwalteter Amazon-Linux-Knoten in der AWS-Managementkonsole.

Wenn du Knotengruppen verwendest, um deine Worker-Knoten zu starten, musst du keine Benutzerdaten mit von Amazon EKS optimierten Amazon-Linux-AMIs konfigurieren. Du musst die Benutzerdaten nur konfigurieren, wenn du benutzerdefinierte AMIs verwendest, um die Worker-Knoten über verwaltete Knotengruppen zu starten.

Wenn du von Amazon verwaltete Knotengruppen mit einer benutzerdefinierten Startvorlage verwendest, gib in der Startvorlage die richtigen Benutzerdaten an. Wenn der Amazon-EKS-Cluster ein vollständig privater Cluster ist, der VPC-Endpunkte verwendet, um Verbindungen herzustellen, gib in den Benutzerdaten Folgendes an:

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

Falls erforderlich, gib 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, gib die Benutzerdaten an, wenn du die Amazon EC2-Instances startest.

Wenn du beispielsweise ein Drittanbieter-Tool wie Terraform verwendest, aktualisiere das Feld Benutzerdaten, um die EKS-Worker-Knoten zu starten:

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

Wichtig:

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

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

  • Wenn du ein Internet-Gateway verwendest, stelle sicher, dass es korrekt an die Routing-Tabelle angehängt ist, ohne dass eine Umleitung auf eine Null-Route erfolgt.
  • Wenn du ein NAT-Gateway verwendest, stelle sicher, dass es in einem öffentlichen Subnetz korrekt konfiguriert ist. Stelle außerdem sicher, dass die Routing-Tabelle keine Null-Route enthält.
  • Wenn du private VPC-Endpunkte für ein vollständig privates Cluster verwendest, stelle sicher, dass du über die folgenden Endpunkte verfügst:
    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 du mit IAM-Rollen für Servicekonten konfigurierst, erhalten Anmeldeinformationen über einen API-Aufruf von AWS Security Token Service (AWS STS). Wenn kein ausgehender Internetzugang besteht, musst du 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 findest du unter Datenverkehr zu deinen AWS-Ressourcen mithilfe von Sicherheitsgruppen steuern.
  • Stelle sicher, dass die Richtlinie, die an den VPC-Endpunkt angehängt ist, über die erforderlichen Berechtigungen verfügt.

Hinweis: Wenn du einen anderen AWS-Service verwendest, musst du diese Endpunkte erstellen. Einen Überblick über einige häufig verwendete Dienste und Endpunkte findest du unter Bereitstellen von privaten Clustern mit eingeschränktem Internetzugang. Du kannst zudem deinem Anwendungsfall entsprechend einen Endpunktdienst erstellen.

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

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-EKS-Konsole.
  2. Wähle Cluster und dann dein Cluster aus.
  3. Suche im Abschnitt Netzwerk nach den Subnetzen, die dem Cluster zugeordnet sind.

Hinweis: Du kannst 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 du bei der Cluster-Erstellung konfigurierst. Stelle daher sicher, dass du die Subnetze entsprechend kennzeichnest.

Weitere Informationen findest du unter Anforderungen und Überlegungen zu Subnetzen.

Aktualisieren der ConfigMap aws-auth mit der NodeInstanceRole deiner Worker-Knoten

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

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

kubectl describe configmap -n kube-system aws-auth

Wenn die ConfigMap aws-auth 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

Vergewissere dich, 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. Stelle 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

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

Weitere Informationen findest du unter Anforderungen und Überlegungen zu VPCs.

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

Stelle sicher, dass du Worker-Knoten in einem Subnetz starten kannst, das einer Routing-Tabelle zugeordnet ist. Die Routing-Tabelle muss über ein NAT- oder Internet-Gateway zum API-Endpunkt weitergeleitet werden.

Wenn du die Worker-Knoten in einem eingeschränkten privaten Netzwerk startest, stelle sicher, dass die Worker-Knoten den EKS-API-Serverendpunkt erreichen können.

Wenn du Worker-Knoten mit einer Amazon VPC startest, die ein benutzerdefiniertes DNS anstelle eines AmazonProvidedDNS verwenden, lösen die Knoten 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 findest du unter Aktivieren der DNS-Auflösung für Amazon EKS-Cluster-Endpunkte.

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

Der 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, wie im folgenden Beispiel gezeigt:

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

Weitere Informationen findest du unter Amazon-EKS-Cluster-IAM-Rolle.

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

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

Überprüfen, 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, stelle 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.

Führe den folgenden Befehl aus, um die kubelet-Protokolle zu validieren:

journalctl -f -u kubelet

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

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

Du kannst die Protokolldateien und Betriebssystemprotokolle verwenden, um die Probleme im Amazon EKS zu beheben.

Du musst 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

Ähnliche Informationen

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