5.0 KiB
TP Traefik
Intégrer Traefik dans le cluster Swarm.
Utiliser les labels Traefik pour accéder aux applications.
-
Déployer Traefik en tant que service dans le cluster sur un réseau personnalisé.
-
Se rendre sur l'interface web de Traefik.
Documentation officielle : https://docs.traefik.io/
$ docker network create --driver overlay traefik_net
$ docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network traefik_net \
traefik --docker --docker.swarmmode --docker.domain=traefik --docker.watch --web
Option | Description |
---|---|
--publish 80:80... |
we publish port 80 and 8080 on the cluster. |
--constraint=node.role==manager |
we ask docker to schedule Træfik on a manager node. |
--mount type=bind,source=... |
we bind mount the docker socket where Traefik is scheduled to be able to speak to the daemon. |
--network traefik_net |
we attach the Traefik service (and thus the underlying container) to the traefik_net network. |
--docker |
enable docker backend. |
--docker.swarmmode |
to enable the swarm mode on Traefik. |
--web |
activate the webUI on port 8080. |
Alternativement on peut aussi lancer Traefik avec docker stack
et le docker-compose suivant :
traefik/docker-compose-traefik.yml
version: "3"
services:
traefik:
image: traefik:tetedemoine
ports:
- 80:80
- 8080:8080
networks:
- traefik_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: ["--docker", "--docker.swarmmode", "--docker.domain=traefik", "--docker.watch", "--web"]
deploy:
placement:
constraints: [node.role == manager]
networks:
traefik_net:
driver: overlay
# si le réseau traefik_net existe déjà on peut l'utiliser comme ceci :
#networks:
# traefik_net:
# external: true
Lancer la stack :
$ docker stack deploy -c docker-compose-traefik.yml traefik
Creating network traefik_traefik_net
Creating service traefik_traefik
- Adapter le
docker-compose.yml
de notre application (partie 3 du TP Swarm) en ajoutant des labels pour Traefik :- Placer les services
web
etdb
sur le réseauformation_net
. - Placer le service
web
sur le réseautraefik_net
. - Ajouter des labels
traefik.*
sur le serviceweb
pour :- le port de l'application
- l'url sur laquelle l'application doit répondre
- le réseau swarm traefik
- Placer les services
- Lancer la stack.
traefik/docker-compose-formation-app-with-traefik.yml
version: "3"
services:
web:
image: web:1
environment:
- MYSQL_HOST=db
- MYSQL_DATABASE=docker
- MYSQL_USER=docker
- MYSQL_PASSWORD=docker
networks:
- formation_net
#- traefik_net # si Traefik lancé avec service
- traefik_traefik_net # si Traefik lancé avec stack
deploy:
labels:
#traefik.docker.network: "traefik_net" # si Traefik lancé avec service
traefik.docker.network: "traefik_traefik_net" # si Traefik lancé avec stack
traefik.port: "80"
traefik.frontend.rule: "Host:web.traefik"
db:
image: mariadb:10.7.1
environment:
- MYSQL_ROOT_PASSWORD=docker
- MYSQL_DATABASE=docker
- MYSQL_USER=docker
- MYSQL_PASSWORD=docker
networks:
- formation_net
networks:
#traefik_net: # si Traefik lancé avec service
traefik_traefik_net: # si Traefik lancé avec stack
external: true
formation_net:
driver: overlay
Lancer la stack :
$ docker stack deploy -c docker-compose-formation-app-with-traefik.yml formation
Creating network formation_formation_net
Creating service formation_web
Creating service formation_db
-
Vérifier si Traefik détecte correctement l'application
web
. -
Accéder à l'application
web
: comment ? -
Mettre à l'échelle le service
web
et constater le load balancing effectué par Traefik.
Pour accéder à notre application web il faut ajouter l'entrée suivante dans le fichier /etc/hosts
de l'hôte :
127.0.0.1 web.traefik
Puis dans le navigateur, taper sur l'adresse :
http://web.traefik/cgi-bin/index.sh
Créer trois instance du service web
:
$ docker service scale formation_web=3
formation_web scaled to 3