9.4. アクセス制御リストを使用したロードバランサーの作成

アクセス制御リスト (ACL) を作成し、リスナーへの受信トラフィックを、許可されたソース IP アドレスのセットに制限することができます。それ意外の受信トラフィックは、すべて拒否されます。バックエンドメンバーを利用できる状態に保つためのヘルスモニターも作成するのがベストプラクティスです。

前提条件

  • TCP ポート 80 でカスタムアプリケーションが設定されたバックエンドサーバーが含まれるプライベートサブネット
  • バックエンドサーバーは、URL パス / でヘルスチェックを使用して設定されます。
  • インターネットから到達できる共有外部 (パブリック) サブネット。

手順

  1. Source コマンドで認証情報ファイルを読み込みます。

    $ source ~/overcloudrc

  2. パブリックサブネット (public_subnet) にロードバランサー (lb1) を作成します。

    注記

    丸かっこ内の値は、この手順のコマンド例で使用されるサンプルの値です。これらのサンプル値を、実際のサイトに適した値に置き換えてください。

    $ openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet

  3. ロードバランサーの状態を確認します。

    $ openstack loadbalancer show lb1

  4. 次の手順に進む前に、provisioning_statusACTIVE であることを確認してください。
  5. 許可される CIDR (192.0.2.0/24 および 198.51.100.0/24) でリスナー (listener1) を作成します。

    $ openstack loadbalancer listener create --name listener1 --protocol TCP --protocol-port 80 --allowed-cidr 192.0.2.0/24 --allowed-cidr 198.51.100.0/24 lb1

  6. リスナーのデフォルトプール (pool1) を作成します。

    $ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol TCP

  7. バックエンドサーバーに接続するプールにヘルスモニターを作成し、パス (/) をテストします。

    $ openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1

  8. プライベートサブネット (private_subnet) のロードバランサーメンバー (192.0.2.10 および 192.0.2.11) をデフォルトのプールに追加します。

    $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1
    
    $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1

検証

  1. リスナー (listener1) の設定を表示して確認します。

    $ openstack loadbalancer listener show listener1

    出力例

    +-----------------------------+--------------------------------------+
    | Field                       | Value                                |
    +-----------------------------+--------------------------------------+
    | admin_state_up              | True                                 |
    | connection_limit            | -1                                   |
    | created_at                  | 2022-01-15T11:11:09                  |
    | default_pool_id             | None                                 |
    | default_tls_container_ref   | None                                 |
    | description                 |                                      |
    | id                          | d26ba156-03c3-4051-86e8-f8997a202d8e |
    | insert_headers              | None                                 |
    | l7policies                  |                                      |
    | loadbalancers               | 2281487a-54b9-4c2a-8d95-37262ec679d6 |
    | name                        | listener1                            |
    | operating_status            | ONLINE                               |
    | project_id                  | 308ca9f600064f2a8b3be2d57227ef8f     |
    | protocol                    | TCP                                  |
    | protocol_port               | 80                                   |
    | provisioning_status         | ACTIVE                               |
    | sni_container_refs          | []                                   |
    | timeout_client_data         | 50000                                |
    | timeout_member_connect      | 5000                                 |
    | timeout_member_data         | 50000                                |
    | timeout_tcp_inspect         | 0                                    |
    | updated_at                  | 2022-01-15T11:12:42                  |
    | client_ca_tls_container_ref | None                                 |
    | client_authentication       | NONE                                 |
    | client_crl_container_ref    | None                                 |
    | allowed_cidrs               | 192.0.2.0/24                         |
    |                             | 198.51.100.0/24                      |
    +-----------------------------+--------------------------------------+

    この例では、パラメーター allowed_cidrs は、192.0.2.0/24 および 198.51.100.0/24 からのトラフィックだけを許可するように設定します。

  2. ロードバランサーが保護されていることを確認するには、allowed_cidrs の一覧に記載されていない CIDR のクライアントからリスナーへの要求を確認します。要求は成功しないはずです。

    出力例

    curl: (7) Failed to connect to 203.0.113.226 port 80: Connection timed out
    curl: (7) Failed to connect to 203.0.113.226 port 80: Connection timed out
    curl: (7) Failed to connect to 203.0.113.226 port 80: Connection timed out
    curl: (7) Failed to connect to 203.0.113.226 port 80: Connection timed out

関連情報