Dans un premier poste au sujet de Traefik v2, j'avais abordé les différences entre la version 1 et la version 2 du reverse-proxy. Les configurations de la v1 ne sont plus compatibles avec cette nouvelle version. Plutôt que de longs discours, ce billet va tout simplement montrer par l'exemple la mise en place de cet outil sur un environnement Docker.

Pré-requis

Quelques pré-requis avant de nous lancer dans un cas concret :

Installation

Un des avantages de Traefik, c'est qu'il existe tout simplement une image officielle sur le Hub Docker. On peut donc directement le lancer au travers d'un conteneur !

Pour information, il est tout de même possible de l'installer via un paquet binaire. Pour notre exemple, je vais utiliser la version disponible sous forme d'image docker afin de l'intégrer plus facilement à mon installation existante. Encore une fois, je vais utiliser docker-compose pour arriver à cela. Il est donc nécessaire de créer notre fichier docker-compose.yml :

version: '3'
services:
  reverse-proxy:
    # The official v2.0 Traefik docker image
    image: traefik:latest
    # Enables the web UI and tells Traefik to listen to docker
    command: 
      --api.insecure=true 
      --providers.docker
      --entrypoints.web.address=:80
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock

Nous allons pouvoir lancer le service pour la première fois :

docker-compose up -d

En se rendant sur l'adresse suivante : http://127.0.0.1:8080 vous allez pouvoir accéder au dashboard de l'application :

Notre premier site

Afin de réaliser notre premier test, nous allons utiliser une image fournie par la société Containous qui est également derrière Traefik.

Whoami est une petite application web écrite en Go qui affiche les informations de votre système d'exploitation et de la requête HTTP. Cette image est légère,  je vais m'en servir pour notre exemple.

J'aurais pu lancer cette image sans traefik de la façon suivante :

version: '3'
services:
 whoami:
    # A container that exposes an API to show its IP address
    image: containous/whoami
    ports:
        - 80:80

En exécutant ce conteneur je vais pouvoir me rendre sur http://127.0.0.1 et constater que tout fonctionne correctement :

Ok maintenant, utilisons Traefik, il suffit pour cela d'ajouter le "labels" correspondant à notre service whoami :

version: '3'
services:
  reverse-proxy:
    # The official v2.0 Traefik docker image
    image: traefik:latest
    # Enables the web UI and tells Traefik to listen to docker
    command: 
      --api.insecure=true 
      --providers.docker
      --entrypoints.web.address=:80
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock

 whoami:
    # A container that exposes an API to show its IP address
    image: containous/whoami
    labels:
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"

On peut vérifier avec curl que tout fonctionne ( en passant, un petit tips pour curl sous windows ) :

curl 'http://127.0.0.1' -H @{"Host"="whoami1.docker.localhost"}

Dans un prochain billet, nous jouerons avec les Middlewares de Traefik 2 afin d'ajouter quelques règles.

Vous pouvez également retrouver plus d'articles sur Traefik.