emilienm.routed_lb

ansible-role-routed-lb

ansible-lint

これは、FRR(BGPを使用)でルーティングされたVIPを管理できる高度なロードバランサーをデプロイします。また、HAproxyを使用してトラフィックをロードバランシングします。

仮に、ウェブサービスをホスティングしているとしましょう。そのサービスは、1つまたは複数の仮想IP(VIP)で公開されています(必ずしも必要ではありません)。BGPプロトコルを使ってこのVIPをインフラ内でルーティングしたいと考えています。

この役割は以下のことを行います:

  • 設定にBGPネイバーが提供されている場合、FRRをデプロイし、BGPネイバーとピア接続します。ノード上にVIPが作成されている場合、それらはインフラ内でルーティングされます。
  • HAproxyをデプロイし、サービスのロードバランシングと監視を行います。
  • 設定にVIPが提供されている場合、バックエンドが特定のサービスに対して健康である最低数が見つかった場合にのみVIPが作成され、FRRがデプロイされていればBGPでルーティングされます。
  • 特定のサービスに対して健康なバックエンドが見つからなかった場合、VIPは削除され、FRRがデプロイされている場合はBGPでルーティングされません。
  • LB設定で strict_vips が true に設定されている場合、そのVIPを使用するすべてのサービスは健康でなければならず、さもなくばVIPは作成されません。デフォルトは false です。

したがって、複数のロードバランサーをホスティングしている場合、ウェブトラフィックは次のようになります:

  • FRRがデプロイされている場合、BGPによってルーティングされます。
  • FRRがデプロイされている場合、BGPを通じてVIPレベルでロードバランシングと高可用性が提供されます。
  • HAproxyを使用して健康なバックエンド間でロードバランシングされます。

要件

現在、このモジュールはCentOS 9 Streamでテストされています。

インストール

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

役割の変数

configsは辞書としてのみ設定する必要があります:

configs:
  lb1:
    haproxy_stats: true # URL http://lb-ip:8404/stats でHAproxy statsを有効にする
    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

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.