0 XP
Módulo 8 · Kubernetes e Helm

Ingress, TLS e exposição externa

Avançado 45 min+25 XPIngress NGINXcert-manager

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 -i

Ingress 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. 1. Você criou um Ingress e nada acontece. Causa mais provável?

  2. 2. Você cria um Ingress mas nada acontece. O que falta com mais frequência?

  3. 3. Quem renova o certificado Let's Encrypt no cluster?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima