Selbstregistrierung von Knoten in GKE-Clustern verhindern

Standardmäßig verwenden Google Kubernetes Engine-Knoten (GKE) den Prozess kubelet auf jedem Knoten, um Knotenobjekte beim Kubernetes API-Server zu registrieren. In diesem Dokument wird beschrieben, wie Sie diese Selbstregistrierung für Shielded GKE-Knoten verhindern und stattdessen eine vertrauenswürdige GKE-Steuerungsebene für die Registrierungsvorgänge verwenden. Sicherheitsexperten und Plattformadministratoren können die Erstellung von Knoten der Steuerungsebene verwenden, um die Berechtigungen von Knoten zu beschränken.

Sie sollten mit den folgenden Konzepten vertraut sein:

Modi für die Knotenerstellung in GKE

Shielded GKE-Knoten, die in allen GKE-Clustern aktiviert sind, erzwingen die kryptografische Überprüfung der Knotenidentitäten während der Knotenregistrierung. Diese Überprüfung trägt dazu bei, dass sich nur legitime Knoten beim Kubernetes API-Server registrieren und Arbeitslasten ausführen können.

Der Standardregistrierungsworkflow für GKE-Cluster, bei dem das kubelet auf jedem Knoten sein Node-Objekt auf dem API-Server erstellt und ändert, birgt ein Risiko, wenn ein Knoten kompromittiert wird. In CVE-2025-5187 ermöglichte eine Sicherheitslücke beispielsweise Knotenbenutzern, die entsprechenden Node Objekte zu löschen und kompromittierte Knoten zu registrieren.

Erstellung von Knoten der Steuerungsebene

In GKE-Version 1.35.3-gke.1189000 und höher können Sie optional festlegen, dass eine vertrauenswürdige GKE-Steuerungsebenenkomponente namens gcp-controller-manager Node-Objekte erstellt, anstatt dem kubelet zu erlauben, die Knoten selbst zu registrieren. Nachdem das kubelet mit der kryptografisch überprüften Knotenidentität eine TLS-Verbindung zum API-Server eingerichtet hat, erstellt die Komponente gcp-controller-manager das Node-Objekt. Ein Zulassungscontroller lehnt alle Anfragen vom kubelet zum Erstellen des Node-Objekts ab. Wenn Sie die Komponente der Steuerungsebene zum Erstellen von Node-Objekten verwenden, können Sie das Risiko verringern, dass ein potenziell kompromittierter Knoten beliebige Node-Objekte erstellt oder seine Node-Spezifikation manipuliert.

Wenn Sie das Standardverhalten für die Knotenerstellung und -registrierung ändern möchten, führen Sie beim Erstellen eines Standard- oder Autopilot-Clusters einen der folgenden Schritte aus:

  • Google Cloud CLI: Geben Sie im Flag --node-creation-mode den Wert CONTROL_PLANE an.
  • Kubernetes Engine API: Geben Sie in der Methode NodeCreationConfig im Feld node-creation-mode den Wert VIA_CONTROL_PLANE an.

Beschränkungen

Es gibt eine kurze Verzögerung zwischen dem Zeitpunkt, zu dem der gcp-controller-manager ein Node-Objekt in der Kubernetes API erstellt, und dem Zeitpunkt, zu dem das kubelet dieses Node-Objekt mit allen Knotenlabels und -annotationen aktualisiert. Bei allen Arbeitslasten oder Controllern, die sofort nach der Knotenerstellung einen vollständigen Satz von Labels oder Annotationen benötigen, kann es zu unerwartetem Verhalten kommen. Bestimmte Labels und Annotationen werden möglicherweise zu einem anderen Zeitpunkt als die kubelet-Registrierung abgeglichen. Prüfen Sie, ob Ihre Arbeitslasten und DaemonSets Vorhandenseinsprüfungen für Labels und Annotationen verwenden, bevor Sie Maßnahmen ergreifen.

  • Vermeiden Sie die Bereitstellung von DaemonSets und Arbeitslasten, die alle Knotenmarkierungen tolerieren, da dies dazu führen kann, dass Pods auf Knoten ausgeführt werden, die nicht bereit sind.
  • Verwenden Sie einen initContainer, um Knotenlabels zu prüfen, bevor Hauptcontainer ausgeführt werden.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, installieren und dann initialisieren Sie die gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem gcloud components update Befehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.

Erstellung von Knoten der Steuerungsebene aktivieren

Sie können die Knotenerstellung mit der Komponente gcp-controller-manager aktivieren, wenn Sie einen Cluster erstellen oder einen vorhandenen Cluster aktualisieren. Bei vorhandenen Clustern wirkt sich die Aktualisierung nur auf neue Knoten im Cluster aus. Vorhandene Knoten sind von der Änderung nicht betroffen.

Mit dem folgenden Befehl wird der Modus für die Erstellung von Knoten der Steuerungsebene für einen vorhandenen Cluster aktiviert:

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=CONTROL_PLANE \
    --location=CONTROL_PLANE_LOCATION \

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Name Ihres Clusters.
  • CONTROL_PLANE_LOCATION: Die Region oder Zone Ihrer Cluster-Steuerungsebene.

Sie können das Flag --node-creation-mode auch im Befehl clusters create command und im Befehl clusters create-auto command angeben.

Erstellung von Knoten der Steuerungsebene deaktivieren

Sie können zum Standardverhalten von GKE zurückkehren, bei dem das kubelet jederzeit Knoten erstellt, indem Sie im --node-creation-mode Google Cloud CLI-Flag den Wert KUBELET oder in der NodeCreationConfig GKE API-Methode den Wert VIA_KUBELET angeben. Bei vorhandenen Clustern wirkt sich diese Änderung nur auf neue Knoten in diesem Cluster aus.

Mit dem folgenden Befehl wird ein Cluster aktualisiert, um die Erstellung von Knoten der Steuerungsebene zu deaktivieren:

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=KUBELET \
    --location=CONTROL_PLANE_LOCATION \

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Name Ihres Clusters.
  • CONTROL_PLANE_LOCATION: Die Region oder Zone Ihrer Cluster-Steuerungsebene.

Nächste Schritte