Skip to main content

Network Policies | Kubernetes

  • Network Policies | Kubernetes

As Network Policies no Kubernetes são recursos que permitem controlar o tráfego de rede entre pods no cluster. Elas são usadas para definir regras de acesso, especificando quais conexões de entrada (ingress) e saída (egress) são permitidas para um conjunto de pods.

Por padrão, no Kubernetes, todos os pods podem se comunicar entre si (rede "aberta"). As Network Policies permitem restringir esse comportamento e implementar isolamento de rede.


Estrutura de uma Network Policy

Uma Network Policy é configurada por meio de um manifesto YAML. Aqui está a estrutura básica:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: exemplo-policy
namespace: default
spec:
podSelector:
matchLabels:
app: exemplo
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432

Explicação do Exemplo

  1. metadata:

    • name: Nome da Network Policy.
    • namespace: Namespace onde a policy será aplicada.
  2. podSelector:

    • Define os pods aos quais a política se aplica (neste caso, app: exemplo).
  3. policyTypes:

    • Especifica se a política é para tráfego de entrada (Ingress), saída (Egress), ou ambos.
  4. ingress:

    • Define as regras para permitir tráfego de entrada nos pods selecionados.
    • No exemplo, permite tráfego de pods com o rótulo app: frontend para a porta 8080 (protocolo TCP).
  5. egress:

    • Define as regras para permitir tráfego de saída dos pods selecionados.
    • No exemplo, permite tráfego para pods com o rótulo app: database na porta 5432 (protocolo TCP).

Aplicando a Network Policy

  1. Crie o manifesto YAML da política.
  2. Aplique ao cluster com o comando:
    kubectl apply -f exemplo-policy.yaml

Comportamento Padrão

  • Se nenhuma Network Policy for aplicada a um pod, ele pode se comunicar com qualquer outro pod no cluster.
  • Quando uma Network Policy é aplicada a um pod, o tráfego permitido é apenas o especificado na política. Todo o tráfego não listado é bloqueado.

Casos de Uso Comuns

  1. Isolar Pods por Aplicação: Exemplo: Apenas o frontend pode acessar o backend.

    ingress:
    - from:
    - podSelector:
    matchLabels:
    app: frontend
  2. Restringir Acesso à Internet: Apenas pods com a label allow-internet podem acessar a internet.

    egress:
    - to:
    - ipBlock:
    cidr: 0.0.0.0/0
  3. Permitir Acesso Apenas a um Subconjunto de Pods: Exemplo: Permitir que apenas o namespace monitoring acesse pods específicos.

    ingress:
    - from:
    - namespaceSelector:
    matchLabels:
    name: monitoring

Comandos Úteis

  1. Listar Network Policies:

    kubectl get networkpolicy -n <namespace>
  2. Descrever uma Network Policy:

    kubectl describe networkpolicy <nome> -n <namespace>
  3. Deletar uma Network Policy:

    kubectl delete networkpolicy <nome> -n <namespace>

Importante

  • CNI Plugin: O suporte a Network Policies depende do plugin de rede usado no cluster. Plugins como Calico, Cilium, e Weave Net suportam Network Policies. Certifique-se de que o seu cluster tem um CNI que suporte essas políticas.
  • Estratégia de Bloqueio: Sempre teste suas políticas para evitar bloqueios acidentais de tráfego essencial.