Traefik

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Reverse proxy / load balancer cloud-native
Écrit en Go
Découverte de services Labels Docker, Swarm, Kubernetes (CRD/Ingress), Consul, fichier statique...
Rôle Kubernetes Ingress Controller (voir Ingress et Gateway API)
TLS automatique ACME / Let's Encrypt intégré
Voir aussi Docker swarm · Ingress et Gateway API · Nginx

Traefik est un reverse proxy et load balancer conçu spécifiquement pour les environnements conteneurisés : sa caractéristique principale est de découvrir automatiquement les services à exposer en interrogeant directement la plateforme d'orchestration (Docker, Swarm, Kubernetes, Consul...) plutôt que de dépendre d'un fichier de configuration statique édité à la main. À chaque conteneur ou service créé, modifié ou supprimé, Traefik met à jour sa configuration de routage à chaud, sans redémarrage ni rechargement.

Découverte via labels Docker

En mode Docker (ou Swarm), Traefik surveille le socket Docker et route le trafic vers les conteneurs qui portent des labels dédiés, directement dans leur définition Compose :

services:
  webapp:
    image: mon-image:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webapp.rule=Host(`app.exemple.com`)"
      - "traefik.http.routers.webapp.entrypoints=websecure"
      - "traefik.http.routers.webapp.tls.certresolver=letsencrypt"
      - "traefik.http.services.webapp.loadbalancer.server.port=8080"

Aucune modification de la configuration de Traefik lui-même n'est nécessaire : c'est le conteneur applicatif qui déclare, via ses labels, comment il souhaite être exposé.

Rôle d'Ingress Controller sous Kubernetes

Sur Kubernetes, Traefik peut être déployé comme Ingress Controller : il consomme les ressources Ingress standard, ou ses propres CRD (IngressRoute) pour un contrôle plus fin (routage par en-tête, middlewares chaînés...). Voir Ingress et Gateway API pour le positionnement général de ce rôle dans l'écosystème Kubernetes.

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: webapp
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`app.exemple.com`)
      kind: Rule
      services:
        - name: webapp
          port: 8080
  tls:
    certResolver: letsencrypt

Certificats TLS automatiques

Traefik intègre un client ACME (protocole utilisé notamment par Let's Encrypt) : une fois un resolver déclaré, tout routeur qui le référence obtient et renouvelle automatiquement son certificat, sans intervention manuelle.

# configuration statique (traefik.yml)
certificatesResolvers:
  letsencrypt:
    acme:
      email: contact@exemple.com
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

Positionnement

Face à un reverse proxy « classique » comme Nginx, la différence tient surtout à ce mode de configuration : Nginx attend un fichier de configuration explicite (généré éventuellement par un outil tiers à l'écoute des événements Docker), alors que Traefik intègre nativement cette découverte dynamique. Ce choix le rend particulièrement adapté aux environnements où les services apparaissent et disparaissent fréquemment (Swarm, Kubernetes), au prix d'un couplage plus fort à la plateforme d'orchestration sous-jacente.

Une interface de tableau de bord (dashboard) intégrée permet de visualiser en temps réel les routeurs, services et middlewares actifs.

Voir aussi

  • Docker swarm — orchestration multi-hôtes native à Docker
  • Ingress et Gateway API — rôle d'Ingress Controller sous Kubernetes
  • Nginx — reverse proxy de référence en configuration statique