emilienm.routed_lb

ansible-role-routed-lb

ansible-lint

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 est false.

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

À propos du projet

Ansible role to deploy a Load-Balancer capable of managing VIPs routed with BGP

Installer
ansible-galaxy install emilienm.routed_lb
Licence
Unknown
Téléchargements
553
Propriétaire
Software Engineer working on @kubernetes and @openstack at Red Hat.