Un cas d'utilisation simple pour découvrir la mise en place de traefik. La configuration proposée ici est une démonstration à ne pas utiliser telle quelle en production. Elle est reproductible dans un environnement de développement/test.
mkdir http_loadbalancing cd http_loadbalancing
Créer le fichier docker-compose présent ci-dessous.
version: '3'
services:
reverse-proxy:
# On utilise l'image Docker officielle Traefik v2
image: traefik:v2.4
# Active la web UI en HTTP et demande à Traefik d'écouter le Docker Engine
command: --api.insecure=true --providers.docker
ports:
# Le port HTTP (point entrant unique des requêtes web)
- "80:80"
# L'interface de gestion Web de Traefik autorisée par la commande --api.insecure=true
- "8080:8080"
volumes:
# Traefik écoute l'orchestrateur local Docker via le mapping suivant
- /var/run/docker.sock:/var/run/docker.sock
On peut lancer dès à présent l'exécution de Traefic:
docker-compose up -d reverse-proxy # Pour vérifier l’état du service docker-compose ps
Traefik fournit les informations d'état et de routage via:
A présent que Traefik est en cours d’exécution, nous pouvons créer un nouveau service, pour cela nous allons ajouter ce service dans le fichier docker-compose.yml
whoami: # micro service minimal affichant quelques attributs de configuration image: traefik/whoami labels: - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
Les quelques lignes ci-dessus déclarent un nouveau service désigné “whoami” qui affiche quelques attributs de configuration concernant le conteneur et l’hôte.
Traefik utilise les labels pour le routage du trafic. Ici c'est le nom d'hote whoami.localhost
qui permettra d'aiguiller le flux http entrant vers le service.
Pour que la résolution fonctionne, on modifie le fichier /etc/hosts
127.0.0.1 localhost 127.0.0.1 whoami.localhost
Vérifier la résolution du fqdn fonctionne via la commande host:
host whoami.localhost
On démarre le service whoami via la commande suivante:
docker-compose up -d whoami
via le navigateur, il est possible d'accéder au nouveau service http://whoami.localhost
les informations retournées contiennent notamment l'identifiant du conteneur et son adresse:
Hostname: 09ffd0552c70 IP: 127.0.0.1 IP: 172.18.0.3 ...
Si on supprime et qu'on recrée le service, le routage du trafic fonctionne sans problème car ni le nom (id) du conteneur ni l'IP ne sont utilisés:
docker-compose stop whoami docker-compose rm whoami docker-compose up -d whoami
Hostname: 80526238d732 IP: 127.0.0.1 IP: 172.18.0.3 ...
Si on décide d'étendre le service, Traefik sera capable de détecter les différentes instances et répartira automatiquement la charge entre elles:
docker-compose up -d --scale whoami=4
Le rafraîchissement de la page retourne successivement les valeurs de chaque instance:
Hostname: 419c41f3ac37 IP: 127.0.0.1 IP: 172.18.0.5 | Hostname: b13e5f59f4d4 IP: 127.0.0.1 IP: 172.18.0.4 | Hostname: f00e7d8f189b IP: 127.0.0.1 IP: 172.18.0.6 | Hostname: 80526238d732 IP: 127.0.0.1 IP: 172.18.0.3 |
On constate que sans configuration supplémentaire, le load balancing fonctionne à merveille. Traefik détecte les nouveaux conteneurs associés au service “whoami” et réparti les requêtes entrantes entre eux.