Visão geral do isolamento de nós

Este documento explica os benefícios e as limitações do isolamento de nós em um cluster do Kubernetes isolado por air-gap do Google Distributed Cloud (GDC). O isolamento de nós com pools de nós dedicados aumenta a segurança do cluster, oferecendo controle preciso sobre onde pods específicos são executados no cluster.

O isolamento da carga de trabalho oferece alguns benefícios, como:

  • Risco reduzido de ataques de escalonamento de privilégios no cluster do Kubernetes.
  • Mais controle sobre pods que exigem recursos extras.

Nesses casos, considere isolar suas cargas de trabalho de contêiner em pools de nós dedicados para mais controle e otimização. Considere também as limitações para tomar uma decisão informada sobre o custo de manutenção adicional exigido pelo isolamento de nós.

Este documento é destinado a públicos-alvo como administradores de TI no grupo de administradores de plataforma, responsáveis por gerenciar os pools de nós de um cluster do Kubernetes, e desenvolvedores de aplicativos no grupo de operadores de aplicativos, responsáveis por gerenciar cargas de trabalho de contêineres. Para mais informações, consulte Públicos-alvo da documentação isolada do GDC.

Por que devo isolar minhas cargas de trabalho?

Embora não seja obrigatório, dedicar pools de nós a cargas de trabalho de contêineres específicas pode evitar possíveis problemas. No entanto, essa abordagem exige mais gerenciamento e geralmente não é essencial.

Os clusters do Kubernetes usam cargas de trabalho privilegiadas gerenciadas pelo GDC para ativar recursos e funcionalidades específicas do cluster, como a coleta de métricas. Essas cargas de trabalho recebem permissões especiais para serem executadas corretamente no cluster.

As cargas de trabalho que você implanta nos nós podem ser comprometidas por uma entidade maliciosa. A execução dessas cargas de trabalho com as cargas de trabalho privilegiadas gerenciadas pelo GDC significa que um invasor que rompe um contêiner comprometido pode usar as credenciais da carga de trabalho privilegiada no nó para escalonar privilégios no cluster.

Os pools de nós dedicados também são úteis quando é necessário programar pods que exigem mais recursos que outros, como mais memória ou mais espaço em disco local.

É possível usar os seguintes mecanismos para programar suas cargas de trabalho em um pool de nós dedicado:

  • Taints de nó: informam ao cluster do Kubernetes para evitar a programação de cargas de trabalho em nós específicos sem uma tolerância correspondente.
  • Afinidade de nó: informa ao cluster do Kubernetes para programar pods específicos em nós dedicados.

O isolamento de nós é um mecanismo de defesa avançado que só pode ser usado com outros recursos de isolamento, como contêineres com privilégios mínimos e contas de serviço. O isolamento de nós pode não cobrir todos os caminhos de escalonamento e nunca deve ser usado como um limite de segurança principal.

Como funciona o isolamento de nós

Para implementar o isolamento de nós para as cargas de trabalho, faça isto:

  1. Atribua um taint e um identificador a um pool de nós para as cargas de trabalho.

  2. Atualize as cargas de trabalho com a tolerância e a regra de afinidade de nó correspondente.

Este guia pressupõe que você começará com um pool de nós no cluster. O uso da afinidade de nó, além dos taints de nó, não é obrigatório, mas isso é recomendável porque você se beneficia de um maior controle sobre a programação.

Conselhos e práticas recomendadas

Após configurar o isolamento de nós, recomendamos que você faça isto:

  • Ao criar novos pools de nós, impeça que a maioria das cargas de trabalho gerenciadas pelo GDC seja executada nesses nós adicionando o próprio taint a esses pools de nós.

  • Sempre que você implantar novas cargas de trabalho no cluster, como ao instalar ferramentas de terceiros, faça a auditoria das permissões exigidas pelos pods. Sempre que possível, evite implantar cargas de trabalho que usam permissões elevadas para nós compartilhados.

Limitações

As seguintes limitações se aplicam a pods em execução em um pool de nós isolado:

  • Os invasores ainda podem iniciar ataques de negação de serviço (DoS) no nó comprometido.

  • Se você implantar recursos DaemonSet que tenham permissões elevadas e possam tolerar qualquer taint, esses pods poderão ser um caminho para o escalonamento de privilégios de um nó comprometido.

  • Os nós comprometidos ainda podem ler muitos recursos, incluindo todos os pods e namespaces no cluster.

  • Os nós comprometidos podem acessar secrets e credenciais usadas por todos os pods em execução nesse nó.

  • Os nós comprometidos ainda podem ignorar as políticas de saída de rede.

  • O uso de um pool de nós separado para isolar as cargas de trabalho pode afetar a economia, o escalonamento automático e a utilização de recursos.

  • Algumas cargas de trabalho gerenciadas pelo GDC precisam ser executadas em todos os nós do cluster e são configuradas para tolerar todos os taints.

A seguir