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 do Google Distributed Cloud (GDC) com isolamento físico. O isolamento de nós com pools de nós dedicados melhora a segurança do cluster, oferecendo controle preciso sobre onde os pods específicos são executados no cluster.

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

  • Redução do risco de ataques de escalonamento de privilégios no cluster do Kubernetes.
  • Mais controle sobre os pods que exigem recursos adicionais.

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

Este documento é destinado a públicos 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êiner. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Por que isolar minhas cargas de trabalho?

Embora não seja obrigatório, dedicar pools de nós a cargas de trabalho de contêiner 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 funcionalidades e recursos específicos 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 você precisa 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 as cargas de trabalho em um pool de nós dedicado:

  • Taints de nó: informa 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 você precisa usar apenas com outros recursos de isolamento, como contêineres e contas de serviço com privilégios mínimos. 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 limitações a seguir 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