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: haproxy Traefik