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.
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
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`)"
Une fois la configuration effectuée, on peut accéder à l’interface web, qui tourne sur le port 8080 :
Cette interface est uniquement informative, aucune configuration ne peut être faite à partir d’elle.