Por padrão, os nós do Google Kubernetes Engine (GKE) usam o processo kubelet em cada nó para registrar objetos de nó com o servidor da API Kubernetes. Este documento mostra como impedir esse autorregistro para nós protegidos do GKE e, em vez disso, exigir que um componente confiável do plano de controle do GKE execute operações de registro. Os engenheiros de segurança e os administradores da plataforma podem usar a criação de nós do plano de controle para limitar os privilégios dos nós.
Você já precisa estar familiarizado com os seguintes conceitos:
Modos de criação de nós no GKE
Os nós protegidos do GKE, que estão ativados em todos os clusters do GKE, aplicam a verificação criptográfica das identidades de nós durante o processo de registro. Essa verificação ajuda a garantir que apenas nós legítimos possam se registrar no servidor da API Kubernetes e executar cargas de trabalho.
O fluxo de trabalho de registro padrão para clusters do GKE, em que o kubelet em cada nó cria e modifica o objeto Node no servidor da API, cria um risco se um nó for comprometido. Por exemplo, em
CVE-2025-5187, uma vulnerabilidade
permitia que os usuários de nós excluíssem os objetos Node correspondentes e registrassem
nós comprometidos.
Criação de nós do plano de controle
No GKE versão 1.35.3-gke.1189000 e mais recentes, é possível exigir um componente confiável do plano de controle do GKE chamado gcp-controller-manager para criar objetos Node em vez de permitir que o kubelet autorregistre os nós. Depois que o kubelet configura uma conexão TLS com o servidor da API usando a identidade do nó verificada criptograficamente, o componente gcp-controller-manager cria o objeto Node. Um controlador de admissão rejeita todas as solicitações do kubelet para criar o objeto Node. Ao usar o componente do plano de controle para criar objetos Node, é possível reduzir o risco de um nó potencialmente comprometido criar objetos Node arbitrários ou manipular a especificação Node.
Para mudar o comportamento padrão de criação e registro de nós, faça uma das seguintes ações ao criar um cluster padrão ou do Autopilot:
- Google Cloud CLI: especifique um valor de
CONTROL_PLANEna flag--node-creation-mode. - API Kubernetes Engine: especifique um valor de
VIA_CONTROL_PLANEno camponode-creation-modeno métodoNodeCreationConfig.
Limitações
Há um breve atraso entre o momento em que o gcp-controller-manager cria um objeto Node na API Kubernetes e quando o kubelet atualiza esse objeto Node com o conjunto completo de rótulos e anotações de nós. Todas as cargas de trabalho ou controladores que dependem de um conjunto completo de rótulos ou anotações imediatamente após a criação do nó podem mostrar um comportamento inesperado. Alguns rótulos e anotações podem ser reconciliados em um momento diferente do registro do kubelet. Verifique se as cargas de trabalho e os DaemonSets usam verificações de presença de rótulos e anotações antes de agir.
- Evite implantar DaemonSets e cargas de trabalho que tenham tolerâncias para todas as falhas de nós, o que pode fazer com que os pods sejam executados em nós que não estão prontos.
- Use um
initContainerpara verificar os rótulos de nós antes de permitir que os contêineres principais sejam executados.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você já instalou a CLI gcloud, faça o download da versão mais recente
executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Ativar a criação de nós do plano de controle
É possível ativar a criação de nós usando o componente gcp-controller-manager ao criar um cluster ou atualizar um cluster atual. Para clusters atuais, a atualização afeta apenas os novos nós do cluster. Os nós atuais não são afetados pela mudança.
O comando a seguir ativa o modo de criação de nós do plano de controle para um cluster atual:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=CONTROL_PLANE \
--location=CONTROL_PLANE_LOCATION \
Substitua:
CLUSTER_NAME: o nome do cluster.CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster.
Também é possível especificar a --node-creation-mode flag no clusters create
command
e no clusters create-auto
command.
Desativar a criação de nós do plano de controle
É possível reverter para o comportamento padrão do GKE em que o kubelet
cria nós a qualquer momento, especificando um valor de KUBELET na
--node-creation-mode flag da Google Cloud CLI ou VIA_KUBELET no
NodeCreationConfig método da API GKE. Para clusters atuais, essa mudança afeta apenas os novos nós desse cluster.
O comando a seguir atualiza um cluster para desativar a criação de nós do plano de controle:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
Substitua:
CLUSTER_NAME: o nome do cluster.CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster.
A seguir
- Saiba mais sobre os nós protegidos do GKE.
- Leia a Visão geral de segurança do GKE.
- Saiba como reforçar a segurança do cluster.