[FR] TRAEFIK, LE REVERSE PROXY HTTPS

oct. 15, 2017

Traefik est un reverse proxy HTTP/HTTPS et un équilibreur de charge (load-balancer) moderne dans le but de déployer facilement des microservices. Il supporte plusieurs type de backends comme Docker, Swarm, Kubernetes, Marathon, Rancher, Amazon ECS, ..., pour gérer sa configuration de manière automatique et d'autres mais d'une manière basique. Je vous invite à vous rendre sur le site officiel pour en savoir plus !

architecture

Je l'utilise chez moi comme point d'entr√©e HTTP/HTTPS depuis plusieurs mois maintenant. J'ai plusieurs raisons √† l'utiliser mais principalement, il tourne dans un container Docker (c'est simple √† g√©rer), il g√®re facilement mes certificats Let's Encrypt, il redirige le trafic (du domaine utilis√©/configur√©) vers l'√©quipement qui va bien (y'a un peu de monde derri√®re) ūüėÖ

Je vais prendre l'exemple avec l'un de mes RaspberryPiZero qui fait tourner en t√Ęche de fond mon API (port 5000/tcp) pour le contr√īle de mes lampes de bureau (un truc d√©velopp√© maison en Python/Flask). Bref par d√©faut personne n'a envi d'exposer son port 5000/tcp sur internet, et d'autant plus que le service fourni seulement du HTTP derri√®re... C'est donc pour cela que j'utilise Traefik en front pour "securiser" un peu la chose. Pour que ce soit simple √† g√©rer et √† maintenir, on va faire √ßa avec docker-compose avec le fichier /home/docker/traefik/docker-compose.yml :

version: '2'
services:
    traefik:
        container_name: traefik
        image: traefik:latest
        restart: always
        ports:
            - "80:80"
            - "443:443"
            - "8080:8080"
        labels:
            - "traefik.enable=true"
            - "traefik.port=8080"
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
            - "/home/docker/traefik/letsencrypt.json:/etc/traefik/letsencrypt.json"
            - "/home/docker/traefik/traefik.toml:/etc/traefik/traefik.toml"
            - "/home/docker/traefik/log:/var/log/traefik"

Le container est prêt à être lancé mais ce n'est pas suffisant pour qu'il tourne dans l'immédiat. Il faut pour ça faire quelques retouches dans le fichier de configuration traefik.toml. Pour que ce soit assez simple à comprendre, voilà ce que j'ai chez moi (c'est un exemple) :

# Service logs (here debug mode)
debug = true
traefikLogsFile = "/var/log/traefik/traefik.log"
logLevel = "DEBUG"

# Entrypoints
[entryPoints]
    [entryPoints.http]
    address = ":80"
        [entryPoints.http.redirect]
        entryPoint = "https"
    [entryPoints.https]
    address = ":443"
        [entryPoints.https.tls]
        
# Access log
filePath = "/var/log/traefik/access.log"
format = "common"

# Admin dashboard
[web]
address = ":8080"

# Let's Encrypt settings
[acme]
email = "hello@xorhak.org"
storage = "/etc/traefik/letsencrypt.json"
entryPoint = "https"
acmeLogging = true
onDemand = false
onHostRule = true

# Let's Encrypt domains
[[acme.domains]]
main = "api.home.xorhak.org"

# Reload is file modified
watch = true

# Backends (here RaspberyPiZero)
[backends]
    [backends.back_raspberypi_api]
        [backends.back_raspberrypi_api.servers.python_flask]
        url = "http://192.168.1.37:5000"

# Fronts
[frontends]
    [frontends.front_raspberrypi_api]
    backend = "back_raspberrypi_api"
    entrypoints = ["http", "https"]
    passHostHeader = true
        [frontends.front_raspberrypi_api.routes.desktoplamp]
        rule = "Host:api.home.xorhak.org"

Maintenant reste plus qu'à lancer le container avec la commande docker-compose up -d et à rejoindre le domaine que vous avez configuré, par exemple ici c'est https://api.home.xorhak.org (tout le trafic HTTP est redirigé vers HTTPS de toute manière). Vous aurez ainsi un accès direct vers votre service (ici l'API qui se trouve sur le RaspberyPiZero). Le dashboard d'admin écoute sur le port 8080, et comme il tourne dans un container en local, je peux utiliser http://localhost:8080 pour l'accès :

djerfy-macserver_-2017-10-15-a--14.26.19

Pour le moment je n'utilise pas le mode dynamique car mes services ne sont pas encore containeris√©s (mais c'est en cours). La documentation est aussi bien faite, dans mon cas j'ai utilis√© celle pour la partie Let's Encrypt et celle pour la partie File (utilis√© pour des backends simples). Si vous avez des choses de ce type √† mettre en place chez vous, pensez √† tester Traefik ūüėČ

DJőěRFY ūüĆĪ

Linux Admin N3. Like #Apple, #Linux, #Kubernetes & #Docker, #TraefikAmbassador, #Hacking, #CTF, #Proxmark, #RFID ¬Į\_(„ÉĄ)_/¬Į

Super ! Vous vous êtes inscrit avec succès.
Super ! Effectuez le paiement pour obtenir l'accès complet.
Bon retour parmi nous ! Vous vous êtes connecté avec succès.
Parfait ! Votre compte est entièrement activé, vous avez désormais accès à tout le contenu.