O que é o Traefik
O Traefik e um proxy reverso e load balancer moderno projetado especificamente para ambientes de containers e microsservicos. Ao contrario do NGINX e do HAProxy, o Traefik foi construido do zero para se integrar automaticamente com orquestradores como Docker, Kubernetes, Cônsul e outros - sem precisar reiniciar ou reeditar arquivos de configuração toda vez que um serviço novo sobe.
Ele foi criado pela empresa francesa Containous (hoje Traefik Labs) e lançado em 2016 como projeto open source. Hoje o repositório no GitHub tem mais de 50 mil estrelas e o Traefik e usado em produção por milhares de empresas ao redor do mundo, de startups a grandes corporações.
O problema que o Traefik resolve e clássico em ambientes de containers: toda vez que você sobe um novo container ou servi, precisa atualizar a configuração do proxy reverso para rotear o tráfego corretamente. Em ambientes dinâmicos com dezenas ou centenas de serviços subindo e descendo, isso se torna inviável manualmente. O Traefik descobre e configura as rotas automaticamente através de labels ou anotações.
Como o Traefik funciona
A arquitetura do Traefik e organizada em três conceitos principais: providers, routers e services. Os providers são as fontes de configuração - Docker, Kubernetes, arquivos estáticos, etc. Os routers definem as regras de roteamento (qual domínio ou path vai para qual serviço). Os services definem como o tráfego e distribuído entre as instâncias.
Quando você sobe um container Docker com a label traefik.http.routers.meuapp.rule=Host('meuapp.example.com'), o Traefik detecta automaticamente via API do Docker daemon e cria o router correspondente em tempo real, sem nenhum arquivo de configuração adicional. Quando o container para, o router e removido automaticamente.
O Traefik também tem suporte nativo a SSL automático via Let's Encrypt. Você configura um resolver ACME uma vez e o Traefik passa a emitir e renovar certificados automaticamente para cada domínio que aparece nas labels dos containers. Não e necessário gerenciar certificados manualmente nem usar Certbot separado.
O Traefik expõe um dashboard web na porta 8080 por padrão. Em produção, sempre proteja esse dashboard com autenticação básica ou desative-o completamente para não expor informações da sua infraestrutura.
Principais recursos
O Traefik tem um conjunto de recursos que o tornam muito atraente para quem trabalha com containers:
- Service Discovery automático: detecta novos serviços em tempo real via Docker, Kubernetes, Cônsul, ECS e outros providers. Sem necessidade de reiniciar o proxy.
- SSL automático: integra com Let's Encrypt para emitir, renovar e gerenciar certificados TLS automaticamente por domínio.
- Load balancing: suporte a round-robin, weighted round-robin e sticky sessions.
- Middlewares: componentes plugaveis para adicionar autenticação, rate limiting, redirecionamentos, cabeçalhos HTTP e compressão nas rotas.
- Métricas e observabilidade: exporta métricas para Prometheus, Datadog e outros. Suporte nativo a tracing com OpenTelemetry.
- TCP e UDP: além de HTTP/HTTPS, o Traefik roteia tráfego TCP e UDP, útil para bancos de dados e outros protocolos.
Como começar: instalação com Docker Compose
A forma mais rápida de subir o Traefik e via Docker Compose. Veja um exemplo básico:
version: '3'
services:
traefik:
image: traefik:v3.1
command:
- '--api.insecure=true'
- '--providers.Docker=true'
- '--providers.Docker.exposedbydefault=false'
- '--entrypoints.web.address=:80'
ports:
- '80:80'
- '8080:8080'
volumes:
- '/var/run/Docker.sock:/var/run/Docker.sock:ro'
meuapp:
image: nginx
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.meuapp.rule=Host("meuapp.localhost")'
- 'traefik.http.routers.meuapp.entrypoints=web'Neste exemplo, o Traefik sobe na porta 80 e monitora o Docker daemon. O container meuapp fica acessível em meuapp.localhost automaticamente via as labels. Qualquer novo container com traefik.enable=true e as labels corretas será roteado automaticamente.
Para adicionar SSL em produção, inclua o resolver Let's Encrypt nas opcoes do Traefik e adicione as labels de TLS nos containers:
command:
- '[email protected]'
- '--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json'
- '--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web'
# No container do app:
labels:
- 'traefik.http.routers.meuapp.tls=true'
- 'traefik.http.routers.meuapp.tls.certresolver=letsencrypt'O arquivo acme.json que armazena os certificados Let's Encrypt deve ter permissão 600. O Traefik não inicia se as permissões estiverem erradas. Rode chmod 600 acme.json antes de subir o serviço.
Exemplo prático: roteando múltiplos serviços
Imagine que você tem uma aplicação com um frontend React, uma API Node.js e um serviço de autenticação. Com o Traefik, você roteia tudo pelo mesmo IP e porta 443 usando apenas labels no Docker-compose.yml:
frontend:
image: meu-frontend
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.frontend.rule=Host("app.example.com")'
- 'traefik.http.routers.frontend.tls.certresolver=letsencrypt'
api:
image: meu-backend
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.api.rule=Host("app.example.com") && PathPrefix("/api")'
- 'traefik.http.routers.api.tls.certresolver=letsencrypt'
auth:
image: meu-auth
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.auth.rule=Host("auth.example.com")'
- 'traefik.http.routers.auth.tls.certresolver=letsencrypt'O Traefik cuida do roteamento, SSL e renovação de certificados para os três serviços automaticamente. Se você escalar a API para 3 replicas com Docker-compose scale api=3, o Traefik vai distribuir o tráfego entre as três instâncias via round-robin sem nenhuma configuração adicional.
Comparação com alternativas
O Traefik compete principalmente com NGINX Proxy Manager, HAProxy e Caddy. Cada um tem seus pontos fortes:
- NGINX: extremamente performatico e flexível, mas configuração manual e estática. Exige reload a cada mudança. Não tem service discovery nativo. Melhor para ambientes estáticos ou quando você precisa de controle total sobre a configuração.
- Caddy: também tem SSL automático e configuração simples, mas com menos integração com Docker e Kubernetes comparado ao Traefik. Bom para sites e APIs simples.
- HAProxy: altíssima performance para load balancing, mas configuração complexa e sem service discovery automático. Melhor para ambientes de alto volume com requisitos específicos de balanceamento.
O Traefik vence claramente em ambientes dinâmicos de containers. Se o seu ambiente muda com frequência (escalonamento automático, deploys contínuos, múltiplos serviços), o Traefik economiza horas de trabalho de configuração manual.
Pontos positivos e limitações
Os pontos fortes do Traefik são evidentes: service discovery automático, SSL sem frição, dashboard visual e uma curva de aprendizado razoavelmente baixa para quem já trabalha com Docker. A documentação oficial e completa e bem mantida.
Nas limitações: o Traefik pode ser mais complexo de depurar quando algo não funciona. As rotas são definidas distribuídas nas labels dos containers, o que pode dificultar ter uma visão centralizada de toda a configuração em sistemas grandes. O dashboard ajuda, mas não substitui uma documentação centralizada das rotas.
Outro ponto: alguns recursos avançados como circuit breaker, sticky sessions por cookie e autenticação OAuth estão disponíveis apenas no Traefik Enterprise, a versão paga. A versão community cobre 95% dos casos de uso, mas e bom saber quais limites existem antes de escolher a ferramenta.
Nunca monte o socket Docker (/var/run/Docker.sock) com permissão de escrita em produção. Use a opcao :ro (read-only) para que o Traefik apenas leia o estado dos containers sem poder criar ou deletar serviços.
Casos de uso reais
O Traefik brilha em contextos específicos. Veja quem se beneficia mais:
- Dev rodando múltiplos projetos localmente: sobe vários projetos em portas diferentes e o Traefik roteia por subdomínio (projeto1.localhost, projeto2.localhost) sem conflito de porta.
- Startup com deploy continuo: a cada deploy, novos containers sobem e o Traefik detecta automaticamente sem precisar de intervenção manual ou restart do proxy.
- Time usando Kubernetes: o Traefik funciona como Ingress Controller no Kubernetes, substituindo o nginx-ingress com configuração via anotações nos recursos Ingress.
- Dev solo com VPS: um VPS com Docker + Traefik consegue hospedar dezenas de aplicações pequenas com SSL automático em cada uma, gastando apenas o custo do VPS.
Dicas e boas práticas
Use a rede Docker dedicada para o Traefik e adicione seus containers a ela. Isso isola o tráfego roteado e evita que o Traefik tente rotear containers que não deveriam ser expostos.
Habilite o log de acesso (--accesslog=true) durante a fase de configuração para depurar problemas de roteamento. Cada requisição aparece com o router que foi acionado, o que facilita muito o diagnóstico.
Para ambientes com muitos serviços, use arquivos de configuração dinâmica (providers.file) para definir middlewares reutilizáveis como autenticação básica ou rate limiting. Assim você aplica o mesmo middleware em vários routers referenciando apenas o nome, sem duplicar a configuração.
Vale a pena?
Se você trabalha com Docker ou Kubernetes, o Traefik e uma das melhores ferramentas que você pode adicionar ao seu toolkit. A redução de trabalho manual de configuração de proxy e certificados SSL e significativa, especialmente em ambientes com vários serviços ou com deploys frequentes.
Para quem esta começando com containers e quer uma forma simples de expor vários serviços com HTTPS, o Traefik e muito mais acessível do que configurar NGINX manualmente. A curva inicial e pequena e os resultados aparecem rápido.
O próximo passo e direto: adicione o Traefik ao seu Docker-compose.yml atual e converta as configurações de porta de cada serviço para labels. Em menos de uma hora você vai ter todos os seus serviços roteados automaticamente com SSL funcionando.
Comentários
Deixar um comentárioVocê precisa ter uma conta no CuritibaBlog para comentar.