{{tag>sysadmin netadmin dev traefik http load_balancing}}
====== Traefik: reverse proxy http avec load balancing ======
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:
* La Web UI http://localhost:8080
* L'API http://localhost:8080/api/rawdata
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.
===== Références =====
* https://doc.traefik.io/traefik/getting-started/quick-start/