Marcio Cunha

Como isolar ambientes no Kubernetes com Network Policies de rede

Aprenda a usar Network Policies no Kubernetes para restringir o tráfego de rede entre namespaces, garantindo segurança estrita em clusters multi-tenant.

Marcio Cunha•4 min
Também disponível em:EnglishEspañol
Resumo
  • O Kubernetes por padrão permite que qualquer pod se comunique com qualquer outro pod em todo o cluster.
  • Network Policies funcionam como firewalls virtuais baseados em regras aplicadas diretamente aos seletores de pods.
  • Ambientes de homologação e produção exigem isolamento estrito para evitar vazamentos de dados e acessos indevidos.
  • A estratégia padrão de negação bloqueia todo o tráfego inicialmente, permitindo liberar apenas rotas estritamente necessárias.
  • Ferramentas modernas de monitoramento ajudam a validar o fluxo de pacotes e evitar quedas inesperadas de serviços.

Por que o isolamento de rede padrão no Kubernetes é um risco

Quando criamos um cluster do Kubernetes para hospedar várias aplicações, um detalhe crítico costuma passar despercebido: por padrão, a rede interna é totalmente aberta. Na prática, isso significa que qualquer aplicativo rodando em um namespace de testes ou homologação pode enviar requisições de rede diretamente para bases de dados sensíveis ou serviços críticos de produção. Se uma aplicação de testes for invadida por uma vulnerabilidade, o invasor ganha uma ponte livre para explorar o restante da infraestrutura corporativa.

Para blindar essa arquitetura sem precisar separar fisicamente os servidores, utilizamos as chamadas Network Policies, que funcionam essencialmente como regras de firewall configuradas por software dentro do próprio cluster. Assim como aprendemos ao auditar vulnerabilidades em imagens Docker no pipeline, a segurança em ambientes distribuídos deve ser aplicada em múltiplas camadas para evitar surpresas desagradáveis em horários de pico.

O conceito de tráfego leste-oeste em clusters compartilhados

No jargão de infraestrutura, chamamos de tráfego leste-oeste toda a comunicação que acontece lateralmente entre os diferentes componentes dentro do mesmo datacenter ou cluster. Em um ambiente compartilhado, conhecido no mercado como multi-tenant, dezenas de equipes diferentes dividem os mesmos recursos de computação. Sem regras rígidas, qualquer erro de configuração na camada de aplicação expõe dados confidenciais entre times distintos.

Isso se torna ainda mais crítico quando consideramos que falhas operacionais podem acontecer em qualquer etapa, exigindo estratégias robustas de contenção semelhantes às que utilizamos ao reverter falhas no Kubernetes automaticamente com Prometheus. Restringir a comunicação lateral entre namespaces garante que o raio de explosão de um incidente fique estritamente contido no escopo onde ele ocorreu.

Como funcionam as Network Policies na prática

As Network Policies são objetos nativos do Kubernetes que utilizam seletores baseados em rótulos, conhecidos como labels, para decidir quais conexões entram e saem de um pod. Na prática, elas operam em duas direções principais: o tráfego de entrada, chamado de ingress, e o tráfego de saída, conhecido como egress. Ao definir uma política, você pode dizer explicitamente que determinado microserviço só aceita conexões vindas do próprio namespace e de mais nenhum outro lugar.

Para colocar a mão na massa e aplicar essa barreira de segurança, o procedimento padrão exige a criação de arquivos de manifesto YAML que definem o comportamento padrão de negação. O exemplo prático abaixo demonstra uma política que bloqueia todo o tráfego de entrada para um namespace isolado:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
  namespace: homologacao
spec:
  podSelector: {}
  policyTypes:
  - Ingress

Passo a passo para implementar o bloqueio total e liberar exceções

A abordagem mais segura para ambientes sensíveis é adotar a estratégia de negação padrão e abrir apenas o estritamente necessário. Se você precisa permitir que o monitoramento ou uma ferramenta de rastreamento acesse seus pods, é preciso criar regras complementares que autorizem portas e IPs específicos. Para garantir que essa comunicação transcorra sem gargalos ocultos, muitas equipes também combinam essas regras com ferramentas de observabilidade e telemetria, similar ao que fazemos ao rastrear falhas em microsserviços com OpenTelemetry.

Abaixo estão as etapas recomendadas para configurar o isolamento rígido em seu cluster:

  1. Certifique-se de que sua rede de containers, conhecida tecnicamente como CNI (Container Network Interface), suporta Network Policies, como o Calico ou o Cilium.
  2. Aplique uma política de negação padrão (default-deny) em todos os namespaces que exigem isolamento estrito de homologação ou dados sensíveis.
  3. Crie regras de liberação específicas baseadas em rótulos para permitir apenas o tráfego legítimo entre microsserviços autorizados.

Armadilhas comuns e como validar suas regras de rede

Um erro clássico ao implementar Network Policies pela primeira vez é esquecer de liberar o tráfego de DNS interno do cluster, fazendo com que as aplicações parem de resolver nomes de domínios instantaneamente. Outro ponto crítico é assumir que o plugin de rede instalado suporta todas as nuances avançadas de regras baseadas em portas TCP e UDP, o que pode gerar falsos positivos de segurança.

Validar essas configurações antes de aplicá-las em servidores de grande escala evita interrupções indesejadas no negócio. Com uma estratégia bem desenhada de segmentação de rede, sua infraestrutura ganha a resiliência necessária para suportar crescimento acelerado sem abrir mão da conformidade e da segurança dos dados.