Traefik est un outil open-source, fran莽ais, permettant d'avoir un edge routeur et un load-balancer HTTP, TCP et UDP. La gestion des certificats SSL est aussi de la partie, que ce soit via Let's Encrypt ou votre autorit茅 de certification personnelle.

An open-source reverse proxy and load balancer for HTTP and TCP-based 聽applications that is easy, dynamic, automatic, fast, full-featured, production proven, provides metrics, and integrates with every major cluster technology...
Version Date Commentaires
1 01/2020 Cr茅ation de l'article
1.1 02/2020 Correction des informations
1.2 05/2022 Reformatage de l'article, corrections syntaxiques
1.3 08/2022 Ajout de la rubrique "Pourquoi Traefik"
1.4 05/2023 Mise 脿 jour des versions, de la syntaxe et ajout du contexte d'ex茅cution
1.5 07/2023 Suppression du port 8080, suppression des doublons, suppression du r茅seau docker

Objectif : D茅couvrir l'outil Traefik

Environnement : Debian 12, Docker 24.x, docker compose (plugin) 2.20.x, Traefik 2.10.

Contexte d'ex茅cution :

jho@vmi866042:/opt/docker/dc$ tree
.
鈹溾攢鈹 conf
鈹偮犅 鈹溾攢鈹 acme.json
鈹偮犅 鈹溾攢鈹 traefik.yml
鈹偮犅 鈹溾攢鈹 traefikdynamic
鈹偮犅 鈹偮犅 鈹溾攢鈹 dynamic.yml
鈹溾攢鈹 docker-compose.yml
鈹斺攢鈹 logs
    鈹溾攢鈹 traefikAccess.log
    鈹溾攢鈹 traefik.log
R茅sultat de la commande "tree" dans le dossier /opt/docker/dc
  • dossier o霉 se trouvent tous les fichiers et dossiers pour cet exemple : /opt/docker/dc
  • emplacement du fichier de configuration principal de Traefik : /opt/docker/dc/conf/traefik.yml
  • dossier o霉 se trouvent les configurations de Traefik (fichiers dynamiques) : /opt/docker/dc/conf/traefikdynamic
  • emplacement du fichier comportant tous les certificats g茅n茅r茅s par let's encrypt (ou autre) : /opt/docker/dc/conf/acme.json
  • dossier o霉 se trouvent les journaux d'茅v茅nements (logs) : /opt/docker/dc/logs/

Pourquoi utiliser Traefik ?

Dans vos infrastructures, vous avez parfois la n茅cessit茅 de permettre 脿 vos utilisateurs d'acc茅der 脿 divers services. Avec les besoins grandissant en disponibilit茅, vous serez amen茅 脿 avoir plusieurs serveurs devant 锚tre accessibles sans action de la part de l'utilisateur. Pour ce faire, un serveur de type 芦 proxy inverse 禄 doit 锚tre mis devant ces serveurs d'applications. Ce proxy inverse sera le seul point d'entr茅e pour vos utilisateurs.

Un proxy inverse permet plusieurs choses :

  • r茅partir la charge entre les machines selon l'action souhait茅e,
  • effectuer un filtrage en entr茅e,
  • g茅rer une authentification en entr茅e, ou transf茅rer la demande (valide) d'authentification vers un autre service,
  • garder des pages en m茅moire pour les redistribuer plus rapidement 脿 la demande.

En plus des fonctionnalit茅s de proxy inverse, Traefik est aussi un routeur efficace, vous facilitant la configuration gr芒ce 脿 son module de d茅couverte automatique.

Quelques 茅l茅ments de compr茅hension

馃挕
Reprise des informations fournies par ldez, mainteneur de Traefik. Un grand merci pour toutes les corrections apport茅es et les informations compl茅mentaires !!

Qu'est-ce que la configuration statique ?

C'est l'ensemble des options utilis茅es au d茅marrage de Traefik. Ces options concernent principalement les informations de connexions vers les providers (fournisseurs), les syst猫mes de tracking et outils de m茅triques.

Ces options peuvent 锚tre d茅finies de 3 fa莽ons diff茅rentes :

  • avec un fichier de configuration principal au format TOML ou YAML (c'est le traefik.toml ou traefik.yml) ;
  • avec des param猫tres de ligne de commandes (CLI flags) ;
  • avec des variables d'environnement (d茅conseill茅).

Il n'est possible d'utiliser qu'une seule source 脿 la fois (donc soit le fichier, soit la ligne de commandes).

La configuration statique, Quelle que soit sa source (TOML/YAML, CLI flags, ou variables d'environnement) n'est lu qu'une seule fois lors du d茅marrage de Traefik. Il n'est pas possible de d茅finir le routage (routers, services, middlewares, configuration TLS) dans la configuration statique.

Qu'est-ce que la configuration dynamique ?

C'est l'ensemble des options utilis茅es pour d茅finir les routers, les services, les middlewares et la configuration TLS.

Cette configuration peut 锚tre d茅finie de diff茅rentes fa莽ons :

  • avec un ou des fichiers (provider file) au format TOML ou YAML, sans lien avec le contenu du fichier traefik.toml / traefik.yml ;
  • avec des labels (provider Docker, Rancher, etc) ;
  • avec des Ingress ou des CRD propre 脿 Traefik (Kubernetes) ;
  • via des donn茅es stock茅es dans un KV store

Toutes ces sources de configuration dynamique peuvent 锚tre utilis茅es en m锚me temps. La configuration dynamique peut 锚tre modifi茅e pendant l鈥檈x茅cution de Traefik sans avoir besoin de red茅marrer (gr芒ce 脿 la ligne watch = true).

Dans le cas de tous les providers (sauf le provider file), cette configuration est automatiquement reconstruite et mise 脿 jour (sans rechargement) d猫s qu'un changement est d茅tect茅 (ajout/suppression/modification d'un conteneur ou d'un fichier de configuration).

traefik architecture
R茅sum茅 de l'architecture de Traefik

Fichier docker-compose.yml pour Traefik

L'id茅e est d'avoir un conteneur capable de rediriger les requ锚tes en fonction de la demande. Pour ce faire, je vais utiliser le dossier /opt/docker/dc et y cr茅er les dossiers/fichiers n茅cessaires.

De plus, j'utilise une configuration dynamique pour configurer mes routeurs et services. Apr猫s plusieurs essais, je trouve plus facile l'utilisation des configurations dynamiques qu'une configuration statique avec labels dans le docker-compose.yml. Avec de genre de configuration, plus besoin de red茅marrer Traefik et les autres conteneurs pour prendre en compte les modifications.

脡tapes pr茅liminaires

Cr茅ation des dossiers et des fichiers de configuration et y attribuer les droits n茅cessaires.

sudo mkdir -p /opt/docker/dc/conf/traefikdynamic /opt/docker/dc/logs

sudo touch /opt/docker/dc/conf/acme.json /opt/docker/dc/conf/traefik.yml /opt/docker/dc/logs/traefik.log

sudo chmod 0600 /opt/docker/dc/conf/acme.json

Ci-dessous un exemple de fichier docker-compose.yml pour Traefik, avec son fichier de configuration traefik.yml (en lecture seule) et le fichier acme.json pour y stocker les certificats Let's Encrypt (en lecture/茅criture).

---
services:
  traefik:
    image: traefik:saintmarcelin
    container_name: traefik
    restart: unless-stopped
    ports:
      - target : 80
        published : 80
        protocol: tcp
        mode : host
      ### BEGIN dashboad
      - target : 8080
        published : 8080
        protocol: tcp
        mode : host
      ### END dashboard
      - target : 443
        published : 443
        protocol: tcp
        mode : host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./conf/traefikdynamic:/dynamic
      - ./conf/traefik.yml:/etc/traefik/traefik.yml:ro
      - ./conf/acme.json:/etc/traefik/acme.json
      - ./logs/traefik.log:/etc/traefik/applog.log
    environment:
      TZ: Europe/Paris
docker-compose.yml

Le fichier traefik.yml correspond aux options de d茅marrage pour Traefik (fichier de configuration statique). Actuellement, je vous propose un fichier relativement simple, permettant 2 points d'entr茅es (80/TCP & 443/TCP), des logs, se connecter au socket de docker et acc茅der au tableau de bord web Traefik :

---
global:
  sendAnonymousUsage: false
  checkNewVersion: false

api:
  dashboard: true

log:
  filePath: "/etc/traefik/applog.log"
  format: json
  level: "ERROR"

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
    watch: true
    swarmMode: false
  file:
    directory: "/dynamic"
    watch: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"
traefik.yml

脌 partir de cet instant, un docker compose up -d permettra de r茅cup茅rer la derni猫re image disponible si vous ne l'avez pas d茅j脿 et Traefik va d茅marrer. Avec la configuration pr茅sente dans cette documentation, en saisissant l'URL de votre h么te docker et le port 芦 8080 禄 dans un navigateur web, vous acc茅derez 脿 l'interface web de Traefik.

Maintenant, vous allez devoir configurer la d茅finition des services et des middlewares, pour exploiter pleinement Traefik.

English article here.

Partager l'article