O carregamento seguro de módulos do kernel do Google Kubernetes Engine (GKE) permite-lhe executar cargas de trabalho que requerem módulos do kernel assinados e fora da árvore (OOT) em imagens seguras do SO otimizado para contentores. O carregamento seguro de módulos do kernel ajuda a melhorar a postura de segurança dos seus clusters e conjuntos de nós, dando-lhe mais controlo sobre o carregamento de módulos em nós de CPU ou TPU com validação de assinatura.
Como funciona o carregamento do módulo do kernel seguro
Por predefinição, os nós do GKE usam imagens do SO otimizado para contentores diferentes com configurações de segurança diferentes, consoante o tipo de nó:
- Nós de CPU e TPU: use uma imagem do SO otimizado para contentores com o Loadpin do módulo de segurança do Linux (LSM) ativado. O Loadpin restringe o carregamento de módulos do kernel OOT. Esta definição é segura, mas impede o carregamento de módulos OOT.
- Nós de GPU: use uma imagem do SO otimizado para contentores com o Loadpin desativado. Esta definição permite o carregamento de módulos OOT, como a instalação de controladores NVIDIA, mas é menos segura por predefinição.
Ativa o carregamento seguro de módulos do kernel através da definição NodeKernelModuleLoading.Policy no LinuxNodeConfig para um conjunto de nós ou transmitindo o sinalizador --enable-kernel-module-signature-enforcement quando cria ou atualiza um cluster ou um conjunto de nós. Quando define a política como ENFORCE_SIGNED_MODULES, nos seus conjuntos de nós da CPU ou da TPU, o Loadpin é ativado, mas configurado para permitir o carregamento de módulos do kernel
de fora do sistema de ficheiros raiz. Os módulos têm de ser assinados e o sistema só permite módulos assinados pela Google.
Quando usar o carregamento seguro de módulos do kernel
Use o carregamento seguro de módulos do kernel quando precisar de carregar módulos do kernel OOT assinados pela Google, como controladores personalizados ou sistemas de ficheiros como o Lustre, em qualquer tipo de nó do GKE. Esta funcionalidade permite-lhe usar estes módulos sem reduzir a postura de segurança do nó. Por exemplo, pode carregar um controlador necessário num nó da CPU sem ter de usar o tipo de imagem de GPU menos restritivo.
Requisitos e limitações
Quando ativa o carregamento seguro de módulos do kernel nos seus conjuntos de nós, aplicam-se os seguintes requisitos e limitações:
- Módulos suportados: apenas são permitidos módulos OOT assinados pela Google.
- cgroup v2: o node pool tem de usar o cgroup v2. A API Google Kubernetes Engine rejeita pedidos para ativar esta política em pools de nós que usam cgroup v1. Para mais informações, consulte a documentação sobre cgroups do Kubernetes.
- Versão do GKE: esta funcionalidade está disponível nas versões 1.34.1-gke.2364000 e posteriores do cluster do GKE.
- Tipos de imagens de GPU: apenas as imagens de CPU e TPU suportam o carregamento seguro de módulos do kernel. As GPUs não são suportadas.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize a
CLI gcloud. Se instalou anteriormente a CLI gcloud, execute o comando
gcloud components updatepara obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.
Configure a política de carregamento de módulos do kernel seguro
Pode configurar a política de carregamento de módulos do kernel seguro em clusters individuais ou como uma definição do conjunto de nós. As políticas disponíveis são:
ENFORCE_SIGNED_MODULES: aplica que todos os módulos do kernel fora da árvore sejam assinados pela Google. Esta política requer que o conjunto de nós use o cgroup v2.DO_NOT_ENFORCE_SIGNED_MODULES: permite o carregamento de qualquer módulo de kernel, assinado ou não assinado. Este é o comportamento predefinido.
Se não especificar uma política, o GKE usa o comportamento predefinido, que não aplica módulos assinados.
Ative o carregamento seguro de módulos do kernel num cluster
Para ativar o carregamento seguro de módulos do kernel num cluster, conclua um dos seguintes passos:
Para ativar num novo cluster, execute o seguinte comando:
Standard
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementPiloto automático
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSubstitua o seguinte:
CLUSTER_NAME: o nome do novo cluster.LOCATION: a região ou a zona do cluster.PROJECT_ID: o ID do projeto.
Para ativar num cluster existente, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSubstitua o seguinte:
CLUSTER_NAME: o nome do seu cluster.LOCATION: a região ou a zona do cluster.PROJECT_ID: o ID do projeto.
Quando atualiza um cluster existente, os nós são recriados na próxima oportunidade disponível, a menos que seja impedido por um período de manutenção.
Ative o carregamento seguro de módulos do kernel num conjunto de nós
Para ativar o carregamento seguro de módulos do kernel num conjunto de nós, conclua um dos seguintes passos:
Para ativar num novo conjunto de nós, execute o seguinte comando:
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSubstitua o seguinte:
NODEPOOL_NAME: o nome do novo node pool.CLUSTER_NAME: o nome do seu cluster.LOCATION: a região ou a zona do cluster.PROJECT_ID: o ID do projeto.
Para ativar num conjunto de nós existente, execute o seguinte comando:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementSubstitua o seguinte:
NODEPOOL_NAME: o nome do node pool a atualizar.CLUSTER_NAME: o nome do seu cluster.LOCATION: a região ou a zona do cluster.PROJECT_ID: o ID do projeto.
Confirme que a política do módulo do kernel seguro está definida
Para confirmar que uma política está definida para um cluster, execute o seguinte comando:
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID
No resultado, verifique a secção linuxNodeConfig. O campo kernelModuleLoading mostra a política atual:
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
Desative o carregamento do módulo do kernel seguro
Para desativar o carregamento de módulos do kernel seguros, conclua um dos seguintes passos:
Para desativar num cluster, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcementPara desativar num conjunto de nós existente, execute o seguinte comando:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement
O que se segue?
- Saiba como reforçar a segurança do seu cluster.