🧩 Exercícios: Ingress Controllers (Traefik, Kong e Envoy)
Extra Guia de Redes de Computadores • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 12.1 — O Papel do Ingress Controller no Kubernetes
Contexto: Explique por que um recurso kind: Ingress do Kubernetes não funciona sem a presença de um Ingress Controller ativo no cluster.
Resultado Esperado
O recurso `Ingress` no Kubernetes é apenas um manifesto declarativo de dados (uma especificação de rotas e hosts). O `Ingress Controller` (como Traefik, NGINX Ingress ou Kong) é o processo de software ativo que escuta a API do Kubernetes, interpreta esses manifestos e reconfigura seus proxies de borda em tempo real para rotear o tráfego externo para os Pods internos.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome.md - Envie na tarefa:
Atividade Cap 12 - Ingress Controllers
🔑 Gabarito de Código & Solução Comentada
- Ingress Resource: A especificação (declarativa).
- Ingress Controller: O motor de execução que implementa as rotas.
🎯 Nível 2: Prática
Problema 12.2 — Roteamento Dinâmico com Labels do Traefik no Docker Compose
Escreva um arquivo docker-compose.yml que provisione o Traefik v3 e um microsserviço whoami, expondo-o no subdomínio whoami.localhost via labels.
🔑 Gabarito de Código & Solução Comentada
version: '3.8'
services:
traefik:
image: traefik:v3.0
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: traefik/whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
🎯 Nível 3: Integração
Problema 12.3 — Manifesto Kubernetes Ingress com TLS e Path-Based Routing
Escreva um manifesto Kubernetes Ingress padrão da API networking.k8s.io/v1 para o domínio api.loja.com, direcionando /v1/catalogo para o serviço catalogo-svc (porta 80) e /v1/carrinho para o serviço carrinho-svc (porta 80), com terminação TLS via secret loja-tls-cert.
🔑 Gabarito de Código & Solução Comentada
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: loja-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: traefik
tls:
- hosts:
- api.loja.com
secretName: loja-tls-cert
rules:
- host: api.loja.com
http:
paths:
- path: /v1/catalogo
pathType: Prefix
backend:
service:
name: catalogo-svc
port:
number: 80
- path: /v1/carrinho
pathType: Prefix
backend:
service:
name: carrinho-svc
port:
number: 80
🎯 Nível 4: Desafio
Problema 12.4 — Configuração Declarativa do Kong Gateway com Rate Limiting e Validação JWT
Escreva um arquivo de configuração declarativa (decK / Kong Declarative YAML) criando um serviço auth-service, uma rota /auth e ativando os plugins oficiais de rate-limiting (100 req/min por IP) e autenticação de token jwt.
🔑 Gabarito de Código & Solução Comentada
_format_version: "3.0"
services:
- name: servico-usuarios
url: http://usuarios.internal:3000
routes:
- name: rota-usuarios
paths:
- /api/usuarios
strip_path: true
plugins:
- name: rate-limiting
config:
minute: 100
policy: local
fault_tolerant: true
- name: jwt
config:
claims_to_verify:
- exp
secret_is_base64: false