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 die Selbstregistrierung für Shielded GKE-Knoten verhindern und stattdessen eine vertrauenswürdige GKE-Steuerungsebenenkomponente für Registrierungsvorgänge verwenden. Sicherheitsingenieure 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 Nodes, 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 auf dem API-Server erstellt und ändert, birgt ein Risiko, wenn ein Knoten manipuliert wird. Bei CVE-2025-5187 konnten Knotenbenutzer beispielsweise aufgrund einer Sicherheitslücke die entsprechenden Node-Objekte löschen und kompromittierte Knoten 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 mit dem API-Server über die kryptografisch verifizierte Knotenidentität hergestellt hat, erstellt die Komponente gcp-controller-manager das Objekt Node. Ein Zulassungscontroller lehnt alle Anfragen von kubelet zum Erstellen des Node-Objekts ab. Wenn Sie die Steuerungsebene 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 für die Knotenerstellung und -registrierung ändern möchten, haben Sie beim Erstellen eines Standard- oder Autopilot-Clusters folgende Möglichkeiten:
- 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 mit Toleranzen für alle Knotenmarkierungen, da dies dazu führen kann, 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 diese Aufgabe 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 auf 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 wirkt sich das Update nur auf neue Knoten im Cluster aus. 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 Ihrer Cluster-Steuerungsebene.
Sie können das Flag --node-creation-mode auch im Befehl „clusters create“ und im Befehl „clusters create-auto“ 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 Ihrer Cluster-Steuerungsebene.
Nächste Schritte
- Weitere Informationen zu Shielded GKE-Knoten
- Übersicht zur GKE-Sicherheit
- Sicherheit des Clusters erhöhen