Standardmäßig verwenden Google Kubernetes Engine-Knoten (GKE) den kubelet-Prozess 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-Steuerungsebenenkomponente für Registrierungsvorgänge verwenden. Sicherheitsexperten und Plattformadministratoren können die Erstellung von Knoten der Steuerungsebene verwenden, um die Berechtigungen von Knoten einzuschränken.
Sie sollten mit den folgenden Konzepten vertraut sein:
Modi zum Erstellen von Knoten in GKE
Shielded GKE-Knoten, die in allen GKE-Clustern aktiviert sind, erzwingen die kryptografische Überprüfung von 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 im API-Server erstellt und ändert, birgt ein Risiko, wenn ein Knoten manipuliert wird. In CVE-2025-5187 ermöglichte eine Sicherheitslücke beispielsweise Nutzern von Knoten, 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 eine vertrauenswürdige GKE-Steuerungsebenenkomponente namens gcp-controller-manager zum Erstellen von Node-Objekten anfordern, anstatt zuzulassen, dass die kubelet die Knoten selbst registriert. Nachdem kubelet eine TLS-Verbindung zum API-Server mit der kryptografisch bestätigten Knotenidentität hergestellt hat, erstellt die gcp-controller-manager-Komponente das Node-Objekt. Ein Admission Controller lehnt alle Anfragen von kubelet zum Erstellen des Node-Objekts ab. Wenn Sie die Steuerungsebenenkomponente zum Erstellen von Node-Objekten verwenden, können Sie das Risiko verringern, dass ein potenziell kompromittierter Knoten beliebige Node-Objekte erstellt oder die Node-Spezifikation manipuliert.
Wenn Sie das Standardverhalten beim Erstellen und Registrieren von Knoten ä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 gcp-controller-manager ein Node-Objekt in der Kubernetes API erstellt, und dem Zeitpunkt, zu dem kubelet dieses Node-Objekt mit allen Knotenlabels und ‑anmerkungen aktualisiert. Arbeitslasten oder Controller, die beim Erstellen eines Knotens sofort auf einen vollständigen Satz von Labels oder Anmerkungen angewiesen sind, zeigen möglicherweise ein unerwartetes Verhalten. Bestimmte Labels und Anmerkungen werden möglicherweise zu einem anderen Zeitpunkt als die kubelet-Registrierung abgeglichen. Prüfen Sie, ob Ihre Workloads und DaemonSets vor dem Ausführen von Aktionen das Vorhandensein von Labels und Anmerkungen prüfen.
- Vermeiden Sie die Bereitstellung von DaemonSets und Arbeitslasten, die Toleranzen für alle Knotenmarkierungen haben. Dies kann dazu führen, dass Pods auf Knoten ausgeführt werden, die nicht bereit sind.
- Verwenden Sie ein
initContainer, um vor dem Ausführen von Hauptcontainern nach Knotenlabels zu suchen.
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 diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Erstellung von Knoten der Steuerungsebene aktivieren
Sie können die Knotenerstellung aktivieren, indem Sie die gcp-controller-manager-Komponente verwenden, wenn Sie einen Cluster erstellen oder einen vorhandenen Cluster aktualisieren. Bei vorhandenen Clustern betrifft das Update nur neue Knoten im Cluster. Vorhandene Knoten sind von der Änderung nicht betroffen.
Mit dem folgenden Befehl wird der Erstellungsmodus für 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 der Steuerungsebene Ihres Clusters.
Sie können das Flag --node-creation-mode auch im clusters create-Befehl und im clusters create-auto-Befehl angeben.
Erstellung von Knoten der Steuerungsebene deaktivieren
Sie können zum Standardverhalten von GKE zurückkehren, bei dem mit kubelet jederzeit Knoten erstellt werden. Geben Sie dazu den Wert KUBELET im Google Cloud CLI-Flag --node-creation-mode oder VIA_KUBELET in der GKE API-Methode NodeCreationConfig an. 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 der Steuerungsebene Ihres Clusters.
Nächste Schritte
- Weitere Informationen zu Shielded GKE Nodes
- GKE-Sicherheitsübersicht
- Sicherheit des Clusters erhöhen