emilienm.routed_lb

ansible-role-routed-lb

ansible-lint

这个角色将部署一个先进的负载均衡器,能够管理通过 FRR(使用 BGP)路由的虚拟 IP(VIP),并通过 HAproxy 进行流量负载均衡。

假设你正在托管一个由一个或多个虚拟 IP(VIP)暴露的网络服务(注意:这并不是必需的)。 你希望通过 BGP 协议在你的基础设施中路由这个 VIP。

这个角色将执行以下操作:

  • 如果配置中提供了 BGP 邻居,将部署 FRR 并与 BGP 邻居对等。如果节点上创建了 VIP,它们将在基础设施中被路由。
  • 部署 HAproxy 来负载均衡和监控你的服务。
  • 如果配置中提供了 VIP,当发现某个服务的健康后端数量达到最小要求时,它们将被创建,因此在部署了 FRR 的情况下被 BGP 路由。
  • 如果未发现某个服务的健康后端,VIP 将被移除,因此在部署了 FRR 的情况下不被 BGP 路由。
  • 如果在负载均衡器配置中设置 strict_vips 为 true,则使用该 VIP 的所有服务必须是健康的,否则 VIP 不会被创建。默认值为 false

因此,如果你托管多个负载均衡器,你的网页流量将会:

  • 通过 BGP 路由(如果 FRR 被部署)
  • 在 VIP 级别上进行负载均衡和高可用性(如果 FRR 被部署)
  • 在健康的后端之间进行负载均衡(通过 HAproxy)

需求

目前,我们在 CentOS 9 Stream 上测试这个模块。

安装

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

角色变量

只需要设置 configs,格式为字典:

configs:
  lb1:
    haproxy_stats: true # 在 http://lb-ip:8404/stats 上启用 HAproxy 统计信息
    bgp_asn: <BGP ASN>
    bgp_neighbors: # 可选,不设置时不部署 FRR
      - ip: <BGP 路由器的 IP>
        password: <BGP 密码>
    strict_vips: true
    services:
      - name: <服务名称(例如 api)>
        vips:
          - <用于访问该服务的 VIP>
        min_backends: <为该服务创建 VIP 所需的健康后端的最小数量>
        healthcheck: <HAproxy 后端命令>
        balance: <LB 算法>
        frontend_port: <服务的 HAproxy 前端端口>
        haproxy_monitor_port: <服务的 HAproxy 监控端口>
        backend_opts: <每个后端的 HAproxy 选项>
        backend_port: <HAproxy 后端端口>
        backend_hosts:
          - name: <后端的主机名>
            ip: <后端的 IP>

请查看 tests/vars.yml 以获得完整示例。

依赖项

  • ansible.posix

示例剧本

创建一个名为 playbook.yml 的文件:

---
- hosts: lb1
  vars:
    config: lb1
  tasks:
    - name: 包含测试变量
      ansible.builtin.include_vars: vars.yml
    - name: 运行角色
      include_role:
        name: emilienm.routed_lb

然后为 Ansible 清单创建一个名为 inventory 的文件:

all:
  hosts:
    lb1:
      ansible_host: 192.168.10.2 # 负载均衡器的 IP 地址
      ansible_user: cloud-user
      ansible_become: true

接下来运行:

ansible-playbook playbook.yml -i inventory

你的负载均衡器应该能够正常运行!

许可证

Apache-2.0

关于项目

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

安装
ansible-galaxy install emilienm.routed_lb
许可证
Unknown
下载
553
拥有者
Software Engineer working on @kubernetes and @openstack at Red Hat.