Impedisci la registrazione automatica dei nodi nei cluster GKE

Per impostazione predefinita, i nodi Google Kubernetes Engine (GKE) utilizzano il processo kubelet su ogni nodo per registrare gli oggetti Node con il server API Kubernetes. Questo documento mostra come impedire questa autoregistrazione per Shielded GKE Nodes e richiedere invece a un componente del control plane GKE attendibile di eseguire le operazioni di registrazione. Gli ingegneri della sicurezza e gli amministratori della piattaforma possono utilizzare la creazione di nodi del control plane per limitare i privilegi dei nodi.

Dovresti già avere familiarità con i seguenti concetti:

Modalità di creazione dei nodi in GKE

I nodi GKE schermati, abilitati in tutti i cluster GKE, applicano la verifica crittografica delle identità dei nodi durante la registrazione dei nodi. Questa verifica contribuisce a garantire che solo i nodi legittimi possano registrarsi con il server API Kubernetes ed eseguire carichi di lavoro.

Il flusso di lavoro di registrazione predefinito per i cluster GKE, in cui kubelet su ogni nodo crea e modifica il relativo oggetto Node nel server API, crea un rischio se un nodo viene compromesso. Ad esempio, in CVE-2025-5187, una vulnerabilità consentiva agli utenti dei nodi di eliminare gli oggetti Node corrispondenti e registrare nodi compromessi.

Creazione del nodo control plane

In GKE versione 1.35.3-gke.1189000 e successive, puoi facoltativamente richiedere a un componente del control plane GKE attendibile denominato gcp-controller-manager di creare oggetti Node anziché consentire a kubelet di registrare autonomamente i nodi. Dopo che kubelet ha configurato una connessione TLS con il server API utilizzando l'identità del nodo verificata crittograficamente, il componente gcp-controller-manager crea l'oggetto Node. Un admission controller rifiuta qualsiasi richiesta da kubelet per creare l'oggetto Node. Utilizzando il componente control plane per creare oggetti Node, puoi ridurre il rischio che un nodo potenzialmente compromesso crei oggetti Node arbitrari o manipoli la relativa specifica Node.

Per modificare il comportamento predefinito di creazione e registrazione dei nodi, esegui una delle seguenti operazioni quando crei un cluster Standard o Autopilot:

  • Google Cloud CLI: specifica un valore di CONTROL_PLANE nel flag --node-creation-mode.
  • API Kubernetes Engine: specifica un valore di VIA_CONTROL_PLANE nel campo node-creation-mode del metodo NodeCreationConfig.

Limitazioni

Si verifica un breve ritardo tra il momento in cui gcp-controller-manager crea un oggetto Node nell'API Kubernetes e il momento in cui kubelet aggiorna l'oggetto Node con l'insieme completo di etichette e annotazioni dei nodi. Qualsiasi workload o controller che dipende da un insieme completo di etichette o annotazioni immediatamente dopo la creazione del nodo potrebbe mostrare un comportamento imprevisto. Alcune etichette e annotazioni potrebbero essere riconciliate in un momento diverso rispetto alla registrazione kubelet. Verifica che i tuoi carichi di lavoro e DaemonSet utilizzino i controlli di presenza di etichette e annotazioni prima di agire.

  • Evita di eseguire il deployment di DaemonSet e workload che hanno tolleranze per tutte le incompatibilità dei nodi, il che potrebbe causare l'esecuzione dei pod su nodi non pronti.
  • Utilizza un initContainer per verificare la presenza di etichette dei nodi prima di consentire l'esecuzione dei container principali.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Per utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo il comando gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Abilita la creazione di nodi del control plane

Puoi attivare la creazione di nodi utilizzando il componente gcp-controller-manager quando crei un cluster o aggiorni un cluster esistente. Per i cluster esistenti, l'aggiornamento interessa solo i nuovi nodi del cluster. I nodi esistenti non sono interessati dalla modifica.

Il seguente comando attiva la modalità di creazione dei nodi del control plane per un cluster esistente:

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del tuo cluster.
  • CONTROL_PLANE_LOCATION: la regione o la zona del control plane del cluster.

Puoi anche specificare il flag --node-creation-mode nel comando clusters create e nel comando clusters create-auto.

Disattiva la creazione di nodi del control plane

Puoi ripristinare il comportamento predefinito di GKE in cui kubelet crea nodi in qualsiasi momento specificando un valore di KUBELET nel flag --node-creation-mode di Google Cloud CLI o VIA_KUBELET nel metodo NodeCreationConfig dell'API GKE. Per i cluster esistenti, questa modifica interessa solo i nuovi nodi del cluster.

Il seguente comando aggiorna un cluster per disattivare la creazione di nodi del control plane:

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del tuo cluster.
  • CONTROL_PLANE_LOCATION: la regione o la zona del control plane del cluster.

Passaggi successivi