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. Neste documento, mostramos como evitar esse autorregistro para nós protegidos do GKE e, em vez disso, exigir que um componente confiável do plano de controle do GKE realize operações de registro. Os engenheiros de segurança e os administradores de plataforma podem usar a criação de nós do plano de controle para limitar os privilégios dos nós.
Você já precisa conhecer os seguintes conceitos:
Modos de criação de nós no GKE
Os nós protegidos do GKE, que são ativados em todos os clusters do GKE, aplicam a verificação criptográfica das identidades dos 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 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
Na versão 1.35.3-gke.1189000 e mais recentes do GKE, é 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 registre os nós automaticamente. Depois que o kubelet configura uma conexão TLS com o servidor da API usando a identidade do nó criptograficamente verificada, o componente gcp-controller-manager cria o objeto Node. Um
controlador de admissão rejeita qualquer solicitação do kubelet para criar o
objeto Node. Ao usar o componente do plano de controle para criar objetos Node,
você reduz 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 Standard ou 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-modedo 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. Qualquer carga de trabalho ou controlador
que dependa de um conjunto completo de rótulos ou anotações imediatamente após a criação
do nó pode apresentar um comportamento inesperado. Alguns rótulos e anotações podem ser reconciliados em um momento diferente do registro kubelet. Verifique se suas
cargas de trabalho e DaemonSets usam verificações de presença de rótulo e anotação antes de agir.
- Evite implantar DaemonSets e cargas de trabalho que tenham tolerâncias para todos os taints 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 dos 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:
- Ative 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ê instalou a CLI gcloud anteriormente, instale a 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 ou atualizar um cluster. Para clusters atuais, a atualização afeta apenas os novos nós no 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 flag --node-creation-mode no comando
clusters create
e no comando
clusters create-auto.
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
flag --node-creation-mode da Google Cloud CLI ou VIA_KUBELET no
método NodeCreationConfig da API GKE. Para clusters atuais, essa mudança afeta apenas os novos nós.
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 aumentar a segurança do cluster.