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_PLANEnel flag--node-creation-mode. - API Kubernetes Engine: specifica un valore di
VIA_CONTROL_PLANEnel camponode-creation-modedel metodoNodeCreationConfig.
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
initContainerper 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
- Scopri di più su Shielded GKE Nodes.
- Leggi la panoramica sulla sicurezza di GKE.
- Scopri come rafforzare la sicurezza del cluster.