·
  • Etat des services
  • 03 57 75 61 46
  • Espace Client
Devclic
 
En route vers Traefik 3
Technique|mardi 15 avril 2025

Traefik est un load balancer permettant d’appliquer dynamiquement des configurations qui collent aux containers Docker faisant ainsi que la configuration de celui-ci est totalement dynamique grâce aux labels

Nous l’utilisons depuis la version 1, puis nous sommes passés à la version 2 et dorénavant la version 3

La version 3 apporte le support de HTTP 3, en effet, nous étions bloqués en version 2

Pourquoi Traefik ?

Comme nous le disions plus tôt, quand on a des containers, le plus simple pour les mettre en ligne est de définir la configuration avec des labels, afin que la Traefik se configure et utilise, si plusieurs backends sont présents, les backends déclarés et fasse le load balancing nativement

Ce qui est surtout intéressant est que chaque container porte sa configuration de load balancing. Ainsi, si on détruit le container, la configuration est effacée avec

Un autre avantage de Traefik est qu’il gère nativement toute la partie LetsEncrypt et ce, de façon dynamique. Si vous déclarez vouloir un certificat SSL LetsEncrypt, Traefik va se charger de le générer et de gérer le renouvellement. Il faut au passage que tout ceci soit disponible sur internet, sinon cela ne fonctionne pas.

Comment nous déployons Traefik ?

Traefik est déployé en entrée de réseau, et écoute les ports HTTP(s) les plus classiques, à savoir les ports 80 et 443.

Nous lui dédions un sous-réseau nommé gateway ou ingress par exemple, dans lequel on viendra connecter les serveurs Web / load balancer / applications qui sont à présenter sur internet.

Chaque application est ainsi connectée dans le réseau ingress / gateway avec une adresse IP qui lui est propre où traefik lui adressera le trafic reçu. Chaque application possède également son propre réseau applicatif qui lui est dédié, permettant ainsi une communication sans limite entre les différents composants la formant

Voici un exemple de configuration :

Pour la partie traefik

services:
  reverse-proxy:
    image: traefik:v3
    container_name: traefik
    restart: "always"
    command:
      - "--accesslog=true"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.network=gateway"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=XXX@XXX.fr"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      # The HTTP port
      - "80:80"
      - "443:443"
    volumes:
      - "./letsencrypt:/letsencrypt"
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - default
    logging:
      driver: "json-file"
      options:
        max-size: "10M"
        max-file: "3"

networks:
  default:
      name: gateway

Pour une application (ici notre blog)

services:
  blog_devclic_website:
      image: XXXXXXXX
      restart: always
      ulimits:
       memlock:
        soft: -1
        hard: -1
      networks:
        - default
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.blog_devclic_fr.rule=Host(`blog.devclic.fr`)"

networks:
  default:
      name: gateway

Notre blog n’a pas de base de données au sens propre, de ce fait, il n’a pas besoin d’un réseau dédié. Mais si vous avez une base de données quelconque, type MongoDB, MySQL ou autre, vous pouvez alors créer un réseau pour votre application et l’utiliser avec votre applicatif, cela vous permet de séparer la couche présentation des autres couches applicatives

Et pour mettre à jour Traefik, nous utilisons watchtower, nous nous retrouvons ainsi, avec la dernière version de Traefik stable sans que nous ayons besoin de nous en occuper