Ingress no Kubernetes: Guia Prático para Roteamento HTTP e TLS com Ingress Controller
O que é Ingress e qual o papel do Ingress Controller
- Ingress é um recurso declarativo que define como o tráfego HTTP/HTTPS deve ser encaminhado dentro do cluster, direcionando as requisições para os Services corretos com base em hostname e caminho da URL.
- Funciona como um "portão de entrada" que permite expor vários serviços por um único ponto de acesso.
- Ingress Controller é o componente que efetivamente interpreta essas regras e as aplica, atuando como um proxy reverso que oferece balanceamento, TLS e roteamento avançado.
- Exemplos populares: NGINX Ingress Controller, Traefik, HAProxy Ingress e Envoy (em Service Mesh).
- Sem um Ingress Controller, o recurso Ingress permanece inativo; o controller é quem realmente manipula o tráfego.
Host / Path routing e TLS básico
- Host routing: o tráfego é encaminhado conforme o cabeçalho Host. Ex.:
app1.example.comdireciona para Service A,app2.example.compara Service B. - Path routing: o caminho da URL diferencia os serviços, como
/apipara backend e/apppara frontend. - Combinar host e path permite roteamentos muito flexíveis.
Exemplo simples de Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: exemplo-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
TLS básico
Para habilitar HTTPS, o Ingress aceita uma seção tls que aponta para um Secret contendo o certificado e a chave privada.
spec:
tls:
- hosts:
- app.example.com
secretName: tls-secret
O Ingress Controller usa esse certificado para criptografar o tráfego externo. É comum utilizar ferramentas como cert-manager para automatizar a emissão e renovação de certificados, por exemplo com Let's Encrypt.
Service × Ingress – principais diferenças
| Aspecto | Service (NodePort/LoadBalancer) | Ingress (com Controller) |
|---|---|---|
| Escopo | Expõe uma porta TCP/UDP; pode ser interno ou externo | Regras HTTP/HTTPS complexas para vários serviços por host e path |
| Balanceamento | Simples, por serviço | Avançado, com roteamento baseado em URL e hostname |
| Protocolos suportados | TCP, UDP e genéricos | Principalmente HTTP/HTTPS |
| TLS | Geralmente gerenciado fora do cluster (LB cloud) ou via Service | Gerenciado diretamente via Ingress e Secrets Kubernetes |
| Complexidade | Configuração rápida e simples | Requer instalação e configuração de um Ingress Controller |
| Uso típico | Expor um único serviço isolado ou protocolos não‑HTTP | Consolidar múltiplos serviços HTTP/HTTPS em um único ponto de entrada |
| Custo em nuvem | Um balanceador dedicado por serviço | Um único LB para vários serviços, reduzindo custos |
Resumo e recomendações
- Service (NodePort/LoadBalancer): escolha quando precisar expor um único serviço, usar protocolos não‑HTTP ou quiser a solução mais simples.
- Ingress: prefira quando houver múltiplos serviços HTTP/HTTPS, necessidade de roteamento por host/path, TLS integrado ou quiser economizar usando um único Load Balancer.
- Sempre tenha um Ingress Controller instalado e configurado no cluster; ele é indispensável para que o recurso Ingress funcione.
- Atualize os registros DNS apontando para o IP público do Ingress Controller (ou do Load Balancer que ele provisiona).
Primeiros passos rápidos
Para iniciar, instale o NGINX Ingress Controller. Depois, crie um Ingress com regras básicas como o exemplo acima e verifique o roteamento. Essa prática inicial já oferece uma base sólida para gerenciar acessos HTTP de forma profissional e escalável.