TP 7 (bonus) - Docker et les reverse proxies

Exercice 1a - Utiliser Traefik pour le routage

Traefik est un reverse proxy très bien intégré à Docker. Il permet de configurer un routage entre un point d’entrée (ports 80 et 443 de l’hôte) et des containers Docker, grâce aux informations du daemon Docker et aux labels sur chaque containers. Nous allons nous baser sur le guide d’introduction Traefik - Getting started.

  • Avec l’aide de la documentation Traefik, ajoutez une section pour le reverse proxy Traefik pour dans un fichier Docker Compose de votre choix.
Solution :
  • Explorez le dashboard Traefik accessible sur le port indiqué dans le fichier Docker Compose.

Pour que Traefik fonctionne, 2 étapes :

  • faire en sorte que Traefik reçoive la requête quand on s’adresse à l’URL voulue (DNS + routage)

  • faire en sorte que Traefik sache vers quel conteneur rediriger le trafic reçu (et qu’il puisse le faire)

  • Ajouter des labels à l’app web que vous souhaitez desservir grâce à Traefik à partir de l’exemple de la doc Traefik, grâce aux labels ajoutés dans le docker-compose.yml (attention à l’indentation).

    Solution :

Exercice 1b - un certificat Let’s Encrypt (ou autosigné)

Solution :

Note pour utiliser un certificat autosigné :

Pour utiliser un certificat autosigné, il n’y a pas besoin de configurer de “cert resolver”, il suffit de bien exposer le port 443 de Traefik et d’adapter la ligne suivante pour chaque service exposé : - "traefik.http.routers.whoami.tls=true"

Exercice 2 - Router vers notre stack identidock

Ajoutons des labels dans notre stack identidock pour l’exposer via Traefik sur l’adresse monster.localhost.

Indice 1 :
Indice 2 :

Attention : il y a un problème avec Traefik qui n’est pas explicite ! Cette page vous aidera à le résoudre (à rajouter dans le paramètre command: du conteneur Traefik) : https://community.traefik.io/t/docker-provider-how-does-traefik-choose-which-service-ip-address-to-proxy-to-when-container-is-on-multiple-networks/16852/2

Exercice 3 - Swarm avec Traefik

Solution :