emilienm.routed_lb
ansible-role-routed-lb
Ce rôle déploie un équilibreur de charge avancé capable de gérer des VIPs routés avec FRR (en utilisant BGP) et de répartir le trafic avec HAproxy.
Imaginons que vous hébergez un service web qui est accessible via une ou plusieurs adresses IP virtuelles (VIPs). Vous souhaitez que ce VIP soit routé dans votre infrastructure grâce au protocole BGP.
Ce rôle fera ce qui suit :
- Si des voisins BGP sont fournis dans la configuration, il déploiera FRR et s'associera à vos voisins BGP. Si les VIPs sont créés sur le nœud, ils seront routés dans votre infrastructure.
- Déploiera HAproxy pour équilibrer la charge et surveiller votre service.
- Si les VIPs sont fournis dans la configuration, ils seront créés si un nombre minimum de backends est jugé sain pour un service donné, et donc routés dans BGP si FRR est déployé.
- Ils seront supprimés si aucun backend n'est trouvé sain pour un service donné, donc non routés dans BGP si FRR est déployé.
- Si
strict_vips
est défini sur true dans la configuration d'un LB, tous les services utilisant ce VIP doivent être sains, sinon le VIP ne sera pas créé. La valeur par défaut estfalse
.
Ainsi, si vous hébergez plusieurs équilibreurs de charge, votre trafic web sera :
- routé grâce à BGP si FRR est déployé
- équilibré et à haute disponibilité au niveau des VIPs grâce à BGP si FRR est déployé
- équilibré entre des backends sains grâce à HAproxy
Exigences
Pour le moment, nous testons ce module sur CentOS 9 Stream.
Installation
ansible-galaxy install emilienm.routed_lb
ansible-galaxy collection install ansible.posix ansible.utils
Variables du rôle
Seule la variable configs
doit être définie, sous forme de dictionnaire :
configs:
lb1:
haproxy_stats: true # activer les statistiques HAproxy à l'URL http://lb-ip:8404/stats
bgp_asn: <ASN BGP>
bgp_neighbors: # optionnel, si non défini, FRR ne sera pas déployé
- ip: <IP d'un routeur BGP>
password: <mot de passe BGP>
strict_vips: true
services:
- name: <Nom du service (ex : api)>
vips:
- <VIPs utilisés pour atteindre ce service en frontal>
min_backends: <Nombre minimum de backends sains pour que les VIPs soient créés pour ce service>
healthcheck: <Commande de backend HAproxy>
balance: <Algorithme d'équilibrage>
frontend_port: <Port frontal HAproxy pour le service>
haproxy_monitor_port: <Port de surveillance HAproxy pour le service>
backend_opts: <Options HAproxy pour chaque backend>
backend_port: <Port backend HAproxy>
backend_hosts:
- name: <nom d'hôte du backend>
ip: <IP du backend>
Consultez tests/vars.yml
pour un exemple complet.
Dépendances
ansible.posix
Exemple de Playbook
Créez un fichier nommé playbook.yml
:
---
- hosts: lb1
vars:
config: lb1
tasks:
- name: Inclure les variables pour les tests
ansible.builtin.include_vars: vars.yml
- name: Exécuter le rôle
include_role:
name: emilienm.routed_lb
Puis créez un fichier nommé inventory
pour l'inventaire Ansible :
all:
hosts:
lb1:
ansible_host: 192.168.10.2 # Adresse IP de votre équilibreur de charge
ansible_user: cloud-user
ansible_become: true
Ensuite, exécutez :
ansible-playbook playbook.yml -i inventory
Vos équilibreurs de charge devraient être opérationnels !
Licence
Apache-2.0
Ansible role to deploy a Load-Balancer capable of managing VIPs routed with BGP
ansible-galaxy install emilienm.routed_lb