DEV Community

DeividFerraz
DeividFerraz

Posted on

🚀 Pods no Kubernetes (com 2 containers no mesmo Pod):

☝ Resumo do artigo:

  • Cliente → DNS/Host → IP pĂșblico (LB do ingress-nginx) -> Pod do ingress-nginx (Nginx) → Ingress (host + path).
  • Ingress decide quem recebe (host + path) e fala com Service. -> Service (ClusterIP:port, L4) → Endpoints (PodIP:targetPort).
  • Service seleciona Pods por labels e encaminha para PodIP:targetPort. -> Pod (containers compartilham o mesmo IP, portas diferentes).
  • Pod = mesmo IP para todos os containers; o que muda Ă© a porta.

🚱 O que Ă© um Pod:
Menor unidade implantĂĄvel, pode ter 1 ou mais containers.

  • Containers do mesmo Pod compartilham:
  • Network namespace → mesmo IP (o Pod IP), localhost comum
  • Volumes (se montados).

IMPORTANTE: VocĂȘ nĂŁo cria Pod “puro” na produção: cria um Deployment, que cria ReplicaSet, que cria Pods.

🧭 Por que usar Namespaces?

  • Isolam nomes: api1 em dev e api1 em prod.
  • Controlam acesso (RBAC), quotas, polĂ­ticas de rede.
  • Ciclo de vida: deletar o namespace remove tudo.

đŸ§Ș Exemplo prĂĄtico: duas APIs no mesmo Pod (api3a + api3b):
1) Deployment (um Pod com 2 containers, portas 8080 e 8081):
apiVersion: apps/v1
kind: Deployment
metadata:
name: api3
namespace: prod
spec:
replicas: 1
selector:
matchLabels: { app: api3 }
template:
metadata:
labels:
app: api3
svc-api3a: "true" # ajuda os Services a “enxergar” este Pod
svc-api3b: "true"
spec:
containers:

  • name: api3a image: https://suaiamgem ports: [{ name: http-api3a, containerPort: 8080 }] env: [{ name: ASPNETCORE_URLS, value: http://+:8080 }] readinessProbe: { httpGet: { path: "/", port: 8080 }, initialDelaySeconds: 5, periodSeconds: 10 } livenessProbe: { httpGet: { path: "/", port: 8080 }, initialDelaySeconds: 10, periodSeconds: 20 }
  • name: api3b image: https://suaimagem ports: [{ name: http-api3b, containerPort: 8081 }] env: [{ name: ASPNETCORE_URLS, value: http://+:8081 }] readinessProbe: { httpGet: { path: "/", port: 8081 }, initialDelaySeconds: 5, periodSeconds: 10 } livenessProbe: { httpGet: { path: "/", port: 8081 }, initialDelaySeconds: 10, periodSeconds: 20 } ⁉ - Por quĂȘ duas portas?
  • Containers do mesmo Pod compartilham IP, entĂŁo precisam portas diferentes.

CONTINUAÇÂO NO PRÒXIMO POST...

Top comments (0)