Outils pour utilisateurs

Outils du site


sysadmin:docker:traefik

Traefik

Traefik est un reverse-proxy, un projet Open source français initié par Emile Vauge en 2016. Traefik est développé par la startup Containous situé à Lyon.

Historiquement Apache et Nginx on offert le service de reverse proxy pour des applications monolithiques (applications lourdes, déployées une bonne fois pour toute et difficiles à migrer).

Avec l'arrivée du cloud computing, les applications monolithiques ont été réorganisées en micro-services interdépendants, communicants et extensibles(scalable). Un cycle de de vie peut ainsi être associé à chaque micro-service. Pour chaque nouvelle application, on passe généralement par les étapes suivantes:

  • création /développement du service applicatif
  • création des fichiers de configuration (apache ou nginx) pour le déploiement.
  • Génération des certifications SSL.

Puis, lorsque le service atteint sa fin de vie:

  • suppression du service
  • suppression de la configuration
  • suppression du certificat SSL

Le paradigme des micros-services résout des problèmes mais en crée des nouveaux:

  • Comment livrer tous les services de manière homogène;
  • Comment tracer journaliser les requêtes;
  • Comment aiguiller une requête externe sur le bon service (c'est à ce niveau qu'intervient Traefik).

Traefik est un reverse-proxy dynamique qui permet d'alléger la boucle des étapes consécutives décrite plus haut. Il simplifie le déploiement de micro-services. Traefik s’intègre au mode d'orchestration de l'infrastructure existante (Docker engine simple ou Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS,etc) et s' auto-configure en grande partie dynamiquement. Faire le lien entre Traefik et l’orchestrateur devrait être la seule étape de configuration à réaliser.

Les principales caractéristiques et fonctionnalités de Traefik:

  • Écrit en GO, distribué sous forme de binaire unique ou via une image Docker.
  • Supporte l'ajout de plugins écrits en Go via un Marketplace (depuis sa version 2.3.0)
  • facile d'utilisation
  • supporte HTTP et HTTPS, TCP
  • Intégration native de Let’s Encrypt pour fournir du chiffrement aux différents services.
  • Supporte plusieurs algorithmes de load-balancing (équilibrage de charge).
  • Interface web pour contrôler la configuration et mise à disposition d’une API Rest.
  • Fournit des métriques (Rest, Prometheus, Datadog, Statsd, InfluxDB) et des logs d’accès (JSON, CLF).

On désigne parfois Traefik d' edge reverse proxy:

  • Edge indique qu'il se trouve sur l'arrête, la limite ou à la frontière de votre infrastructure. C'est le seul conteneur accessible depuis l’extérieur (l'Internet). Les autre services sont déployés à la la demande et accessible au travers de Traefik.
  • Traefik est configuré pour écouter l'orchestrateur au travers de l'API disponible: il détectes les nouveaux services et crée les routes/aiguillages.
  • Trafik reçoit les requêtes et aiguille le flux vers les bons services.

La philosophie de Traefik est de minimiser la configuration manuelle, d'utiliser au maximum les informations exploitables afin de générer dynamiquement la bonne configuration.

Architecture Traefik

Les requêtes sont attrapées par les entrypoints. On configure manuellement les entrypoints disponibles, les ports sur lesquels on souhaite que Traefik écoute.

Les requêtes capturées au niveau des entrypoints sont communiquées à des objets désignés routers (anciennement appelés frontends). Les routers intègrent deux fonctions:

  • les règles qui permettent l'aiguillage (en fonction de la requête on oriente vers un service)
  • les middlewares qui altèrent la requête avant de la transférer ou la réponse retournée.

Les services, correspondent à la représentation interne que Traefik se fait de l'ensemble des backends (les conteneurs présentés via l'API du docker engine). C'est ici qu'opère le service de load balancing

Les administrateurs en charge de la configuration de Traefik modifient ou définissent la configuration statique: les entrypoints, l’interfaçage avec les providers (docker, docker swarm, Kubernettes, Azur Service Fabric Amazon Container Services etc).

La partie dynamique de la configuration est déduite des informations récupérées via les API des providers pouvant communiquer les méta-données placées sur les conteneurs/services:

  • des labels les conteneurs Docker;
  • des ingres rules de Kubernetes;
  • des annotations d'Azur Service Fabric etc
Ce sont les développeurs qui intègrent ces informations directement à leurs services. Les labels sont définis par les développeurs et Traefik sera en mesure de les interpréter et d'effectuer le routage dès que les conteneurs seront créés et actifs.

Lorsque tout se passe normalement, le développeur déploie son service avec les bonnes métadonnées et Traefik le détecte. Il est alors en mesure d'immédiatement transmettre les requêtes entrantes vers ce nouveau service sans redémarrage ou rechargement de configuration.

Configuration

La configuration de Traefik est détaillée dans le wiki notes_configuration

Exemples

Références

sysadmin/docker/traefik.txt · Dernière modification : 2021/07/30 10:17 de 92.154.112.189