Resources attached to the Road To DevOps tutorial https://blog.noobtoroot.xyz/road-to-devops/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

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 et db sur le réseau formation_net.
    • Placer le service web sur le réseau traefik_net.
    • Ajouter des labels traefik.* sur le service web pour :
      • le port de l'application
      • l'url sur laquelle l'application doit répondre
      • le réseau swarm traefik
  • 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