Au cours de la précédente série d'articles sur traefik, nous avons pu découvir comment mettre en place une configuration simple avec notament l'exposition d'un service whoami.

Ce type de configuration peut sastisfaire votre utilisation, surtout si vous ne souhaitez pas exposer de nombreux sites webs sur un même serveur. Par contre si votre but est de mutualiser un serveur alors cette façon de procéder va vite vous poser quelques soucis de maintenabilité et de relecture. Nous allons donc voir comment rendre notre configuration plus pérenne.

Les configurations de Traefik

Il est important de comprendre une chose au sujet de la configuration de votre routeur edge favori. La configuration s'articule en réalité autour de deux configurations que la documentation officielle nomme de cette façon :

  • The fully dynamic routing configuration (referred to as the dynamic configuration)
  • The startup configuration (referred to as the static configuration)

Intéressons-nous dans un premier temps, à la configuration de "démarrage" qui est également appelée, la configuration statique.

La configuration statique

Je n'aime pas trop ce terme, je lui préfère très clairement la terminologie de configuration de démarrage. Au moins là, c'est clair, il s'agit du fichier de configuration qui est lu au démarrage du processus. Dans nos premiers essais par exemple, nous avions déclaré l'utilisation du dashboard de la façon suivante :

version: '3'

services:
  reverse-proxy:
    ...
    command: --api.insecure=true --providers.docker
    ...

De cette façon, en activant juste le SSL, les logs, et un seul provider ( Docker bien sûr ), on arrive déjà à quelques lignes de configuration dans mon fichier docker-compose :

      - "--log.level=INFO"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "[email protected]domain.com"
      - "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"

Depuis la version 1, on nous offre la possibilité de stocker cette configuration dans un fichier, mais uniquement en TOML. Avec la sortie de Traefik 2, nous pouvons également écrire ce fichier au format YAML.

Simplement au démarrage, le processus va rechercher un fichier nommé traefik.toml ou traefik.yml dans les dossiers suivants :

  • /etc/traefik/
  • $XDG_CONFIG_HOME/
  • $HOME/.config/
  • . (the working directory).

Modifions donc nos précédents exemples afin d'utiliser un fichier de configuration.

Notre premier fichier de configuration ...

Créons donc un premier fichier traefik.yml dans lequel nous allons reprendre les éléments de configuration nécessaires à Traefik pour l'affichage de notre service whoami. De quoi avons-nous besoin pour cela ?

  • l'accès au dashboard
  • La déclaration du backend Docker
  • un point d'entrée sur le port 80, HTTP.

Ce qui nous donne dans notre docker-compose :

    command: 
      --api.insecure=true 
      --providers.docker
      --entrypoints.web.address=:80

Notre fichier de configuration en YAML va lui tout simplement ressembler à cela :

api:
  insecure: true

providers:
  docker:
    exposedByDefault: false

entryPoints:
    http:
      address: :80

Il ne reste plus qu'à modifier notre fichier docker-compose afin de prendre en compte ce fichier. Je vais utiliser un volume afin de placer mon fichier dans /etc/traefik au démarrage du conteneur :

version: '3.7'

services:
    reverse-proxy:
        # The official v2.0 Traefik docker image
        image: traefik:2.1
        restart: always
        # Enables the web UI and tells Traefik to listen to docker
        ports:
          # The HTTP port
          - "80:80"
          # The Web UI (enabled by --api.insecure=true)
          - "8080:8080"
        volumes:
          # So that Traefik can listen to the Docker events
          - /var/run/docker.sock:/var/run/docker.sock
          - ./traefik.yml:/etc/traefik/traefik.yml:ro

En réalité, vous connaissez maintenant déjà très bien la configuration dynamique ...

La configuration dynamique

Cette configuration nous avons pu la voir ensemble depuis le début de cette série d'articles: il s'agit tout simplement de la déclaration que nous réalisons au travers des labels.
Exemple :

  whoami:
    # A container that exposes an API to show its IP address
    image: containous/whoami
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.whoami.rule=Host(`whoami1.docker.localhost`)"

Il n'y a pas grand chose d'autres à ajouter sur cette configuration ( en tout cas pour le moment 😃 )


Vous remarquerez que dans ces exemples, je n'ai pas repris les middlewares que nous avions mis en place. Je pensais initialement aller plus loin au cours de cet article mais je préfère ajouter ces éléments avec notre nouvelle configuration au cours d'un prochain article.

J'ai également mis en place un petit git afin de laisser les configurations de chaque article en ligne et vous permettre de les consulter plus facilement :

https://github.com/lfache/traefik_advanced_config_first_traefik_yml

N'hésitez pas à faire vos commentaires sur Twitter , cela permet également de constater l'utilité du travail réalisé ici 😘

Vous pouvez également retrouver plus d'articles sur Traefik.