Pourquoi regarder Traefik même sans conteneur
Ce qu’on sait de Traefik
- Traefik a pour objectif d’aider le monde des microservices
- De nombreux YouTubeurs partagent qu’ils disposent d’infrastructures de conteneurs comme Docker ou Kubernetes
- Traefik s’exécute dans un conteneur, et en montant le socket Docker dans le conteneur Traefik, il peut détecter automatiquement les autres conteneurs à exposer via Traefik
- On peut configurer le comportement de proxy d’un conteneur précis via des labels
- Traefik demande automatiquement des certificats TLS à Let's Encrypt et rend un service disponible dès qu’il détecte l’existence d’un nouveau conteneur
Pourquoi Traefik est utile même sans conteneur
Idée reçue : aucun moteur de conteneur n’est nécessaire
- Traefik n’a pas besoin d’être exécuté sur un moteur de conteneur, et les services n’ont pas non plus besoin d’y être exécutés
- Traefik est écrit en Golang et compilé en un seul exécutable
- Les logiciels écrits en Golang et compilés en un seul binaire donnent vraiment une bonne impression
- Le déploiement est simple et on conserve un contrôle total
Idée reçue : les fichiers de configuration sont aussi pris en charge
- Sans conteneur, il n’est pas possible d’utiliser des labels de conteneur, et les labels sont déroutants et difficiles à lire
- Traefik peut aussi être configuré avec des fichiers de configuration
- Traefik sépare la configuration en une partie « statique » (fournisseurs de certificats, par ex. Let's Encrypt, et les entry points — les ports sur lesquels Traefik écoute) et une partie « dynamique » (routers, services et middlewares)
- Traefik reçoit les événements du système de fichiers et peut recharger à chaud la partie dynamique
La documentation est bien faite
- Il explique clairement tous les concepts sur lesquels Traefik repose
- Au début des pages concernées, il y a des exemples de configuration pour la méthode d’instance choisie
- La documentation couvre la plupart des besoins
- La barre latérale est utile
Traefik semble robuste et bien conçu
- Traefik affiche des avertissements si la configuration n’est pas cohérente et ne provoque pas encore de problèmes aléatoires
- Traefik semble, par défaut, ne pas enregistrer beaucoup de logs, mais il permet de comprendre facilement la manière dont les requêtes sont traitées, et de démarrer rapidement sans frustration
Des fonctionnalités qui plaisent vraiment
TLS passthrough et protocole PROXY
- Traefik prend en charge le TLS passthrough et le protocole PROXY d’HAProxy (entrée et sortie)
- Le TLS passthrough signifie qu’il est possible de router le trafic vers un service web qui fournit son propre certificat TLS
- Il est donc possible de demander directement à Let's Encrypt par le service, sans terminer TLS au niveau du proxy
- Le protocole PROXY est un moyen plus sûr de transmettre les informations qui seraient perdues lorsque l’utilisateur passe d’abord par le proxy
- Le protocole PROXY doit également être pris en charge par le service cible, mais c’est le cas d’Apache2 et Nginx (donc PHP), et la liste des services qui le supportent augmente
Points moins convaincants de Traefik
Authentification
- Avec NGINX, j’ai protégé certains services avec Vouch Proxy via Azure AD
- Traefik supporte ForwardAuth, similaire à l’authentification de NGINX, mais Vouch Proxy ne fonctionne pas encore avec Traefik
- Il est possible de déployer une instance Keycloak et de l’intégrer à AAD, puis de l’utiliser avec ForwardAuth, mais il faut d’abord configurer cette instance Keycloak, la maintenir à jour et sécurisée
- traefik-forward-auth est souvent recommandé, mais sa dernière mise à jour date de juin 2020, le développeur a disparu de GitHub et les dépendances doivent être mises à jour
- J’ai eu une mauvaise expérience avec oauth2-proxy par le passé
- HTTP/2/3, les timeouts, la taille des corps et WebSocket doivent être configurés sur chaque proxy entre utilisateur et service, ce qui rend le fait de proxifier trop sujet aux erreurs
- Traefik ForwardAuth semble simple, il faudrait donc développer son propre petit outil pour l’intégrer à AAD ou forker traefik-forward-auth, l’auditer puis mettre à jour ses dépendances
Blocage d’User-Agent et d’adresses IP
- Je ne veux pas qu’archive.org archive les services internes
- Les directives robots.txt et des headers similaires ne suffisent pas pour bloquer Archive.org, donc la seule manière de bloquer ces crawlers est de bloquer l’User-Agent « archive.org_bot » ou de bloquer des plages IP
- Avec Traefik, le blocage d’User-Agent ou d’adresses IP n’est possible que via des plugins tiers
- Je n’aime pas les plugins tiers car ils posent des problèmes lors des mises à jour et peuvent introduire des vulnérabilités
- Le middleware IPAllowList permet de bloquer des IP et d’autoriser tout le reste sauf les IP à bloquer
- On peut calculer des plages IP, ce n’est pas pire que de bloquer directement, mais comme on ne voit pas clairement les sous-réseaux réellement bloqués, ce n’est pas très élégant
Avis de GN+
- Traefik semble être une solution de reverse proxy attrayante indépendamment de l’utilisation de conteneurs. Son point fort est d’être écrit en Golang et compilé en un seul exécutable, ce qui le rend facile à déployer et à gérer.
- La documentation semble également bien faite et devrait beaucoup aider à comprendre les concepts de Traefik et à trouver des exemples de configuration.
- Les fonctionnalités avancées comme le TLS passthrough ou la prise en charge du protocole PROXY semblent également bien implémentées.
- En revanche, la partie authentification semble manquer de solution satisfaisante pour l’instant, ce qui laisse supposer qu’il faudra développer un service d’authentification maison ou améliorer un projet existant.
- Il serait agréable que le blocage d’User-Agent et d’IP soit natif, car sans plugin externe je n’ai pas vu de solution élégante.
- Traefik semble suffisamment intéressant pour être envisagé comme alternative à NGINX. En particulier, pour les utilisateurs qui trouvent la configuration de NGINX trop complexe, la simplicité de Traefik peut être très attrayante.
1 commentaires
Avis sur Hacker News