Unterstützung für die Verbesserung dieser Seite beitragen
Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.
Hybridknoten mit Bottlerocket verbinden
In diesem Thema wird beschrieben, wie Sie Hybridknoten, auf denen Bottlerocket ausgeführt wird, mit einem Amazon-EKS-Cluster verbinden. Bottlerocket
Nur VMware-Varianten von Bottlerocket Version v1.37.0 und höher werden mit EKS-Hybridknoten unterstützt. VMware-Varianten von Bottlerocket sind für Kubernetes-Versionen ab v1.28 verfügbar. Die Betriebssystem-Images für diese Varianten umfassen Kubelet, Containerd, AWS IAM Authenticator und andere Software-Voraussetzungen für EKS Hybridknoten. Sie können diese Komponenten mithilfe einer Bottlerocket-EinstellungsdateiNot Ready in der Amazon-EKS-Konsole und in Kubernetes-kompatiblen Tools wie kubectl angezeigt. Nachdem Sie die Schritte auf dieser Seite abgeschlossen haben, fahren Sie mit CNI für Hybridknoten konfigurieren fort, um Ihre Hybridknoten für die Ausführung von Anwendungen vorzubereiten.
Voraussetzungen
Bevor Sie Hybridknoten mit Ihrem Amazon-EKS-Cluster verbinden, stellen Sie sicher, dass Sie die erforderlichen Schritte abgeschlossen haben.
-
Sie verfügen über eine Netzwerkverbindung von Ihrer On-Premises-Umgebung zu der AWS-Region, in der Ihr Amazon-EKS-Cluster gehostet wird. Weitere Informationen finden Sie unter Vorbereitung der Vernetzung für Hybridknoten.
-
Sie haben Ihre IAM-Rolle für Hybridknoten erstellt und Ihren On-Premises-Anmeldeinformationsanbieter (AWS-Systems-Manager-Hybridaktivierungen oder AWS IAM Roles Anywhere) eingerichtet. Weitere Informationen finden Sie unter Vorbereitung der Anmeldeinformationen für Hybridknoten.
-
Sie haben Ihren für Hybridknoten aktivierten Amazon-EKS-Cluster erstellt. Weitere Informationen finden Sie unter Einen Amazon-EKS-Cluster mit Hybridknoten erstellen.
-
Sie haben Ihre Hybridknoten-IAM-Rolle den Berechtigungen der rollenbasierten Zugriffssteuerung (RBAC) von Kubernetes zugeordnet. Weitere Informationen finden Sie unter Vorbereitung des Cluster-Zugriffs für Hybridknoten.
Schritt 1: TOML-Datei für die Bottlerocket-Einstellungen erstellen
Um Bottlerocket für Hybridknoten zu konfigurieren, ist es erforderlich, eine settings.toml-Datei mit der notwendigen Konfiguration zu erstellen. Der Inhalt der TOML-Datei unterscheidet sich je nach verwendetem Anmeldeinformationsanbieter (SSM oder IAM Roles Anywhere). Diese Datei wird bei der Bereitstellung der Bottlerocket-Instance als Benutzerdaten übermittelt.
SSM
Wenn Sie AWS Systems Manager als Anmeldeinformationsanbieter verwenden, erstellen Sie eine settings.toml-Datei mit dem folgenden Inhalt:
[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "ssm" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>" [settings.host-containers.control] enabled = true
Ersetzen Sie die Platzhalter durch die folgenden Werte:
-
<cluster-name>: Der Name Ihres Amazon-EKS-Clusters. -
<api-server-endpoint>: Der API-Server-Endpunkt Ihres Clusters. -
<cluster-certificate-authority>: Das base64-codierte CA-Paket Ihres Clusters. -
<region>: Die AWS-Region, in der Ihr Cluster gehostet wird, z. B. „us-east-1“. -
<hostname>: Der Host-Name der Bottlerocket-Instance, der auch als Knotenname konfiguriert wird. Dies kann ein beliebiger eindeutiger Wert Ihrer Wahl sein, muss jedoch den Benennungskonventionen für Kubernetes-Objekteentsprechen. Außerdem darf der von Ihnen verwendete Hostname nicht länger als 64 Zeichen sein. HINWEIS: Bei Verwendung des SSM-Anbieters werden dieser Host-Name und der Knotenname nach der Registrierung der Instance bei SSM durch die ID der verwalteten Instance (z. B. mi-*-ID) ersetzt. -
<base64-encoded-admin-container-userdata>: Der Base64-codierte Inhalt der Bottlerocket-Admin-Container-Konfiguration. Durch Aktivieren des Admin-Containers können Sie zur Systemerkundung und zum Debuggen per SSH eine Verbindung zu Ihrer Bottlerocket-Instance herstellen. Obwohl dies keine erforderliche Einstellung ist, empfehlen wir, sie zur einfacheren Fehlerbehebung zu aktivieren. Weitere Informationen zur Authentifizierung mit dem Admin-Container finden Sie in der Dokumentation zum Bottlerocket-Admin-Container. Der Admin-Container akzeptiert SSH-Benutzer- und Schlüsseleingaben im JSON-Format, zum Beispiel:
{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
-
<base64-encoded-bootstrap-container-userdata>: Der Base64-codierte Inhalt der Bottlerocket-Bootstrap-Container-Konfiguration. Weitere Informationen zur Konfiguration finden Sie in der Dokumentation zum Bottlerocket-Bootstrap-Container. Der Bootstrap-Container ist dafür verantwortlich, die Instance als AWS SSM Managed Instance zu registrieren und sie als Kubernetes-Knoten in Ihrem Amazon-EKS-Cluster zu verbinden. Die an den Bootstrap-Container übergebenen Benutzerdaten haben die Form eines Befehlsaufrufs, der den zuvor erstellten SSM-Hybrid-Aktivierungscode und die ID als Eingabe akzeptiert:
eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region>
IAM Roles Anywhere
Wenn Sie AWS IAM Roles Anywhere als Anmeldeinformationsanbieter verwenden, erstellen Sie eine settings.toml-Datei mit folgendem Inhalt:
[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" config = "<base64-encoded-aws-config-file>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "iam-ra" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>"
Ersetzen Sie die Platzhalter durch die folgenden Werte:
-
<cluster-name>: Der Name Ihres Amazon-EKS-Clusters. -
<api-server-endpoint>: Der API-Server-Endpunkt Ihres Clusters. -
<cluster-certificate-authority>: Das base64-codierte CA-Paket Ihres Clusters. -
<region>: Die AWS-Region, in der Ihr Cluster gehostet wird, z. B. „us-east-1“ -
<hostname>: Der Host-Name der Bottlerocket-Instance, der auch als Knotenname konfiguriert wird. Dies kann ein beliebiger eindeutiger Wert Ihrer Wahl sein, muss jedoch den Benennungskonventionen für Kubernetes-Objekteentsprechen. Außerdem darf der von Ihnen verwendete Hostname nicht länger als 64 Zeichen sein. HINWEIS: Bei Verwendung des IAM-RA-Anbieters muss der Knotenname mit dem CN des Zertifikats auf dem Host übereinstimmen, wenn Sie die Vertrauensrichtlinie Ihrer IAM-Rolle für Hybridknoten mit der "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}"-Ressourcenbedingung konfiguriert haben. -
<base64-encoded-aws-config-file>: Der base64-codierte Inhalt Ihrer AWS-Konfigurationsdatei. Der Inhalt der Datei sollte wie folgt aussehen:
[default] credential_process = aws_signing_helper credential-process --certificate /root/.aws/node.crt --private-key /root/.aws/node.key --profile-arn <profile-arn> --role-arn <role-arn> --trust-anchor-arn <trust-anchor-arn> --role-session-name <role-session-name>
-
<base64-encoded-admin-container-userdata>: Der Base64-codierte Inhalt der Bottlerocket-Admin-Container-Konfiguration. Durch Aktivieren des Admin-Containers können Sie zur Systemerkundung und zum Debuggen per SSH eine Verbindung zu Ihrer Bottlerocket-Instance herstellen. Obwohl dies keine erforderliche Einstellung ist, empfehlen wir, sie zur einfacheren Fehlerbehebung zu aktivieren. Weitere Informationen zur Authentifizierung mit dem Admin-Container finden Sie in der Dokumentation zum Bottlerocket-Admin-Container. Der Admin-Container akzeptiert SSH-Benutzer- und Schlüsseleingaben im JSON-Format, zum Beispiel:
{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
-
<base64-encoded-bootstrap-container-userdata>: Der Base64-codierte Inhalt der Bottlerocket-Bootstrap-Container-Konfiguration. Weitere Informationen zur Konfiguration finden Sie in der Dokumentation zum Bottlerocket-Bootstrap-Container. Der Bootstrap-Container ist für die Erstellung der IAM Roles Anywhere-Host-Zertifikats- und Zertifikat-Privatschlüsseldateien auf der Instance verantwortlich. Diese werden dann von aws_signing_helperverwendet, um temporäre Anmeldeinformationen für die Authentifizierung bei Ihrem Amazon-EKS-Cluster zu erhalten. Die an den Bootstrap-Container übergebenen Benutzerdaten haben die Form eines Befehlsaufrufs, der als Eingabe den Inhalt des zuvor erstellten Zertifikats und des privaten Schlüssels akzeptiert:
eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key>
Schritt 2: Bottlerocket vSphere VM mit Benutzerdaten bereitstellen
Nachdem Sie die TOML-Datei erstellt haben, übergeben Sie sie während der Erstellung der vSphere-VM als Benutzerdaten. Beachten Sie, dass die Benutzerdaten konfiguriert werden müssen, bevor die VM zum ersten Mal gestartet wird. Daher müssen Sie diese bei der Erstellung der Instance angeben. Wenn Sie die VM im Voraus erstellen möchten, muss sie sich im Status „poweredOff“ befinden, bis Sie die Benutzerdaten dafür konfiguriert haben. Beispiel bei Verwendung der govc-CLI:
Erstellen einer VM zum ersten Mal
govc vm.create \ -on=true \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -e guestinfo.userdata.encoding="base64" \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -template=<template-name> \ <vm-name>
Aktualisieren der Benutzerdaten für eine vorhandene VM
govc vm.create \ -on=false \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -template=<template-name> \ <vm-name> govc vm.change -vm <vm-name> \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -e guestinfo.userdata.encoding="base64" govc vm.power -on <vm-name>
In den oben genannten Abschnitten gibt die -e guestinfo.userdata.encoding="base64"-Option an, dass die Benutzerdaten base64-codiert sind. Die -e guestinfo.userdata-Option übergibt den base64-codierten Inhalt der settings.toml-Datei als Benutzerdaten an die Bottlerocket-Instance. Ersetzen Sie die Platzhalter durch Ihre spezifischen Werte, wie beispielsweise die Bottlerocket-OVA-Vorlage und die Netzwerkdetails.
Schritt 3: Verbindung des Hybridknotens überprüfen
Nach dem Start der Bottlerocket-Instance wird versucht, eine Verbindung zu Ihrem Amazon-EKS-Cluster herzustellen. Sie können die Verbindung in der Amazon-EKS-Konsole überprüfen, indem Sie zur Registerkarte „Rechnen“ für Ihren Cluster navigieren oder den folgenden Befehl ausführen:
kubectl get nodes
Wichtig
Ihre Knoten haben den Status Not Ready, was zu erwarten ist und darauf zurückzuführen ist, dass auf Ihren Hybridknoten kein CNI ausgeführt wird. Wenn Ihre Knoten nicht dem Cluster beigetreten sind, sehen Sie unter Fehlerbehebung bei Hybridknoten nach.
Schritt 4: CNI für Hybridknoten konfigurieren
Um Ihre Hybridknoten für die Ausführung von Anwendungen vorzubereiten, führen Sie die Schritte in CNI für Hybridknoten konfigurieren aus.