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)

  1. Salve o arquivo como: Atividade_12_1_SeuNome.md
  2. 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