Introdução | Traefik
- Introdução | Traefik
1. O que é o Traefik
O Traefik é um reverse proxy e load balancer moderno, orientado a cloud-native, que se configura dinamicamente a partir do ambiente (Docker, Kubernetes, Swarm, etc).
Principais diferenciais
- Configuração automática via labels
- HTTPS automático com Let’s Encrypt
- Hot reload (sem restart)
- Middlewares (auth, redirect, headers, rate limit)
- Observabilidade nativa (dashboard + métricas)
2. Arquitetura (conceito essencial)
O Traefik funciona com 3 camadas principais:
2.1 EntryPoints
São as portas de entrada
http → :80
https → :443
2.2 Routers
Definem como o tráfego entra
- Domínio (
Host) - Path (
PathPrefix) - EntryPoint
- TLS
2.3 Services
Definem para onde o tráfego vai
- Container
- Porta interna
- Load balancing
2.4 Middlewares
Camada intermediária:
- Redirect HTTP → HTTPS
- Basic Auth
- Headers
- Rate limit
3. Tipos de Configuração
Traefik usa dois tipos de configuração:
3.1 Static Configuration (inicialização)
Define como o Traefik funciona
- EntryPoints
- Providers
- Certificados
- Dashboard
👉 Não muda em runtime
3.2 Dynamic Configuration
Define rotas e regras
- Routers
- Services
- Middlewares
👉 Muda dinamicamente (labels, arquivos, CRDs)
4. Traefik com Docker (Base sólida)
4.1 docker-compose.yml (Traefik)
version: "3.9"
services:
traefik:
image: traefik:v3.0
command:
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# EntryPoints
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
# HTTPS / Let's Encrypt
- "--certificatesresolvers.le.acme.email=admin@seudominio.com"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
4.2 Permissões importantes
chmod 600 letsencrypt/acme.json
5. Expondo um serviço com Labels (ESSENCIAL)
5.1 Exemplo simples (HTTP)
services:
app:
image: nginx
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`app.localhost`)"
- "traefik.http.routers.app.entrypoints=web"
6. HTTPS com Let’s Encrypt (PRODUÇÃO)
6.1 Router HTTPS
labels:
- "traefik.enable=true"
# Router
- "traefik.http.routers.app.rule=Host(`app.seudominio.com`)"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.routers.app.tls=true"
- "traefik.http.routers.app.tls.certresolver=le"
# Service
- "traefik.http.services.app.loadbalancer.server.port=80"
7. Redirecionar HTTP → HTTPS (OBRIGATÓRIO)
7.1 Middleware de redirect
labels:
- "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"
7.2 Router HTTP
labels:
- "traefik.http.routers.app-http.rule=Host(`app.seudominio.com`)"
- "traefik.http.routers.app-http.entrypoints=web"
- "traefik.http.routers.app-http.middlewares=redirect-https"
8. Middlewares Importantes
8.1 Basic Auth
htpasswd -nb user senha
labels:
- "traefik.http.middlewares.auth.basicauth.users=user:HASH"
Aplicando:
- "traefik.http.routers.app.middlewares=auth"
8.2 Headers de Segurança
labels:
- "traefik.http.middlewares.secure.headers.sslredirect=true"
- "traefik.http.middlewares.secure.headers.stsseconds=31536000"
- "traefik.http.middlewares.secure.headers.contenttypenosniff=true"
8.3 Rate Limit
labels:
- "traefik.http.middlewares.ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.ratelimit.ratelimit.burst=50"
9. Dashboard do Traefik
9.1 Expor com segurança
labels:
- "traefik.http.routers.traefik.rule=Host(`traefik.seudominio.com`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=le"
- "traefik.http.routers.traefik.middlewares=auth"
10. Providers
Traefik pode consumir config de:
- Docker ✅
- File
- Kubernetes
- Consul
- Nomad
Provider File (exemplo)
http:
routers:
app:
rule: "Host(`app.seudominio.com`)"
service: app
tls: {}
services:
app:
loadBalancer:
servers:
- url: "http://127.0.0.1:8080"