Il caricamento sicuro dei moduli kernel di Google Kubernetes Engine (GKE) ti consente di eseguire workload che richiedono moduli kernel out-of-tree (OOT) firmati su immagini Container-Optimized OS sicure. Il caricamento sicuro dei moduli kernel contribuisce a migliorare la security posture dei cluster e dei node pool, offrendoti un maggiore controllo sul caricamento dei moduli sui nodi CPU, TPU o GPU con la verifica della firma.
Come funziona il caricamento sicuro dei moduli kernel
Per impostazione predefinita, i nodi GKE utilizzano immagini Container-Optimized OS diverse con configurazioni di sicurezza diverse, a seconda del tipo di nodo:
- Nodi CPU e TPU: utilizzano un'immagine Container-Optimized OS con Loadpin del modulo di sicurezza Linux (LSM) abilitato. Loadpin limita il caricamento di qualsiasi modulo kernel OOT. Questa impostazione è sicura, ma impedisce il caricamento dei moduli OOT.
- Nodi GPU: utilizzano un'immagine Container-Optimized OS con Loadpin disabilitato. Questa impostazione consente il caricamento dei moduli OOT, ad esempio l'installazione dei driver NVIDIA, ma per impostazione predefinita è meno sicura.
Puoi abilitare il caricamento sicuro dei moduli kernel utilizzando l'impostazione NodeKernelModuleLoading.Policy in LinuxNodeConfig per un node pool o passando il flag --enable-kernel-module-signature-enforcement durante la creazione o l'aggiornamento di un cluster o di un pool di nodi. Quando imposti la policy su ENFORCE_SIGNED_MODULES, Loadpin è abilitato, ma configurato per consentire il caricamento dei moduli kernel dall'esterno del file system root. I moduli devono essere firmati e il sistema consente solo i moduli firmati da Google.
Quando utilizzare il caricamento sicuro dei moduli kernel
Utilizza il caricamento sicuro dei moduli kernel quando devi caricare moduli kernel OOT firmati da Google, come driver personalizzati o file system come Lustre, su qualsiasi tipo di nodo GKE. Questa funzionalità ti consente di utilizzare questi moduli senza ridurre la security posture del nodo. Ad esempio, puoi caricare un driver richiesto su un nodo CPU senza dover utilizzare il tipo di immagine GPU meno restrittivo.
Requisiti e limitazioni
Quando abiliti il caricamento sicuro dei moduli kernel sui node pool, si applicano i seguenti requisiti e limitazioni:
- Moduli supportati: sono consentiti solo i moduli OOT firmati da Google.
- cgroup v2: il pool di nodi deve utilizzare cgroup v2. L'API Kubernetes Engine rifiuta le richieste di abilitazione di questa policy sui node pool che utilizzano cgroup v1. Per ulteriori informazioni, consulta la documentazione di Kubernetes cgroup.
- Versione GKE: questa funzionalità è disponibile per i nodi CPU e TPU nelle versioni del cluster GKE 1.34.1-gke.2364000 e successive. Per i nodi GPU, questa funzionalità è disponibile nelle versioni 1.36.0-gke.1585000 e successive.
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 già installato 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.
Configurare la policy di caricamento sicuro dei moduli kernel
Puoi configurare la policy di caricamento sicuro dei moduli kernel sui singoli cluster o come impostazione pool di nodi. Le policy disponibili sono:
ENFORCE_SIGNED_MODULES: impone che tutti i moduli kernel out-of-tree siano firmati da Google. Questa policy richiede che il pool di nodi utilizzi cgroup v2.DO_NOT_ENFORCE_SIGNED_MODULES: consente il caricamento di qualsiasi modulo kernel, firmato o non firmato. Questo è il comportamento predefinito.
Se non specifichi una policy, GKE utilizza il comportamento predefinito, che non applica i moduli firmati.
Abilitare il caricamento sicuro dei moduli kernel su un cluster
Per abilitare il caricamento sicuro dei moduli kernel su un cluster, completa uno dei seguenti passaggi:
Per abilitare un nuovo cluster, esegui il seguente comando:
Standard
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementAutopilot
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la regione o la zona del cluster.PROJECT_ID: il tuo ID progetto.
Per abilitare un cluster esistente, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del cluster.PROJECT_ID: il tuo ID progetto.
Quando aggiorni un cluster esistente, i nodi vengono ricreati alla prima opportunità disponibile, a meno che non sia impedito da un periodo di manutenzione.
Abilitare il caricamento sicuro dei moduli kernel su un pool di nodi
Per abilitare il caricamento sicuro dei moduli kernel su un pool di nodi, completa uno dei seguenti passaggi:
Per abilitare un nuovo pool di nodi, esegui il seguente comando:
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSostituisci quanto segue:
NODEPOOL_NAME: il nome del nuovo pool di nodi.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del cluster.PROJECT_ID: il tuo ID progetto.
Per abilitare un pool di nodi esistente, esegui il seguente comando:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSostituisci quanto segue:
NODEPOOL_NAME: il nome del pool di nodi da aggiornare.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del cluster.PROJECT_ID: il tuo ID progetto.
Verificare che la policy di caricamento sicuro dei moduli kernel sia impostata
Per verificare che una policy sia impostata per un cluster, esegui il seguente comando:
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID
Nell'output, controlla la sezione linuxNodeConfig. Il campo kernelModuleLoading mostra la policy corrente:
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
Disabilitare il caricamento sicuro dei moduli kernel
Per disabilitare il caricamento sicuro dei moduli kernel, completa uno dei seguenti passaggi:
Per disabilitare un cluster, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcementPer disabilitare un pool di nodi esistente, esegui il seguente comando:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement
Passaggi successivi
- Scopri come rafforzare la sicurezza del cluster.