15.13. 同じバックエンド上での HTTP および TLS 終端 HTTPS ロードバランサーの作成

以下の手順で、セキュアではないリスナーと TLS 終端 HTTPS リスナーを同じロードバランサー (同じ IP アドレス) 上に設定する方法を説明します。クライアントがセキュアなプロトコルまたはセキュアではない HTTP プロトコルで接続されているかどうかにかかわらず、まったく同じコンテンツで Web クライアントに応答する場合に、この構成を使用します。

前提条件

  • TCP ポート 80 でセキュアではない HTTP アプリケーションをホストするバックエンドサーバーが含まれるプライベートサブネット
  • インターネットからアクセス可能な共有外部 (パブリック) サブネット
  • TLS 公開鍵の暗号化が以下のように設定されている。

    • ロードバランサーの仮想 IP アドレス (例: www.example.com) に割り当てられた DNS 名用に、TLS 証明書、鍵、およびオプションの中間証明書チェーンが外部認証局 (CA) から取得される。
    • 証明書、鍵、および中間証明書チェーンが、現在のディレクトリー内の個別ファイルに保存される。
    • 鍵および証明書は PEM 形式でエンコードされる。
    • 鍵はパスフレーズで暗号化されない。
    • 中間証明書チェーンには PEM 形式でエンコードされた複数の証明書が含まれ、チェーンを形成する。
  • Key Manager サービス (barbican) を使用するように Load-balancing サービス (octavia) が設定されている。詳しい情報は、『 Manage Secrets with OpenStack Key Manager』 を参照してください。
  • セキュアではない HTTP リスナーが、HTTPS TLS 終端ロードバランサーと同じプールで設定されている。

手順

  1. 鍵 (server.key)、証明書 (server.crt)、および中間証明書チェーン (ca-chain.crt) を 1 つの PKCS12 ファイル (server.p12) に組み合わせます。

    注記

    丸かっこ内の値は例として示しています。これらの例を実際のサイトに適した値に置き換えてください。

    $ openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12
  2. Key Manager サービスを使用して、PKCS12 ファイルのシークレットリソース (tls_secret1) を作成します。

    $ openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"
  3. パブリックサブネット (public-subnet) にロードバランサー (lb1) を作成します。

    $ openstack loadbalancer create --name lb1 --vip-subnet-id public-subnet
  4. 次のステップに進むためには、作成したロードバランサー (lb1) がアクティブでオンライン状態でなければなりません。

    ロードバランサーの応答が ACTIVE および ONLINE のステータスになるまで、openstack loadbalancer show コマンドを実行します。(複数回このコマンドを実行しなければならない場合があります。)

    $ openstack loadbalancer show lb1
  5. TERMINATED_HTTPS リスナー (listener1) を作成し、リスナーのデフォルト TLS コンテナーとしてシークレットリソースを参照します。

    $ openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener1 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
  6. プール (pool1) を作成し、リスナーのデフォルトプールに設定します。

    $ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
  7. プライベートサブネット (private-subnet) 上のセキュアではない HTTP バックエンドサーバー (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
  8. セキュアではない HTTP リスナー (listener2) を作成し、そのデフォルトのプールをセキュアなリスナーと同じプールに設定します。

    $ openstack loadbalancer listener create --protocol-port 80 --protocol HTTP --name listener2 --default-pool pool1 lb1