De son joli nom : chevrotin, cette version apporte quelques améliorations dont certaines très appréciables !

Je ne vais pas énumérer ici la liste de ces modifications. Elles sont tout de même nombreuses et en faire un simple listing n'aurait aucun intérêt. Vous pourrez trouver la liste complète à cette adresse : https://community.containo.us/t/traefik-realease-v2-2-0-rc1

Je vais m'attarder sur quatre améliorations que j'ai eues le temps d'essayer :

  • Le Dark mode pour le dashboard ( c'est essentiel ! )
  • Entrypoint Defaults (incl. redirects)
  • UDP
  • Elastic APM Tracer & KV store providers

Dark mode

Il faut tout de même avouer c'était simple à essayer 😂

Entrypoint Defaults

Quand j'ai lu ces lignes, je me suis immédiatement demandé ce qu'il pouvait se cacher derrière ces deux petits mots. Et autant vous dire que la surprise est vraiment intéressante :

Introduce a simple way to:

  • create global entry point redirection (ex: HTTP to HTTPS)
  • set a default routers configuration by entry point.

En résumé avec cette version on nous offre la possibilité de créer une redirection HTTP vers HTTPS directement depuis la déclaration du point d'entrée. Et moi j'avoue en lisant ça, je ressemblais à ... :

amazing

Et en plus, je vais pouvoir déclarer un routeur par défaut dans mon point d'entrée ! Donc un middleware !

Donc techniquement je peux réaliser ça comment ? Et bien essayons ça tout simplement !

Je vais créer un fichier docker-compose afin de créer une stack composée des services suivants :

  • Traefik en 2.2,
  • whoami

Comme à mon habitude, Traefik utilisera un fichier YML pour sa configuration statique et un dossier custom pour la déclaration des middlewares.

Le fichier docker-compose.yml va ressembler à ça :

version: '3.7'
services:
  traefik:
    image: traefik:2.2
    container_name: traefik
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.yml:/etc/traefik/traefik.yml:ro
      - ./custom/:/etc/traefik/custom/:ro
      - traefik_ssl:/letsencrypt
    networks:
      - traefik


  whoami:
    container_name: whoami
    image: whoami
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.ghost.entrypoints=https"
      - "traefik.http.routers.ghost.rule=Host(`XXXX`)"
      - "traefik.http.services.ghost.loadbalancer.server.port=80"
    networks:
      - traefik

Mon fichier traefik.yml :

entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https

  websecure:
    address: :443
    http:
      tls:
        certResolver: myresolver
      middlewares:
      - [email protected]
 
providers:
  docker:
    exposedByDefault: false

  file:
    directory: /etc/traefik/custom/
    watch: true

certificatesResolvers:
  myresolver:
    acme:
      email: "XXXX"
      storage: "/letsencrypt/acme.json"
      httpChallenge:
        entryPoint: web

Vous pouvez constater que dans la déclaration de l'entrypoint HTTP, je redirige immédiatement le flux vers du HTTPS au travers de ces lignes :

http:
  redirections:
    entryPoint:
      to: websecure
      scheme: https

Dans la configuration de l'entrypoint HTTPS, je vais pouvoir dorénavant déclarer le certificat resolver :

http:
  tls:
    certResolver: myresolver

Et là, cerise sur la gâteau, je peux utiliser un middleware par défaut sur ce point d'entrée :

  middlewares:
  - [email protected]

Si vous souhaitez ajouter des Headers de sécurité de façon systématique, ça devient très pertinent. Dans mon cas je vais utiliser un middleware SecHeader que je vais déclarer dans mon dossier custom/middlewares.yml juste après :

http:
  middlewares:
    SecHeader:
      headers:
        frameDeny: true
        contentTypeNosniff: true
        browserXssFilter: true

⚠️ Si comme moi vous adorez l'option de rechargement à chaud, directive watch: true lors de la configuration du provider de type file dans votre traefik.yml. Elle fait pour le moment "bug" l'entrypoint HTTPS lors du rechargement, j'ai déclaré le bug hier chez Traefik : Il sera rapidement résolu  ⚠️

Pour moi cette nouvelle possibilité de configuration va permettre une meilleure "aération" de mes fichiers de stack Docker, et ainsi en faciliter la maintenance sur le long terme.

UDP

Tout comme pour le routage de paquet TCP, il est maintenant possible de router des paquets UDP.

Dans la déclaration de l'entrypoint, ça se passe comme ceci :

entryPoints:
  # not used by UDP routers
  web:
    address: ":80"
  # used by UDP routers
  other:
    address: ":9090/udp"
  streaming:
    address: ":9191/udp"

On remarque le /udp qui ressemble fortement à la typologie utiliser dans Docker pour la publication de ports en UDP.

Ensuite on déclare le service :

udp:
  services:
    my-service:
      loadBalancer:
        servers:
          - address: "10.62.241.212:9090"

Cet apport peut vous servir dans certains cadres assez précis ( Serveur Radius par exemple, DNS ... )

Elastic APM Tracer & KV store providers

Je ne vais pas m'attarder dans cet article sur l'ajout de ces deux fonctionnalités.

Pourquoi ? En réalité ces deux ajouts sont vraiment intéressants et méritent plusieurs articles avant d'en parler. Je me rends compte que je n'ai encore jamais parlé au travers du blog de l'utilisation des logs et metrics de Traefik. Et j'aimerais vraiment parler de ces choses avant d'en venir à l'utilisation d'APM.

De même pour l'utilisation d'un KV store, un minimum d'explication doit venir avant de parler de ce sujet.

Et quoi d'autres ?

Et bien en réalité il a d'autres ajouts qui peuvent être vraiment intéressant. Je pense notamment à :

  • Support SSH connection to Docker
  • Add metrics about TLS
  • Add period for rate limiter middleware

Je prendrais également le temps d'essayer plus en détail ces ajouts. J'ai déjà joué avec le support du SSH, mais je souhaite le présenter avec un cas concret intéressant ( et pour le moment ce n'est pas le cas 😂 ).


Voila, un tour rapide de quelques nouvelles fonctionnalités de cette version de Traefik 2.2. Je trouve ces quelques ajouts pertinents et il ne s'agit pas d'une simple mise à jour corrective.

Bien évidement il ne s'agit pour le moment que d'une version "Release Candidate" et je ne vous conseille absolument pas de basculer dessus. Par contre lors de la sortie stable : Foncez ! Rien que le changement de redirection par défaut un atout indéniable pour la configuration du logiciel.

Je ne me suis pas attardé non plus sur les nouveautés liées à Kubernetes. Ces nouveautés vous intéressent-elles ? Souhaitez-vous un article dédié à ce sujet ?

En tout cas  n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter, c'est toujours un plaisir d'avoir des retours et des échanges !