Ingress no Kubernetes: Guia Prático para Roteamento HTTP e TLS com Ingress Controller

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.com direciona para Service A, app2.example.com para Service B.
  • Path routing: o caminho da URL diferencia os serviços, como /api para backend e /app para 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

AspectoService (NodePort/LoadBalancer)Ingress (com Controller)
EscopoExpõe uma porta TCP/UDP; pode ser interno ou externoRegras HTTP/HTTPS complexas para vários serviços por host e path
BalanceamentoSimples, por serviçoAvançado, com roteamento baseado em URL e hostname
Protocolos suportadosTCP, UDP e genéricosPrincipalmente HTTP/HTTPS
TLSGeralmente gerenciado fora do cluster (LB cloud) ou via ServiceGerenciado diretamente via Ingress e Secrets Kubernetes
ComplexidadeConfiguração rápida e simplesRequer instalação e configuração de um Ingress Controller
Uso típicoExpor um único serviço isolado ou protocolos não‑HTTPConsolidar múltiplos serviços HTTP/HTTPS em um único ponto de entrada
Custo em nuvemUm balanceador dedicado por serviçoUm único LB para vários serviços, reduzindo custos

Resumo e recomendações

  1. Service (NodePort/LoadBalancer): escolha quando precisar expor um único serviço, usar protocolos não‑HTTP ou quiser a solução mais simples.
  2. 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.
  3. Sempre tenha um Ingress Controller instalado e configurado no cluster; ele é indispensável para que o recurso Ingress funcione.
  4. 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.