emilienm.routed_lb
ansible-role-routed-lb
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 esfalso
.
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
Ansible role to deploy a Load-Balancer capable of managing VIPs routed with BGP
ansible-galaxy install emilienm.routed_lb