Cette nouvelle version, nommée Picodon, vient tout juste d'arriver en release candidate. La version 2.2 sortie en Mars m'avait laissé une très bonne impression dès sa prise en main. Quand est-il de cette nouvelle version ?

Mais tout d'abord un petit tour des nouveautés de cette version !

What's news ?

Comme à son habitude, la société Containous derrière le projet Traefik nous gratifie d'une image résumant très bien les dernières fonctionnalités mises en œuvre dans cette nouvelle version :

Traefik 2.3
Traefik 2.3

Parlons tout d'abord de l'arrivée du projet : Traefik Pilot !

Traefik Pilot

Alors Traefik Pilot c'est quoi ?

En quelques mots c'est une plate-forme SaaS qui souhaite simplifier la gestion des instances Traefik. Tout ceci au travers d'une nouvelle interface mis à notre disposition et que vous pourrez trouver à cette adresse :

Pour le moment, la solution est en early-access mais je n'ai rencontré aucun souci pour faire remonter une instance. C'est une bonne habitude avec Containous, mais je reste toujours très heureux de retrouver des solutions simples et efficaces !

Voici la vue que vous allez obtenir après avoir inscrit votre première instance :

Register instance
Register instance

Cet outil intègre un système de supervision :

À intervalle régulier, vos instances vont communiquer avec Pilot afin de signaler leurs états et leurs disponibilités. Si un souci est détecté, vous allez alors recevoir un email pour vos avertir du problème :

E-mail alert from Pilot
E-mail alert from Pilot

Et en plus de l'état de santé de vos instances, l'outil va vérifier les vulnérabilités qui s'appliquent à votre installation - de Traefik - afin de vous avertir si certaines de vos instances nécessitent une mise à jour !

Même si tout ceci demande sûrement quelques précisions, que je me ferai un plaisir de vous remonter dès que possible, ici on ne parle pas de scan de votre instance. L'outil va se servir des informations remontées ( version logiciel, type de configuration par exemple ) afin de vous avertir de façon "générique".

Pour inscrire une instance rien de plus simple :

Traefik Pilot new instance
Traefik Pilot new instance
  • On obtient son token :
Token registration
Token registration
  • Ajoutez la ligne avec Token à votre instance Traefik. Voici un exemple complet :
version: "3.8"
services:
  reverse_proxy:
    image: traefik:2.3
    restart: unless-stopped
    command:
      --api.insecure=true
      --accesslog
      --log.level=DEBUG
      --entrypoints.web.address=:80
      --entrypoints.websecure.address=:443
      --entrypoints.websecure.http.tls.certresolver=myresolver
      --entrypoints.web.http.redirections.entryPoint.to=:443
      --entrypoints.web.http.redirections.entryPoint.scheme=https
      --providers.docker
      --providers.docker.exposedbydefault=false
      --certificatesresolvers.myresolver.acme.tlschallenge
      --certificatesresolvers.myresolver.acme.email=foo@you.com
      --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
      --experimental.pilot.token="39xxxxx-xxxxxxx-xxxxxxx-xxxxxx-xxxxx"
    ports:
      # The HTTP port
      - "80:80"
      # The HTTPS port
      - "443:443"
      # The Admin port
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
      - certs:/letsencrypt
    networks:
      - web

  whoami:
    image: containous/whoami
    labels:
      traefik.enable: true
      traefik.docker.network: web
      traefik.http.routers.whoami.entrypoints: websecure
      traefik.http.routers.whoami.rule: 'Host(`${URL}`)'
      traefik.http.services.whoami.loadbalancer.server.port: 80
    networks:
      - web

volumes:
  certs:

networks:
  web:
    name: traefik_wan
  • Après quelques secondes, retournez sur l'interface de Pilot :
Register instance
Register instance

Mais avant de faire un premier bilan de cette interface, il est nécessaire de regarder un apport majeur de cet outil : les plugins !

Les Plugins

C'est sûrement l'une des fonctionnalités que beaucoup d'entre nous attendait avec impatience. La possibilité de créer - et de partager -  des plugin afin de permettre à la communauté d'étendre les capacités de Traefik !

Effectivement il existe bien des cas spécifiques que Traefik ne pouvait pas se permettre de gérer en interne. Cette alternative va permettre d'étoffer le fonctionnement de la solution en nous offrant la possibilité d'interagir avec les requêtes transmises et envoyées par notre reverse proxy.

Et un petit exemple avec un plugin qui semble intéressant :

containous/plugin-blockpath
Contribute to containous/plugin-blockpath development by creating an account on GitHub.

Ce plugin permet de renvoyer un statut 403 Forbidden lorsque l'on essaye d’accéder à la ressource définie dans l'expression régulière.

Exemple avec /foo :

regex = ["^/foo(.*)"]

Je vais utiliser le fichier docker-compose.yaml utilisé pour inscrire mon instance sur Pilote et ajouter le plugin à ma configuration statique :

version: "3.8"
services:
  reverse_proxy:
    image: traefik:2.3
    restart: unless-stopped
    command:
      --api.insecure=true
      --accesslog
      --log.level=DEBUG
      --entrypoints.web.address=:80
      --entrypoints.websecure.address=:443
      --entrypoints.websecure.http.tls.certresolver=myresolver
      --entrypoints.web.http.redirections.entryPoint.to=:443
      --entrypoints.web.http.redirections.entryPoint.scheme=https
      --providers.docker
      --providers.docker.exposedbydefault=false
      --certificatesresolvers.myresolver.acme.tlschallenge
      --certificatesresolvers.myresolver.acme.email=foo@you.com
      --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
      --experimental.pilot.token=xxxx
      --experimental.plugins.blockpath.modulename=github.com/containous/plugin-blockpath
      --experimental.plugins.blockpath.version=v0.1.2

Ensuite je configure un middleware que j'utilise au niveau de mon instance whoami :

  whoami:
    image: containous/whoami
    labels:
      traefik.enable: true
      traefik.docker.network: web
      traefik.http.routers.whoami.entrypoints: websecure
      traefik.http.routers.whoami.rule: 'Host(`${URL}`)'
      traefik.http.services.whoami.loadbalancer.server.port: 80
      traefik.http.middlewares.my-plugin-blockpath.plugin.blockpath.Regex: '^/foo(.*)'
      traefik.http.routers.whoami.middlewares: 'my-plugin-blockpath'
    networks:
      - web

Le service me renvoie effectivement un statut :  403 Forbidden.

Pour information, je rencontre une erreur de token ce soir pour télécharger le plugin.

Edit : Bug corrigé aujourd'hui par Traefik


Un article beaucoup moins technique aujourd'hui mais il me semblait essentiel de vous informer sur certaines nouveautés de cette version.

Alors cette version 2.3 ?

Et bien vous aurez remarqué ici que je n'ai même pas encore abordé les points suivants :

  • La nouvelle classe Ingress,
  • Le prodiver ECS.

Et ça si on s'arrête uniquement à l'image de communication diffusée par Traefik. Car dans le lot des nouveautés disponibles depuis Mercredi, il y en a une qui a attiré mon attention :

  • Add HTTP Provider

Je vous expliquerai en détails dans un article qui arrivera Jeudi prochain, pourquoi cet ajout est pour moi formidable et comment s'en servir !

Bref cette version 2.3, et même si l'offre SaaS ne vous intéresse pas pour diverses raisons ( J'ai bien conscience que le côté SaaS en rebutera certains ), amène son lot de nouveautés qui ravira plusieurs d'entre vous !

D'ailleurs si vous utilisez Traefik, vous allez être servi dans les deux prochaines semaines sur le blog avec :

  • Un article donc sur le HTTP Provider,
  • Un autre sur : Renforcer la sécurité de Traefik sur Docker,
  • Et enfin on essayera de construire/modifier un plugin !? ( Attention je ne sais pas coder en go 😂 )
N'hésitez pas à permettre au blog de continuer à exister et à fournir un contenu de qualité - enfin je l'espère - au travers de vos dons sur : buymeacoff.ee/lfache
Et n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter, ou ici 👇