blog.bressure.net

Application, Paramétrage

Mise en place de Traefik et HAProxy

admin

Ce billet fait suite au précédent où j’expliquais que je voulais migrer mon reverse proxy apache qui faisait trop chose et me demandait beaucoup de configuration avec la croissance exponentielle des services que j’héberge tellement il est facile d’en ajouter avec docker, vers le triptyque Apache-HAProxy-Traefik.

L’enjeu est de procéder à cette migration de la manière la plus progressive possible en évitant de trop grandes interruptions de service. Prenons l’exemple d’un service www.kitejust4fun.fr que nous allons migrer vers la nouvelles architecture. Voici pour rappel le schémas de flux actuel et la cible:

Activation du routage par nom de domaine dans Traefik

Le titre est mal choisi car je vais utiliser le mécanisme de découverte du conteneur par Traefik. Cela signifie qu’il n’y pas de configuration à faire dans Traefik. C’est dans le conteneur que l’on ajoute l’information en se servant d’un label qui indique à Traefik que ce conteneur sait répondre à ce service.

Dans le fichier docker-compose.yml du service www.kitejust4fun.fr on ajoute l’entrée suivante:

labels:
           - "traefik.http.routers.kitejust4fun_asso.rule=Host(`www.kitejust4fun.fr`)"

Au redéploiement du service on observe dans l’ihm de Traefik que j’ai exposée sur http://192.168.122.30:8888/ où 192.168.122.30 est l’IP de ma VM où se trouve le conteneur Traefik

Dès lors toute requête HTTP vers le port exposé de Traefik (chez moi 88), sera envoyée vers ce conteneur si l’hôte renseigné dans le header http Host est www.kitejust4fun.fr

Ajout du routage dans le haproxy

La configuration finale du haproxy sera la suivante puisqu’il n’a pas besoin de connaître le port d’exposition du service

    frontend http-in
        bind *:80
        default_backend production

    backend production
        server server1 192.168.122.30:88

Cela sera vrai pour les futurs services mais comme celui-là est bien connu et que je veux le migrer progressivement vers un accès par Traefik, je vais ajouter une ferme dédiée avec le routage vers le port d’exposition du service en guise de backup. Cela donne:

    frontend http-in
        bind *:80
        acl is_kitejust4fun_asso hdr_dom(host) www.kitejust4fun.fr
        use_backend kitejust4fun_asso_backup if is_kitejust4fun_asso
        default_backend production

    backend production
        server server1 192.168.122.30:88
        
         
    backend kitejust4fun_asso_backup
        option httpchk
        server server1 192.168.122.30:88   check
        server legacy  192.168.122.30:8084 backup

Liaison apache vers haproxy

C’est la partie la plus simple. Dans la section du VirualHost en question il suffit de remplacer les balises ProxyPass et ProxyPassReverse pour pointer vers le haproxy:


ProxyPass "/" "http://192.168.122.30:8084/"
ProxyPassReverse "/" "http://192.168.122.30:8084/"

devient:


ProxyPass "/" "http://localhost:7070/"
ProxyPassReverse "/" "http://localhost:7070/"

Ce paramétrage sera le même quel que soit le service. Il ne me reste plus qu’à migrer le reste de mes services afin de simplifier la configuration de mon apache en déportant la configuration dans le haproxy. Seuls les nouveaux services tireront pleinement profit de l’absence de configuration spécifique.

Tags:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top