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-modeden WertCONTROL_PLANEan. - Kubernetes Engine API: Geben Sie in der Methode
NodeCreationConfigim Feldnode-creation-modeden WertVIA_CONTROL_PLANEan.
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 updateBefehl 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
- Weitere Informationen zu Shielded GKE-Knoten.
- GKE-Sicherheit sübersicht lesen
- Informationen zum Erhöhen der Sicherheit Ihres Clusters