Per impostazione predefinita, i nodi Google Kubernetes Engine (GKE) utilizzano il processo kubelet su ogni nodo per registrare gli oggetti Node con il server dell'API Kubernetes. Questo documento mostra come impedire questa autoregistrazione per Shielded GKE Nodes e richiedere invece a un componente del piano di controllo GKE attendibile di eseguire le operazioni di registrazione. Gli ingegneri della sicurezza e gli amministratori della piattaforma possono utilizzare la creazione di nodi del piano di controllo per limitare i privilegi dei nodi.
Dovresti già conoscere i seguenti concetti:
Modalità di creazione dei nodi in GKE
Shielded GKE Nodes, abilitato in tutti i cluster GKE, applica la verifica crittografica delle identità dei nodi durante il processo di registrazione dei nodi. Questa verifica contribuisce a garantire che solo i nodi legittimi possano registrarsi con il server dell'API Kubernetes ed eseguire i 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
i nodi compromessi.
Creazione di nodi del piano di controllo
Nella versione 1.35.3-gke.1189000 e successive di GKE, puoi facoltativamente richiedere a un componente del piano di controllo GKE attendibile denominato gcp-controller-manager di creare oggetti Node anziché consentire a kubelet di autoregistrare 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 controller di ammissione rifiuta qualsiasi richiesta da kubelet per creare l'oggetto Node. Utilizzando il componente del piano di controllo 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-modenel 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. Eventuali carichi di lavoro o controller che dipendono da un insieme completo di etichette o annotazioni immediatamente dopo la creazione del nodo potrebbero mostrare un comportamento imprevisto. Alcune etichette e annotazioni potrebbero essere riconciliate in un momento diverso rispetto alla registrazione di kubelet. Verifica che i carichi di lavoro e i DaemonSet utilizzino i controlli di presenza di etichette e annotazioni prima di agire.
- Evita di eseguire il deployment di DaemonSet e carichi di lavoro con tolleranze per tutte le incompatibilità dei nodi, in quanto ciò 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 attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai installato in precedenza gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Abilita la creazione di nodi del piano di controllo
Puoi abilitare 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 influisce solo sui nuovi nodi del cluster. I nodi esistenti non sono interessati dalla modifica.
Il seguente comando abilita la modalità di creazione dei nodi del piano di controllo 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 piano di controllo del cluster.
Puoi anche specificare il --node-creation-mode flag nel clusters create
command
e nel clusters create-auto
command.
Disabilita la creazione di nodi del piano di controllo
Puoi ripristinare il comportamento predefinito di GKE in cui kubelet
crea i nodi in qualsiasi momento specificando un valore di KUBELET nel
--node-creation-mode flag di Google Cloud CLI o VIA_KUBELET nel
NodeCreationConfig metodo dell'API GKE. Per i cluster esistenti, questa modifica influisce solo sui nuovi nodi del cluster.
Il seguente comando aggiorna un cluster per disabilitare la creazione di nodi del piano di controllo:
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 piano di controllo del cluster.
Passaggi successivi
- Scopri di più su Shielded GKE Nodes.
- Leggi la panoramica sulla sicurezza di GKE.
- Scopri come proteggere la sicurezza del cluster.