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
-
metadata:
name: Nome da Network Policy.namespace: Namespace onde a policy será aplicada.
-
podSelector:
- Define os pods aos quais a política se aplica (neste caso,
app: exemplo).
- Define os pods aos quais a política se aplica (neste caso,
-
policyTypes:
- Especifica se a política é para tráfego de entrada (
Ingress), saída (Egress), ou ambos.
- Especifica se a política é para tráfego de entrada (
-
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: frontendpara a porta 8080 (protocolo TCP).
-
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: databasena porta 5432 (protocolo TCP).
Aplicando a Network Policy
- Crie o manifesto YAML da política.
- 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
-
Isolar Pods por Aplicação: Exemplo: Apenas o frontend pode acessar o backend.
ingress:
- from:
- podSelector:
matchLabels:
app: frontend -
Restringir Acesso à Internet: Apenas pods com a label
allow-internetpodem acessar a internet.egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0 -
Permitir Acesso Apenas a um Subconjunto de Pods: Exemplo: Permitir que apenas o namespace
monitoringacesse pods específicos.ingress:
- from:
- namespaceSelector:
matchLabels:
name: monitoring
Comandos Úteis
-
Listar Network Policies:
kubectl get networkpolicy -n <namespace> -
Descrever uma Network Policy:
kubectl describe networkpolicy <nome> -n <namespace> -
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.