LoginSignup
4
2

More than 5 years have passed since last update.

Neutron LBaaS で https な Web サーバの負荷分散を行う際の留意事項

Last updated at Posted at 2017-03-01

イントロ

OpenStackのエコシステムの中でネットワークを担当する Neutron には、L2やL3の基本機能以外にも、FWaaS、VPNaaS、LBaaS 等、さまざまな拡張があることはもう周知のことかと思います。

LBaaS を使ってWebサーバの負荷分散を行いたいと思った場合、https なサービスをどう扱ってやればよいのか、少し留意事項があるので紹介したいと思います。

Neutron LBaaS v2 のわかりにくいところ

Neutron LBaaS v2 では、https 用のリスナ(listener)を作成することになります。
コマンドとしては、neutron lbaas-listener-create に適切なオプションで所望のパラメータを指定します。このマニュアルは以下にあるのですが...

ここで出てくる、--protocol として指定できる TCP, HTTP, HTTPS, TERMINATRED_HTTPS の4つがそれぞれ何を意味しているのかわかりにくい…というのが今日の本題です。

以下、前提として、バランサの実体としては Neutron LBaaS 標準の HAProxy を使うことを想定します。また、以下の記述は Octavia driver を使うかどうかには依存しないはずですが、私は Mitaka + Octavia 環境で確認を行っています。

TCPはどういう場合に指定するべきなのか?

haproxy の haproxy.cfg の listen セクションで tcp と指定したことになります。
したがって、L7ではなくL4レベルのバランシングを指定したことになります。
http/https 以外のプロトコルのバランシングを行う場合にはこれを使います。

HTTP

これは文字通りです。
haproxy の haproxy.cfg の listen セクションで http と指定したことになります。

HTTPS と TERMINATED_HTTPSの違い

これが一番わかりにくいはまりどころだと思います。

まず、HAProxy の上流のマニュアルを眺めてみてください。

大きく4つのやりかたがあることがわかります。

HTTPS とは

--protocol に HTTPS と指定した listener を作成した場合、HAProxy で言うところの "SSL/TLS passthrough" を使うことになります。

具体的には、HAProxyは単純に tcp 443 (通常の場合。port は変更することも可能)待ちうけてTCPを終端します。この後、TLSやSSLの処理はいっさい行わず、そのまま backend server群にTCPでコネクションをはり、トラフィックをそのまま流します。

言い換えれば、この場合はバランサ(実体は通常 HAproxy)は、トラフィックの中身に関知しないということです。さらに言えば、アクセス元の client のIPを拡張ヘッダ(X-Forwarded-For:)で backend に通知するというようなこともできません。

TERMINATED_HTTPS とは

一方、TERMINATED_HTTPS と指定した場合は、HAProxy で言うところの "SSL/TLS offloading" を指定したことになります。

この場合、HAProxy が TLS/SSL レベルで終端処理を行います。
また、HAProxy 用語で言うところの backend へは、暗号化なしの HTTP でトラフィックを転送します。
このように、暗号処理をWeb サーバからロードバランサに移転しているため、"offloading" と呼ばれています。

なお、重要なポイントとして、この場合は HAProxy にサーバ証明書と private key を配置する必要があるわけですが、OpenStack Neutron LBaaS v2の枠組みでは、Barbican というコンポーネントに証明書と private key の集中管理をまかせることになります。Neutron LBaaS は、Babican から必要な証明書と private key を入手します。この際、private key は passphrase なしで運用する必要があるというのも重要な留意事項かと思います。

まとめ

  • Neutron LBaaS v2 で https をバランシングしたい場合、--protocol オプションに HTTPS か TERMINATED_HTTPS のいずれかを指定できます。
  • passthrough (HAProxyは中身に関知しない)を使いたい場合は HTTPS を指定してください。
  • offload を使いたい場合は、TERMINATED_HTTPSを指定してください。
    • TERMINATED_HTTPSを使用する場合、証明書/private key を Barbican に管理させる必要があります。
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2