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

  1. Installation express
   docker network create traefik
   docker compose -f traefik.yml up -d
  1. Statique vs dynamique Statique : ports, providers, ACME. Dynamique : règles de routage, middlewares, certificats — modifiables sans redémarrage.

  2. 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"
    
  3. Let’s Encrypt en 30 s Un certresolver=le dans les labels + une adresse mail → Traefik s’occupe du reste.

  4. 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

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"
      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'
      - 'traefik.http.routers.vault.middlewares=vault-redirect'
      - 'traefik.http.middlewares.vault-redirect.redirectscheme.scheme=https'

networks:
  traefik:
    external: true

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

FrictionDétail
Labels verbeuxUn service complexe → 10-15 labels ; ça pique les yeux.
Hiérarchie K8sEntrypoint → Router → Middleware → Service : il faut l’assimiler.
Priorités multi-providerDocker + K8s + File : attention aux conflits de règles.

Pistes à explorer

  • Plugins Traefik : middlewares custom (rate-limit, OAuth…)
  • ForwardAuth + Keycloak : SSO pour les apps auto-hébergées
  • Monitoring Prometheus : metrics détaillées
  • Redondance : test en swarm ou cluster K8s

Conclusion : débuts très prometteurs

Traefik a remplacé mes configs Nginx artisanales. Il offre aujourd’hui :

✅ Un reverse-proxy auto-découvrant ✅ Des certificats SSL auto-renouvelés ✅ Un dashboard simple à lire

Prochaine étape : auth centralisée et plugins communautaires !

Traefik s’impose comme un compagnon incontournable dans mon stack DevOps 2025.