Traefik c’est fini …

Comme à chaque fois qu’un logiciel change de version majeure, la même question. Ok, mais j’y gagne quoi finalement ?

Il faut être honnête cette version de traefik change énormément de choses. Et pour aller plus loin, oubliez une partie de vos connaissances acquises au court de l’utilisation de la version 1 car le changement c’est … maintenant :

Cette version 2 introduit de nombreux changements qui vont vous obliger à revoir votre configuration. Au revoir les frontends et backends, et bienvenue aux routeurs, services et middlewares.

Pour faire simple, les routeurs vont remplacer vos frontends et les services vos backends. Chaque routeur va faire référence à un service. Et pour chaque modification que vous souhaiterez apporter à votre requête « entrante » , le routeur fera appel à un composant dédié : le middleware.

Je pense que le schéma suivant résume très bien la situation :

Oui mais Traefik v2 c’est encore mieux …

Ok le changement c'est bien... Mais pourquoi je vais revoir ma configuration ?

Je ne vais pas vous détailler ici chaque changement et innovations apportés par cette version. Mais tout simplement, pourquoi de mon côté je suis passé à cette version 2.

Un "provider file" dynamique :

Je trouve cet ajout très utile car il permet de "décaler" une partie de sa configuration dans un fichier "plat" qui est automatiquement chargé par Traefik :

[providers]
  [providers.file]
    directory = "/path/to/dynamic/conf"
    watch = true

Les middlewares :

Liés aux routeurs, les middleware sont un moyen de modifier les requêtes avant qu'elles ne soient envoyées à votre service (ou avant que la réponse du service ne soit envoyée aux clients).  Il existe de nombreux middlewares, on va pouvoir modifier la demande, les en-têtes, effectuer des redirections ou bien ajouter une authentification.

Deux exemples de middlewares :

  • La création d'une whitelist pour l'accès à un site :
[http.middlewares.IPWhiteList.ipWhiteList]
  sourcerange = ["127.0.0.1/32", "172.16.0.0/24"]
  • La redirection en https :
[http.middlewares]
  [http.middlewares.redirect-to-https.redirectScheme]
    scheme = "https"
    permanent = true

Il est bien sûr possible de combiner des middlewars pour s'adapter à chaque scénario. Exemple :

"traefik.http.routers.myrouter-https.middlewares=IPWhiteList@file, Header@file"

L'interface :

En qualité d'Administrateur système je mets rarement en place des interfaces visuelles pour gérer mes outils . Toutefois lorsque vous commencez à utiliser Traefik avec un grand nombre de sites, l'interface est bien pratique... Et il faut dire que cette version 2 est très lisible :

Routeur TCP

Je ne vais pas aborder ce point au cours de cet article mais LA grosse nouveauté de cette version est la possibilité de rediriger du trafic au niveau TCP. Exemple rapide avec le port MYSQL :

## Dynamic configuration
[tcp]
  [tcp.routers]
    [tcp.routers.to-database]
      entryPoints = ["mysql"]
      # Catch every request (only available rule for non-tls routers. See below.)
      rule = "HostSNI(`*`)"
      service = "database"

Dans un prochain article j'aborderai quelques exemples de migration d'une configuration V1 vers la V2 !

Si vous souhaitez en savoir plus sur Traefik.