3 points par GN⁺ 2024-05-06 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-05-06
Avis sur Hacker News
  • Comparaison des atouts et des limites de Traefik
    • Avantage : migration de NGINX vers Traefik grâce à l'intégration automatique de Let's Encrypt
    • Inconvénient : documentation insuffisante, logs manquants, et échecs intermittents de régénération de certificats provoquant des incidents en production
    • Retour final à NGINX
  • Préférence exprimée pour l'utilisation de Caddy plutôt que Traefik
    • Le Caddyfile est beaucoup plus simple à gérer que la configuration YAML de Traefik
    • Support de nombreux plugins (par ex. le plugin WAF Coraza de Caddy)
  • Discussion sur les cas d'usage où Traefik pourrait être avantagé par rapport à NGINX
    • Dans un petit hôte Docker avec quelques dizaines de conteneurs, NGINX Proxy Manager est déjà suffisant
    • Comme Traefik est configuré par défaut dans K3s, il est pratique pour monter rapidement un cluster K8s de test
  • Envisager le passage de Caddy à Traefik
    • Avantage de Caddy : configuration automatique basée sur les labels Docker, gestion des certificats TLS, configuration DNS automatique, etc.
    • Inconvénient de Caddy : à chaque redémarrage de charge de travail, Caddy redémarre entièrement, avec une indisponibilité temporaire, et la configuration des certificats wildcard est complexe
    • Expérience positive avec Traefik dans K8s, et envisager son usage aussi sur des projets personnels
  • Expérience de migration vers Caddy à cause de la difficulté de configuration dynamique et de débogage de Traefik
    • Caddy est plus concis et plus simple à configurer avec moins de couches
  • En utilisant Traefik pendant longtemps, prise de conscience des avantages de la configuration statique
    • La difficulté de configuration dynamique et de débogage via les labels Docker
    • Génération d'un simple fichier de configuration statique via un moteur de templates pour chaque combinaison hôte/cible/port
    • Automatisation de la génération et du déploiement des fichiers de config via Ansible
  • Comparaison avec HAProxy
    • Utilisation d'HAProxy depuis plus de 10 ans, modernisé avec un API runtime pour la configuration dynamique, conforme aux enjeux du cloud
  • Plus grand avantage et principal défaut de Traefik
    • Point fort : la configuration est transmise via les labels Docker, il faut donc modifier quasiment pas la config Traefik elle-même
    • Point faible : la prononciation exacte de Traefik est difficile (on en vient à vouloir dire « trey-feek »)