emilienm.routed_lb

ansible-role-routed-lb

ansible-lint

Esto desplegará un Balanceador de Carga avanzado capaz de gestionar VIPs enrutados con FRR (usando BGP) y balancear la carga de tráfico con HAproxy.

Supongamos que estás alojando un servicio web que está expuesto por una o varias direcciones IP virtuales (VIPs), aunque no es obligatorio tener más de una. Quisieras que esta VIP esté enrutada en tu infraestructura gracias al protocolo BGP.

Este rol hará lo siguiente:

  • Si se proporcionan vecinos BGP en la configuración, desplegará FRR y se conectará con tus vecinos BGP. Si las VIPs se crean en el nodo, se enrutará en tu infraestructura.
  • Desplegará HAproxy para balancear y monitorear tu servicio.
  • Si las VIPs se proporcionan en la configuración, se crearán si se encuentra un número mínimo de servidores saludables para un servicio dado, y por lo tanto se enrutará en BGP si FRR está desplegado.
  • Se eliminarán si no se encuentra ningún servidor saludable para un servicio dado, por lo tanto, no se enrutará en BGP si FRR está desplegado.
  • Si strict_vips está configurado como verdadero en la configuración de LB, todos los servicios que usan esa VIP deben estar saludables, o la VIP no será creada. El valor predeterminado es falso.

Así que si estás alojando múltiples Balanceadores de Carga, tu tráfico web será:

  • enrutado gracias a BGP si FRR está desplegado.
  • balanceado y con alta disponibilidad a nivel de VIP gracias a BGP si FRR está desplegado.
  • balanceado entre servidores saludables gracias a HAproxy.

Requisitos

Por ahora, probamos este módulo en CentOS 9 Stream.

Instalación

ansible-galaxy install emilienm.routed_lb
ansible-galaxy collection install ansible.posix ansible.utils

Variables del Rol

Solo necesitas establecer configs, como un diccionario:

configs:
  lb1:
    haproxy_stats: true # habilitar estadísticas de HAproxy en la URL http://lb-ip:8404/stats
    bgp_asn: <ASN de BGP>
    bgp_neighbors: # opcional, si no se establece FRR no será desplegado
      - ip: <IP de un router BGP>
        password: <contraseña de BGP>
    strict_vips: true
    services:
      - name: <Nombre del servicio (por ejemplo, api)>
        vips:
          - <VIPs que se usan para acceder a ese servicio en el frontend>
        min_backends: <Cantidad mínima de servidores saludables para que las VIPs se creen para ese servicio>
        healthcheck: <Comando backend de HAproxy>
        balance: <Algoritmo de LB>
        frontend_port: <Puerto frontend de HAproxy para el servicio>
        haproxy_monitor_port: <Puerto de monitoreo de HAproxy para el servicio>
        backend_opts: <Opciones de HAproxy para cada backend>
        backend_port: <Puerto backend de HAproxy>
        backend_hosts:
          - name: <nombre del backend>
            ip: <IP del backend>

Consulta tests/vars.yml para un ejemplo completo.

Dependencias

  • ansible.posix

Ejemplo de Playbook

Crea un archivo llamado playbook.yml:

---
- hosts: lb1
  vars:
    config: lb1
  tasks:
    - name: Incluir variables para pruebas
      ansible.builtin.include_vars: vars.yml
    - name: Ejecutar el rol
      include_role:
        name: emilienm.routed_lb

Y luego crea un archivo llamado inventory para el inventario de Ansible:

all:
  hosts:
    lb1:
      ansible_host: 192.168.10.2 # Dirección IP de tu Balanceador de Carga
      ansible_user: cloud-user
      ansible_become: true

Luego ejecuta:

ansible-playbook playbook.yml -i inventory

¡Tus balanceadores de carga deberían estar funcionando!

Licencia

Apache-2.0

Acerca del proyecto

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

Instalar
ansible-galaxy install emilienm.routed_lb
Licencia
Unknown
Descargas
553
Propietario
Software Engineer working on @kubernetes and @openstack at Red Hat.