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 à ... :
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 !