Traefik Reverse Proxy

Nous avons vu dans les chapitres précédents, la configuration du reverse-proxy NGINX. Cependant, aujourd’hui, avec Docker, NGINX est un peu obsolète, et il existe des solutions plus dynamiques comme Traefik, dont nous allons parler dans cet article.

Le reverse proxy Traefik

Traefik est un reverse-proxy (aussi appelé edge router) open-source.
Un reverse proxy est un programme qui gère l’accès à des serveurs dans un réseau qui se trouve derrière lui, en ajoutant de la sécurité, de la journalisation, et parfois, du chiffrement.

La particularité de Traefik est sa fonction de découverte de services, ce qui signifie qu’il travaille avec Docker afin de créer sa configuration pour les conteneurs qui sont en cours.
Il faut pour cela, lui donner le chemin du socket Docker, ce que l’on verra dans la partie suivante, la configuration

Configuration

La configuration du reverse-proxy Traefik est très simple. Tout d’abord, il faut instancier un container Traefik dans le fichier docker-compose :

  reverse-proxy:
    # The official v2.0 Traefik docker image
    image: traefik:latest
    # Enables the web UI and tells Traefik to listen to docker
    command:
      --api.insecure=true
      --providers.docker
      --entrypoints.web.address=:80
    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
      - /home/user/compose/traefik/traefik.toml:/etc/traefik/traefik.toml
      - /home/user/compose/traefik/acme.json:/acme.json
      - /home/user/compose/traefik/access.log:/var/log/access.log
    networks:
        backend:

Ensuite, on édite le fichier de configuration :

[api]
  dashboard = true # Active le panneau de contrôle..
  insecure = true #.. en http

[entryPoints]
  [entryPoints.web]
    address = ":80" # Définis le port 80 comme entrée

[providers]
  [providers.docker]
    watch = true
    exposedByDefault = false
    network = "backend" # Active la découverte de services dockers, sur le réseau "backend"

[accessLog]
  filePath = "/var/log/access.log" # Fichier de logs

[pilot]
    token = "un-token" # Token pour le service web "pilot"

On peut ensuite activer le service sur les différents containers :

  hugo:
    image: nginx:latest
    restart: always
    volumes:
      - /home/user/compose/hugo/sdn_notice/public/:/usr/share/nginx/html/
    labels:
        - "traefik.enable=true" # Active le reverse-proxy pour ce container
        - "traefik.http.routers.doc.rule=Host(`doc.sdn.chalons.univ-reims.fr`)" # Permet de définir l'URL d'accès
    networks:
        backend:
    [...]
  api_r1:
    [...]
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.api_r1.loadbalancer.server.port=8000" # Permet de spécifier le port cible
      - "traefik.http.routers.api_r1.rule=Host(`r1.api.sdn.chalons.univ-reims.fr`)"

L’interface web

Une fois la configuration effectuée, on peut accéder à l’interface web, qui tourne sur le port 8080 :

dashboard1

dashboard21

Cette interface est uniquement informative, aucune configuration ne peut être faite à partir d’elle.