Outils pour utilisateurs

Outils du site


sysadmin:docker:traefik:010_exemple_loadbalancing_http

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.

docker-compose.yml
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.

Références

sysadmin/docker/traefik/010_exemple_loadbalancing_http.txt · Dernière modification : 2021/02/06 12:23 de 77.192.232.26