Blog logo

Blog de Rocher

C'est quoi Traefik?

source: doc.traefik.io

C'est quoi Traefik?


Publié le
Temps de lecture
Temps de lecture: 11 minutes
Authors

Table des matières

Traefik est un reverse proxy et un load balancer open-source conçu pour être simple à utiliser, dynamique, rapide, et flexible.

Principales caractéristiques et avantages

Traefik se distingue par sa simplicité et son intégration native avec des orchestrateurs de conteneurs comme Docker et Kubernetes. Parmi ses principales fonctionnalités, on trouve :

Découverte automatique des services :

Traefik détecte automatiquement les services dans un environnement Docker ou Kubernetes, ce qui simplifie la configuration. Elle facilite grandement la gestion des reverse proxies dans les environnements dynamiques comme Docker et Kubernetes. Traefik surveille en permanence les services (conteneurs docker ou pods kubernetes) et détecte automatiquement quand ils démarrent, s'arrêtent ou changent d'état. Cette capacité permet à Traefik de configurer et de mettre à jour les règles de routage de manière dynamique, sans nécessiter d'intervention manuelle ni de redémarrage du reverse proxy.

Comment ça marche ?

Traefik interagit directement avec Docker ou Kubernetes via ce qu'on appelle des providers (fournisseurs). Chaque provider lui permet obtenir des informations sur les services disponibles.

Avec Docker

Quand tu utilises Traefik avec Docker, il peut surveiller les conteneurs en temps réel grâce au daemon Docker. Les services Docker peuvent être automatiquement découverts grâce aux labels que tu définis directement dans les fichiers docker-compose.yml ou lors de la création de conteneurs. Voici un exemple pour illustrer :

version: "3"

services:
  web:
    image: nginx
    labels:
      - "traefik.http.routers.web.rule=Host(`example.com`)"
      - "traefik.http.services.web.loadbalancer.server.port=80"

Dans cet exemple, Traefik détecte automatiquement le conteneur web et configure le routage pour qu'il serve le site sur example.com. Il n'est pas nécessaire de modifier manuellement la configuration de Traefik : il gère le routage et l'équilibrage de charge à mesure que de nouveaux conteneurs sont créés ou supprimés.

Avec Kubernetes

Dans un environnement Kubernetes, Traefik fonctionne comme un Ingress Controller. Il surveille les ressources Kubernetes comme les Ingress Resources et configure automatiquement les routes en fonction des règles définies dans ces ressources. Un exemple basique d'Ingress pour Kubernetes :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: example-service
              port:
                number: 80

Traefik détecte cette configuration et crée automatiquement les routes nécessaires pour diriger le trafic vers example-service via example.com. Avec des architectures modernes comme les microservices, les services peuvent changer fréquemment (scalabilité, services éphémères). Traefik permet de suivre ces changements sans trop d'efforts ce qui garantit une haute disponibilité et une mise à l'échelle fluide. Dn plus, comme le processus est automatisé, il y a moins de chances de faire des erreurs lors de la configuration manuelle.

Support de Let's Encrypt

Traefik propose un support natif et automatisé de Let's Encrypt, ce qui en fait un outil extrêmement pratique pour gérer les certificats SSL/TLS. Grâce à Let's Encrypt, Traefik peut gérer automatiquement la génération, le renouvellement et l'application de certificats pour sécuriser les connexions HTTPS.

Avantages

  1. Certificats automatiques : Traefik peut demander des certificats SSL gratuits pour vos domaines via Let's Encrypt sans intervention manuelle. Une fois configuré, il détecte les nouveaux domaines associés à vos services et s'occupe de l'obtention du certificat.

  2. Renouvellement automatique : Let's Encrypt impose un renouvellement de certificats tous les 90 jours. Traefik surveille automatiquement la date d'expiration et renouvelle les certificats avant qu'ils ne soient invalides, sans nécessiter d'interruptions de service.

  3. Protocoles supportés : Traefik supporte deux méthodes principales pour vérifier les domaines auprès de Let's Encrypt :

  • HTTP-01 Challenge : Let's Encrypt vérifie que vous contrôlez le domaine en accédant à un fichier spécifique sur votre serveur via HTTP.
  • DNS-01 Challenge : Dans ce cas, vous devez prouver la propriété du domaine en créant un enregistrement DNS spécifique. Ce mode est souvent utilisé pour obtenir des certificats wildcard (*.votredomaine.com).

Tableau de bord intégré

Un tableau de bord(interface web) pour surveiller le routage du trafic et les erreurs. Dashboard Traefik | source: traefik.io

La section en haut montre les ports d'entrée configurés : Web (Port 80) pour les requêtes HTTP non sécurisées, Web-Secured (Port 443) pour les requêtes HTTPS sécurisées, Traefik (Port 8080) pour accéder au tableau de bord de Traefik. Les sections HTTP et TCP montre,t la santé et les statistiques des composants utilisés par Traefik

Mise à l'échelle dynamique

Avec la capacité de gérer plusieurs instances d'un service et d'équilibrer la charge sans interruption.

Flexibilité dans la configuration

Traefik supporte plusieurs méthodes de configuration, dont les fichiers YAML, TOML, et l'interface web.

Cas d'utilisation courants

Voici quelques cas d'utilisation typiques où Traefik brille :

  • Gestion des microservices : Il est parfait pour les environnements de microservices, où il est souvent nécessaire de gérer un grand nombre de services interconnectés.
  • Orchestration avec Docker : Grâce à son intégration transparente avec Docker, Traefik permet de gérer les reverse proxies et l'équilibrage de charge entre les conteneurs.
  • Kubernetes Ingress Controller : En tant que contrôleur d'ingress pour Kubernetes, Traefik simplifie la gestion du trafic réseau entrant vers les services Kubernetes.

Configuration de base

Pour configurer Traefik avec Docker, voici un exemple simple en utilisant un fichier docker-compose.yml :

version: "3"

services:
  reverse-proxy:
    image: traefik:v2.5
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

Cela te permet de démarrer Traefik avec une interface d'API web accessible en interne pour surveiller le trafic.

Intégration avec Docker et Kubernetes

Avec Docker : Traefik fonctionne en tant que service Docker et peut être intégré avec d'autres conteneurs simplement. Cela facilite grandement l'ajout de nouvelles routes et services sans avoir à redémarrer Traefik. Avec Kubernetes : En tant que contrôleur Ingress, Traefik s'intègre parfaitement avec les Ingress Resources de Kubernetes pour gérer le trafic entrant. Tu peux définir des routes complexes, gérer des certificats SSL et équilibrer les charges avec facilité.

Terminologie de Traefik

  1. Entrypoints : Points d'entrée pour les requêtes entrantes.Il y a par exemple les ports d'écoute 80 pour HTTP ou 443 pour HTTPS.

  2. Routers : Analysent les requêtes et les dirigent vers le bon service.ils Utilisent des règles pour faire correspondre les requêtes aux services.

  3. Middlewares : Composants qui modifient les requêtes ou les réponses. Ils peuvent être utilisés pour ajouter des en-têtes, filtrer les requêtes, faire du rate-limiting ou faire de la compression avant de les envoyer au service.

  4. Services : Représentent les applications auxquelles Traefik peut transférer les requêtes. Ils peuvent être des applications web, des API, des services de stockage, etc.

  5. Providers : Sources de configuration pour Traefik. Ils peuvent être des fichiers YAML, TOML, Docker, Kubernetes, etc.

  6. Dynamic Configuration : Configuration qui peut changer et être rechargée à chaud. Elle définit les routes, middlewares, et services avec l'aide des providers.

  7. Static Configuration : Configuration de base qui ne change pas après le démarrage. Par exemple les entrypoints, providers, options globales.

  8. TLS (Transport Layer Security) : Protocole de sécurisation des communications. Dans Traefik, il sert à chiffrer les communications entre les clients et les services.

  9. Let's Encrypt : Service d'autorité de certification automatique. Grace à Let's Encrypt, Traefik peut gérer automatiquement la génération, le renouvellement et l'application de certificats pour sécuriser les connexions HTTPS.

  10. API : Interface permettant d'interagir avec Traefik. Consultation de la configuration, métriques.

  11. Dashboard : Interface web pour visualiser et gérer la configuration de Traefik.

  12. **Sticky Sessions :**Mécanisme pour diriger les requêtes d'un client vers le même backend.

  13. Circuit Breaker : Mécanisme pour prévenir les cascades de défaillances.

  14. Retry : Tentative automatique de réexécution des requêtes en cas d'échec.

  15. Rule : Condition pour le routage des requêtes. Basé sur l'hôte, le chemin, les en-têtes.

Cette terminologie forme la base de la compréhension et de l'utilisation de Traefik. Maîtriser ces concepts permet une configuration et une gestion efficaces de Traefik dans divers environnements.

Comparaison avec d'autres solutions similaires# Comparaison avec d'autres solutions similaires

Nginx

Nginx est l'un des serveurs web et reverse proxy les plus populaires, connu pour sa performance et sa stabilité. Contrairement à Traefik, Nginx nécessite généralement une configuration manuelle plus importante, particulièrement dans des environnements dynamiques. Alors que Traefik excelle dans l'auto-découverte et la configuration automatique des services, Nginx brille par sa flexibilité et son contrôle granulaire sur la configuration. Nginx offre des performances légèrement supérieures en termes de traitement des requêtes par seconde, ce qui peut être crucial pour les sites à très haut trafic. Cependant, dans des environnements conteneurisés ou de microservices, Traefik prend l'avantage grâce à son intégration native avec des plateformes comme Docker et Kubernetes, réduisant considérablement la complexité opérationnelle.

Nginx dispose d'une communauté plus large et d'un écosystème plus mature, ce qui se traduit par une documentation plus étendue et un plus grand nombre de modules tiers. Cela dit, Traefik rattrape rapidement son retard dans ce domaine, avec une communauté en croissance rapide et une documentation de plus en plus complète. En termes de courbe d'apprentissage, Traefik est généralement considéré comme plus accessible pour les débutants, en particulier dans les environnements conteneurisés, tandis que Nginx offre une plus grande profondeur pour les configurations avancées.

HAProxy

HAProxy est reconnu comme l'un des meilleurs équilibreurs de charge logiciels, offrant des performances exceptionnelles et une grande fiabilité. Comparé à Traefik, HAProxy se distingue par ses capacités avancées d'équilibrage de charge et ses fonctionnalités de haute disponibilité. HAProxy excelle dans les scénarios nécessitant un contrôle très fin sur la distribution du trafic et offre des options de surveillance de santé des backends plus détaillées.

Cependant, là où Traefik prend l'avantage, c'est dans sa facilité d'intégration avec les environnements modernes de conteneurs et d'orchestration. Alors que HAProxy nécessite souvent des configurations complexes pour s'adapter à des environnements dynamiques, Traefik offre une intégration plus fluide et une auto-configuration dans ces contextes. De plus, Traefik propose une interface utilisateur graphique plus conviviale pour la gestion et la surveillance, ce qui peut simplifier les opérations quotidiennes pour les équipes DevOps.

En termes de fonctionnalités SSL/TLS, les deux solutions offrent un support robuste, mais Traefik se démarque par son intégration native avec Let's Encrypt pour l'automatisation des certificats SSL. HAProxy reste le choix préféré pour les environnements nécessitant des performances extrêmes et un contrôle très précis sur le routage du trafic, tandis que Traefik est souvent privilégié pour sa facilité d'utilisation dans les architectures de microservices modernes.

Caddy

Caddy est un serveur web relativement nouveau qui a gagné en popularité grâce à sa simplicité et à son focus sur la sécurité par défaut. Comme Traefik, Caddy offre une configuration automatique des certificats SSL via Let's Encrypt, ce qui en fait un choix attrayant pour les déploiements rapides et sécurisés. Caddy se distingue par sa syntaxe de configuration extrêmement simple et lisible, souvent plus intuitive que celle de Traefik pour les cas d'utilisation simples.

Cependant, Traefik prend l'avantage dans les environnements plus complexes, particulièrement ceux impliquant des conteneurs et des microservices. Alors que Caddy offre une intégration de base avec Docker, Traefik propose une intégration plus profonde et plus flexible avec diverses plateformes d'orchestration. De plus, Traefik offre généralement de meilleures performances en termes de traitement des requêtes par seconde et de latence, ce qui peut être crucial pour les applications à forte charge.

En termes de fonctionnalités avancées, Traefik propose un ensemble plus riche d'options pour le routage, le load balancing et les middlewares. Cela rend Traefik plus adapté aux environnements d'entreprise complexes. Caddy, en revanche, brille par sa simplicité et sa rapidité de mise en place pour des projets plus petits ou des déploiements rapides.

En conclusion, chacune de ces solutions a ses forces et ses cas d'utilisation idéaux. Traefik se positionne comme un choix polyvalent, particulièrement adapté aux environnements conteneurisés et de microservices, offrant un bon équilibre entre facilité d'utilisation et fonctionnalités avancées. Le choix entre ces outils dépendra largement des besoins spécifiques du projet, de l'architecture du système, et des compétences de l'équipe.

Quelques liens utiles pour approfondir le sujet

  • Traefik docs. Pour plus d'informations sur les fonctionnalités de Traefik, consultez la documentation officielle.
  • Vidéo de présentation de Traefik faite par xavki. La playlist entière ici

Découvrez les principes de fonctionnement de traefik: providers, entrypoints, routers, middlewares, services, etc.


Notes en bas de page
Reverse proxy:

Traefik agit comme un intermédiaire entre les clients (utilisateurs) et vos serveurs d'applications. Il reçoit les requêtes des clients et les redirige vers les bons services en arrière-plan.

Load balancer:

Il répartit le trafic entre plusieurs instances d'un même service pour améliorer les performances et la disponibilité.

Daemon Docker:

Le daemon Docker est un processus qui surveille les conteneurs Docker en temps réel et détecte automatiquement les nouveaux conteneurs, les modifications de configuration et les événements liés à la mise à jour de l'image.