Traefik : Premières Impressions et Retour d’Expérience
Par Mathéo Pawelec, Étudiant
Traefik : Retour sur mes premiers pas
Si Ansible m’a aidé à déclarer l’état souhaité de mes machines, il me fallait encore un moyen simple et automatique de router le trafic HTTP/HTTPS vers mes différents services (Docker, VMs, bare-metal). Après plusieurs recommandations, j’ai plongé dans Traefik, un reverse-proxy / ingress controller écrit en Go.
Pourquoi j’ai choisi Traefik ?
- Configuration dynamique : Traefik interroge en continu vos providers (Docker, Kubernetes, fichiers…) et met à jour les routes à la volée — fini le
nginx -s reload
dès qu’un conteneur apparaît. - Let’s Encrypt intégré : génération + renouvellement des certificats sans script maison.
- Tableau de bord clair : on visualise routes, middlewares et points d’entrée en temps réel.
- Support natif de Docker/K8s : trois labels suffisent pour exposer un service.
Mes premières découvertes
-
Installation express
docker network create traefik docker compose -f traefik.yml up -d
-
Statique vs dynamique Statique : ports, providers, ACME. Dynamique : règles de routage, middlewares, certificats — modifiables sans redémarrage.
-
Labels Docker Exemple minimal :
labels: - "traefik.enable=true" - "traefik.http.routers.blog.rule=Host(`blog.example.com`)" - "traefik.http.services.blog.loadbalancer.server.port=3000"
-
Let’s Encrypt en 30 s : un
certresolver=le
dans les labels + une adresse mail → Traefik s’occupe du reste. -
Middlewares : redirection HTTPS, headers de sécurité, auth basique… déclarables via YAML ou un label.
Exemple complet : Traefik + Vaultwarden en HTTPS
1. Stack Traefik (traefik.yml
)
services:
traefik:
image: traefik:v3.0
restart: unless-stopped
command:
- '--providers.docker=true'
- '--providers.docker.exposedByDefault=false'
- '--entrypoints.web.address=:80'
- '--entrypoints.websecure.address=:443'
- '[email protected]'
- '--certificatesresolvers.le.acme.storage=/certs/acme.json'
- '--certificatesresolvers.le.acme.tlschallenge=true'
- '--api.dashboard=true'
ports:
- '80:80'
- '443:443'
volumes:
- '/var/run/docker.sock:/var/run/docker.sock:ro'
- './certs:/certs'
networks:
- traefik
networks:
traefik:
external: true
Pourquoi ? Deux entrypoints (
web
,websecure
), Let’s Encrypt stocké dansacme.json
, détection automatique des conteneurs Docker.
2. Service exposé : Vaultwarden (vaultwarden.yml
)
version: '3.9'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
WEBSOCKET_ENABLED: "true"
DOMAIN: "https://vault.example.com" # replace with your domain
SMTP_HOST: "smtp.example.net"
SMTP_FROM: "[email protected]"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "smtp-user"
SMTP_PASSWORD: "smtp-pass"
volumes:
- ./bw-data:/data
networks:
- traefik
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.vault.rule=Host(`vault.example.com`)'
- 'traefik.http.routers.vault.entrypoints=websecure'
- 'traefik.http.routers.vault.tls.certresolver=le'
- 'traefik.http.services.vault.loadbalancer.server.port=80'
# (optionnel) redirection HTTP→HTTPS
- 'traefik.http.routers.vault.middlewares=vault-redirect'
- 'traefik.http.middlewares.vault-redirect.redirectscheme.scheme=https'
networks:
traefik:
external: true
Étapes :
-
Démarrez les stacks :
docker compose -f traefik.yml up -d docker compose -f vaultwarden.yml up -d
-
Traefik détecte
vaultwarden
, crée un router HTTPS, obtient un certificat Let’s Encrypt et applique la redirection. -
L’instance est accessible en HTTPS :
https://vault.example.com
Sans redémarrage, sans script externe : Traefik orchestre tout.
Ce que j’aime le plus
- Zéro redémarrage : ajouter/modifier un service n’interrompt aucune connexion.
- Dashboard temps réel : debug ultra-simple, on voit immédiatement les règles actives.
- Certificats auto-gérés : adieu les cron de renouvellement Let’s Encrypt.
Ce qui m’a (un peu) déplu
Friction | Détail |
---|---|
Labels verbeux | Un service complexe → 10-15 labels ; ça pique les yeux. |
Hiérarchie K8s | Entrypoint → Router → Middleware → Service : il faut l’assimiler. |
Priorités multi-provider | Docker + K8s + File : attention aux conflits de règles. |
Pistes à explorer
- Plugins Traefik : middlewares custom (rate-limit avancé, OAuth…).
- ForwardAuth + Keycloak : SSO pour l’ensemble des services.
- Metrics Prometheus : exporter les stats pour un monitoring fin.
- Fail-over multi-nœud : tester Traefik en swarm ou K8s haute-dispo.
Conclusion : débuts très prometteurs
En quelques jours, Traefik a remplacé mes configs Nginx artisanales ; désormais :
- Un reverse-proxy auto-découvrant mes conteneurs,
- Des certificats SSL qui se renouvellent tout seuls,
- Un dashboard visuel pour comprendre vite.
Les labels restent verbeux quand on pousse la granularité, mais la flexibilité et le temps gagné compensent largement. Prochaine étape : brancher l’auth centralisée et jouer avec les plugins communautaires !
Traefik s’impose comme un compagnon incontournable dans mon stack DevOps 2025.