This content originally appeared on DEV Community and was authored by DeividFerraz
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…
This content originally appeared on DEV Community and was authored by DeividFerraz