Pular para o conteúdo principal

🕸️ Networking

Esta página explica como os pods conversam entre si e como limitar quem pode falar com quem.

Existem duas camadas de rede, e cada uma é configurada em um lugar:

CamadaO que controlaOnde configurar
Fora do clusterEntrada e saída (IPs flutuantes, grupos de segurança, balanceadores)Painel Nuvion, em Computar
Dentro do clusterComunicação entre pods (DNS, Services, Network Policies)kubectl

No cluster, todo pod recebe um IP próprio e consegue falar com qualquer outro pod, em qualquer node. Por padrão, nada é bloqueado.


🚀 Antes de começar​

🚀 1. Ver a rede do cluster​

  1. Acesse Computar > Kubernetes e clique no nome do cluster.
  2. Na aba Descrição geral, veja o campo Rede. Ele mostra a rede e a faixa de IPs dos nós (por exemplo, 10.0.0.0/24).

Rede do cluster na Descrição geral

🚀 2. Criar um pod e um Service de teste​

kubectl run web --image=nginx --port=80
kubectl expose pod web --name=web --port=80
kubectl get pod web -o wide

Aguarde o pod ficar Running. Anote o IP que ele recebeu.

🚀 3. Acessar de outro pod pelo nome (DNS)​

O cluster tem um DNS interno (CoreDNS): todo Service ganha um nome.

kubectl run cliente --rm -it --image=curlimages/curl --restart=Never -- curl -sS http://web

A página Welcome to nginx! aparece. O nome completo do Service é web.default.svc.cluster.local, no formato service.namespace.svc.cluster.local. Para falar com um Service de outro namespace, use pelo menos web.NAMESPACE.

🚀 4. Bloquear o acesso com uma Network Policy​

Uma Network Policy é uma regra de firewall dentro do cluster. Vamos permitir que o pod web receba conexões somente de pods com o rótulo acesso=permitido.

Crie o arquivo web-politica.yaml:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-somente-autorizados
spec:
podSelector:
matchLabels:
run: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
acesso: permitido
kubectl apply -f web-politica.yaml
kubectl get networkpolicy

O run: web é o rótulo que o comando kubectl run web adiciona ao pod automaticamente.

🚀 5. Testar a política​

Sem o rótulo (deve ser bloqueado):

kubectl run cliente-bloqueado --rm -it --image=curlimages/curl --restart=Never -- curl -sS -m 5 http://web

Resposta esperada: curl: (28) ... timed out

Com o rótulo (deve funcionar):

kubectl run cliente-ok --rm -it --labels=acesso=permitido --image=curlimages/curl --restart=Never -- curl -sS -m 5 http://web

Resposta esperada: a página Welcome to nginx!.

🚀 6. Bloquear tudo por padrão (opcional)​

Esta política bloqueia toda entrada nos pods do namespace, e só passa o que for liberado por outras políticas:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: negar-tudo
spec:
podSelector: {}
policyTypes:
- Ingress
aviso

Cuidado ao usar em um namespace que recebe tráfego de um Ingress. Depois de bloquear tudo, você precisa criar uma política liberando a origem do Ingress Controller, ou o site sai do ar.

✅ Como saber se deu certo​

No passo 5, o pod sem rótulo não consegue acessar o web, e o pod com rótulo consegue.

❗ Problemas comuns​

SintomaCausaSolução
O pod sem rótulo consegue acessarO plugin de rede do cluster não aplica Network PolicyFale com o suporte para confirmar o suporte a políticas
Could not resolve hostDNS interno com problemaConfira kubectl get pods -n kube-system e veja se o CoreDNS está Running
Connection refusedO Service aponta para a porta erradaConfira kubectl get svc web e a porta do container
Timeout sem política criadaService sem podsRode kubectl get endpoints web
Acesso de fora do cluster falhaPorta não liberada no grupo de segurançaVeja o passo 5 da página Services

🧹 Limpeza​

kubectl delete networkpolicy web-somente-autorizados negar-tudo
kubectl delete svc web
kubectl delete pod web

Se você não criou a política do passo 6, o comando acima mostra um aviso de not found para negar-tudo. Pode ignorar.

🧠 Dúvidas?​

Fale com nosso time de suporte técnico da SaveinCloud!