P0.2 · DNS, Ingress e TLS
Depende de P0.1. Skills: `/dns`, `/k8s-ecomsmart`.
O prompt
Leia as skills /dns e /k8s-ecomsmart. Publique o projeto radar nos domínios abaixo, zona ecomsmart.com.br no Cloudflare.
1. Registros
| Host | Tipo | Alvo | Proxy |
|---|---|---|---|
radar | A | IP do cluster | DNS only |
roi | A | idem | DNS only |
api.radar | A | idem | DNS only |
Descubra o IP consultando um Ingress que já funciona. Não chute.
Proxy desligado porque o cert-manager valida por HTTP-01 e o proxy da Cloudflare quebra o desafio. Para ligar o proxy depois, migramos para DNS-01 — registre isso no README.
2. Ingress
Um por host, ingressClassName: nginx, anotação cert-manager.io/cluster-issuer: letsencrypt-prod — confirme o nome do ClusterIssuer existente antes de usar.
radar.ecomsmart.com.br→radar-web:8000, secretradar-tlsroi.ecomsmart.com.br→radar-web:8000, secretroi-tlsapi.radar.ecomsmart.com.br→radar-web:8000, secretradar-api-tls
Anotações:
nginx.ingress.kubernetes.io/proxy-body-size: 10m
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# só no host de API:
nginx.ingress.kubernetes.io/limit-rps: "20"
Gotcha registrado na skill do GitLab: já apareceu Ingress ganhando regra de host duplicada sozinho, apontando para porta interna errada, dando 503 com todo o resto certo. Depois de aplicar:
kubectl -n producao get ingress -o jsonpath=\
'{range .items[*]}{.metadata.name}{" -> "}{.spec.rules[*].host}{"\n"}{end}'
Confirme que nenhum host aparece em dois Ingress.
3. Django
Atualize ALLOWED_HOSTS e CSRF_TRUSTED_ORIGINS. Roteie por host com middleware simples: roi. cai no app roi, o resto no app público. Não use subdomínio como tenant.
Critérios de aceite
curl -I https://radar.ecomsmart.com.br/healthzretorna 200 com certificado válido. Mostre a saída- O mesmo para
roi.eapi.radar. kubectl -n producao get certificatemostra os três comREADY=True- Nenhum host duplicado entre Ingress
Commit em k8s/ e suba pelo pipeline. Aplicação manual só para teste.