Ingress, TLS e exposição externa
Objetivos desta aula
- Instalar ingress controller
- Rotear por host e path
- Automatizar certificado TLS
Ingress é regra de roteamento HTTP; quem executa é o ingress controller (NGINX, Traefik, ou o gateway do provedor). Sem controller instalado, o objeto Ingress existe e nada acontece — confusão frequente de quem está começando.
Com Ingress você concentra em um único ponto de entrada o roteamento por host e path, o TLS e políticas como redirect e rate limit. No CloudShop, o frontend responde na raiz e a API em /api, com o mesmo certificado.
cert-manager automatiza emissão e renovação de certificados via ACME, transformando um risco recorrente (certificado expirado) em processo. Em produção, monitore a validade também como métrica.
1. O problema da exposição
Um LoadBalancer por serviço custa caro e não entende HTTP. O Ingress define regras de roteamento HTTP(S) por host e caminho, e um Ingress Controller (ingress-nginx, Traefik, AWS Load Balancer Controller) as executa atrás de um único balanceador.
2. Regras por host e path
loja.cloudshop.dev/ vai para o frontend, loja.cloudshop.dev/api para a API. O campo ingressClassName escolhe qual controller atende.
3. TLS automático com cert-manager
O cert-manager conversa com a Let's Encrypt via ACME, cria o certificado num Secret e renova antes de vencer. Você só declara um ClusterIssuer e a anotação no Ingress.
4. Gateway API: o sucessor
A Gateway API separa papéis (infra cuida do Gateway, time cuida das HTTPRoutes) e suporta divisão de tráfego por peso — útil para canary. Vagas novas já pedem conhecê-la.
5. Depurando
Siga o caminho: DNS aponta para o balanceador? → controller recebeu a regra (kubectl describe ingress)? → Service tem endpoints? → Pod responde na porta? Erro 503 do controller costuma significar Service sem endpoints.
Na prática
Ingress do CloudShop com TLS
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cloudshop
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "15"
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts: [cloudshop.dev]
secretName: cloudshop-tls
rules:
- host: cloudshop.dev
http:
paths:
- path: /api
pathType: Prefix
backend:
service: { name: cloudshop-api, port: { number: 80 } }
- path: /
pathType: Prefix
backend:
service: { name: cloudshop-web, port: { number: 80 } }Nota de segurança: Force ssl-redirect e considere rate limit em rotas de login para reduzir força bruta.
Instalar controller e depurar
bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl -n ingress-nginx wait --for=condition=ready pod -l app.kubernetes.io/component=controller --timeout=180s
kubectl get ingress
kubectl describe ingress cloudshop
kubectl -n ingress-nginx logs deploy/ingress-nginx-controller --tail=50
curl -H "Host: cloudshop.dev" http://localhost/api/health -iIngress com TLS automático
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cloudshop
namespace: cloudshop
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod # gera e renova o certificado
spec:
ingressClassName: nginx
tls:
- hosts: [loja.cloudshop.dev]
secretName: cloudshop-tls
rules:
- host: loja.cloudshop.dev
http:
paths:
- path: /api
pathType: Prefix
backend: { service: { name: api, port: { number: 80 } } }
- path: /
pathType: Prefix
backend: { service: { name: frontend, port: { number: 80 } } }Por que isso importa
Toda aplicação precisa ser alcançável com HTTPS; Ingress é o mecanismo padrão para isso.
Erro comum
Criar Ingress sem controller instalado e concluir que 'o Kubernetes não funciona'.
Dica de produção
Timeouts do Ingress devem ser coerentes com os da aplicação, como no Nginx tradicional.
Alerta de segurança
Ingress mal configurado pode expor rotas administrativas; revise paths e autenticação.
Pergunta de entrevista
Qual a diferença entre Service LoadBalancer e Ingress?
Glossário
- ingress controller
- Componente que implementa as regras declaradas em objetos Ingress.
- ClusterIssuer
- Recurso do cert-manager que define a autoridade emissora de certificados.
- Ingress Controller
- Proxy que lê objetos Ingress e roteia o tráfego HTTP de fato.
- cert-manager
- Operador que emite e renova certificados TLS automaticamente.
- Gateway API
- API moderna de roteamento que substitui o Ingress com mais recursos.
Conexão com o CloudShop
Publicar frontend e API do CloudShop sob o mesmo domínio com HTTPS.
Quiz da aula
1. Você criou um Ingress e nada acontece. Causa mais provável?
2. Você cria um Ingress mas nada acontece. O que falta com mais frequência?
3. Quem renova o certificado Let's Encrypt no cluster?
Minhas anotações
Salvo automaticamente neste navegador.