概要
Mirantis OpenStack 9.0(以下、MOS9.0) 上で、LBaaS(V2) 機能が使用できるようにしていきたいと思います。
セットアップ手順
Fuel LBaaS Plugin の準備
MOS9.0 に対応した LBaaS Plugin のインストールパッケージを準備します。
こちらから作成済みのものをダウンロードするか、
以下の手順に従ってソースコードから作成してください。
パッケージ作成
はじめに、パッケージのビルドに必要なパッケージをインストールします。
fuel-plugin-builder パッケージは、Fuel Plugin のビルドに使用されます。
$ sudo apt-get update
$ sudo apt-get install createrepo rpm dpkg-dev
$ sudo apt-get install git
$ sudo easy_install pip
$ sudo pip install fuel-plugin-builder
作業用PC(今回は Ubuntu を使用)に接続し、GitHub から 9.0
ブランチのクローンを取得します。
$ cd
$ git clone https://github.com/openstack/fuel-plugin-neutron-lbaas
Cloning into 'fuel-plugin-neutron-lbaas'...
remote: Counting objects: 94, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 94 (delta 2), reused 0 (delta 0), pack-reused 78
Unpacking objects: 100% (94/94), done.
Checking connectivity... done.
・ビルドを実施します。
$ cd
$ fpb --build ./fuel-plugin-neutron-lbaas/
Plugin is built
rpm ファイルが作成されたことを確認します。
$ ls -al ./fuel-plugin-neutron-lbaas/*.rpm
-rw-rw-r-- 1 ubuntu ubuntu 17086 Aug 23 05:08 ./fuel-plugin-neutron-lbaas/lbaas-1.0-1.0.3-1.noarch.rpm
Fuel LBaaS Plugin のインストール
作成した rpm ファイルを Fuel Master へ配置した後、以下のコマンドを実行して、インストールします。
# fuel plugins --install lbaas-1.0-1.0.3-1.noarch.rpm
Loaded plugins: fastestmirror, priorities
Examining lbaas-1.0-1.0.3-1.noarch.rpm: lbaas-1.0-1.0.3-1.noarch
Marking lbaas-1.0-1.0.3-1.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package lbaas-1.0.noarch 0:1.0.3-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================================================================
Package Arch Version Repository Size
=================================================================================================================================================
Installing:
lbaas-1.0 noarch 1.0.3-1 /lbaas-1.0-1.0.3-1.noarch 25 k
Transaction Summary
=================================================================================================================================================
Install 1 Package
Total size: 25 k
Installed size: 25 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lbaas-1.0-1.0.3-1.noarch 1/1
Verifying : lbaas-1.0-1.0.3-1.noarch 1/1
Installed:
lbaas-1.0.noarch 0:1.0.3-1
Complete!
Plugin lbaas-1.0-1.0.3-1.noarch.rpm was successfully installed.
Fuel LBaaS Plugin がインストールされたことを確認します。
正常にインストールが完了している場合、Fuel プラグイン一覧に表示されます。
# fuel plugins
id | name | version | package_version | releases
---+-------+---------+-----------------+--------------------
1 | lbaas | 1.0.3 | 3.0.0 | ubuntu (mitaka-9.0)
Fuel コンソールの [PLUGINS] タブを開き、以下の通り表示されてれば問題ありません。
※ MOS バージョンに対応していない等で利用できない場合は、感嘆符(!)が表示されます。
正常にインストールされている場合、
Environment 画面の [Settings]-[Other] に "LBaaS plugin for Neutron" が表示されているので、
チェックを入れてからデプロイを開始します。
LBaaS 設定
設定確認
neutron.conf に LBaaS 関連のプラグインが設定されていることが確認できます。
# grep "lbaas" /etc/neutron/neutron.conf
service_plugins =neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin,neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
neutron のサービスプロバイダとして、LOADBALANCERV2
が表示されます。
# neutron service-provider-list
+----------------+---------+---------+
| service_type | name | default |
+----------------+---------+---------+
| LOADBALANCERV2 | haproxy | True |
+----------------+---------+---------+
動作確認
LBaaS V2
ロードバランサの設定
Load Balancer の作成を行っていきます。
ここでは、private-subnet
からアクセスを受け付ける想定で作成しています。
# neutron lbaas-loadbalancer-create --name lb-test private_network_subnet
作成したロードバランサが以下の状態となることを確認します。
- operating_status: "ONLINE" となっていること
- provisioning_status: "ACTIVE" となっていること
- vip_address: 指定したサブネットの IP が割り当てられていること
# neutron lbaas-loadbalancer-show lb-test
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| admin_state_up | True |
| description | |
| id | 2e9bdc22-a12b-400c-b9c2-7d11aca04ba8 |
| listeners | |
| name | lb-test |
| operating_status | ONLINE |
| pools | |
| provider | haproxy |
| provisioning_status | ACTIVE |
| tenant_id | 8933cf2d02004242bebeefa933146b70 |
| vip_address | 10.16.0.3 |
| vip_port_id | f9f98325-6a11-4414-ba23-99ee65c2745f |
| vip_subnet_id | 6c022960-6447-49be-8be3-3029e3ce2634 |
+---------------------+--------------------------------------+
セキュリティグループの設定
作成したロードバランサのネットワークポートに設定するセキュリティグループの作成を行います。
まず、セキュリティグループを作成し、以下の通りルールを追加します。
DIRECTION | PROTOCOL | PORT RANGE MIN | PORT RANGE MAX | REMOTE IP PREFIX |
---|---|---|---|---|
受信 | tcp | 80 | 80 | 0.0.0.0/0 |
受信 | tcp | 443 | 443 | 0.0.0.0/0 |
受信 | icmp | - | - | - |
# neutron security-group-create sg-lb-test
# neutron security-group-rule-create \
--direction ingress \
--protocol tcp \
--port-range-min 80 \
--port-range-max 80 \
--remote-ip-prefix 0.0.0.0/0 \
sg-lb-test
# neutron security-group-rule-create \
--direction ingress \
--protocol tcp \
--port-range-min 443 \
--port-range-max 443 \
--remote-ip-prefix 0.0.0.0/0 \
sg-lb-test
# neutron security-group-rule-create \
--direction ingress \
--protocol icmp \
sg-lb-test
作成したセキュリティグループを確認します。
# neutron security-group-list --name sg-lb-test
+--------------------------------------+------------+-----------------------------------------------------+
| id | name | security_group_rules |
+--------------------------------------+------------+-----------------------------------------------------+
| 75f25159-8239-44dc-b60b-d0a00973fb2e | sg-lb-test | egress, IPv4 |
| | | egress, IPv6 |
| | | ingress, IPv4, 443/tcp, remote_ip_prefix: 0.0.0.0/0 |
| | | ingress, IPv4, 80/tcp, remote_ip_prefix: 0.0.0.0/0 |
| | | ingress, IPv4, icmp |
+--------------------------------------+------------+-----------------------------------------------------+
作成したセキュリティグループをロードバランサのネットワークポートに関連付けします。
※ 引数で指定するネットワークポートが知りたい場合は、
"lbaas-loadbalancer-show" コマンドを実行し、"vip_port_id" の値をご参照ください。
# neutron port-update --security-group sg-lb-test f9f98325-6a11-4414-ba23-99ee65c2745f
Updated port: f9f98325-6a11-4414-ba23-99ee65c2745f
"security_groups" 項目にセキュリティグループ ID が設定されていることを確認します。
# neutron port-show f9f98325-6a11-4414-ba23-99ee65c2745f -F name -F security_groups
+-----------------+---------------------------------------------------+
| Field | Value |
+-----------------+---------------------------------------------------+
| name | loadbalancer-2e9bdc22-a12b-400c-b9c2-7d11aca04ba8 |
| security_groups | 75f25159-8239-44dc-b60b-d0a00973fb2e |
+-----------------+---------------------------------------------------+
ロードバランサまでの疎通確認
このロードバランサの設定が完了したら、次のステップへ行く前にロードバランサまでの疎通を ping コマンドで確認しておきます。
$ ping -c 3 192.168.1.22
Listener の設定
Load Balancer が ONLINE の状態で、HTTP Listener と HTTPS Listener をそれぞれ作成します。
# neutron lbaas-listener-create \
--name listener-test-http \
--loadbalancer lb-test \
--protocol HTTP \
--protocol-port 80
# neutron lbaas-listener-create \
--name listener-test-https \
--loadbalancer lb-test \
--protocol HTTPS \
--protocol-port 443
# neutron lbaas-listener-list
+--------------------------------------+-----------------+---------------------+----------+---------------+----------------+
| id | default_pool_id | name | protocol | protocol_port | admin_state_up |
+--------------------------------------+-----------------+---------------------+----------+---------------+----------------+
| bc3f818e-285b-4f22-99de-528c34638011 | | listener-test-http | HTTP | 80 | True |
| df8692f8-a3d8-4e50-bada-df0fab37f348 | | listener-test-https | HTTPS | 443 | True |
+--------------------------------------+-----------------+---------------------+----------+---------------+----------------+
Pool の設定
続けて HTTP と HTTPS の Pool をそれぞれ作成します。
今回、ロードバランシングのアルゴリズムは、HTTP は "ROUND_ROBIN"、HTTPS は "LEAST_CONNECTIONS" としています。
# neutron lbaas-pool-create \
--name pool-test-http \
--lb-algorithm ROUND_ROBIN \
--listener listener-test-http \
--protocol HTTP
# neutron lbaas-pool-create \
--name pool-test-https \
--lb-algorithm LEAST_CONNECTIONS \
--listener listener-test-https \
--protocol HTTPS
# neutron lbaas-pool-list
+--------------------------------------+-----------------+----------+----------------+
| id | name | protocol | admin_state_up |
+--------------------------------------+-----------------+----------+----------------+
| 45207ead-24b2-4802-a873-6351603f7945 | pool-test-https | HTTPS | True |
| c13a05b7-ca6d-4b1f-a008-0936d3d086f6 | pool-test-http | HTTP | True |
+--------------------------------------+-----------------+----------+----------------+
Member の設定
HTTP のプールメンバを作成し、HTTP のプール(pool-test-http)と関連付けます。
# neutron lbaas-member-create \
--subnet private_network_subnet \
--address 10.16.0.8 \
--protocol-port 80 \
pool-test-http
# neutron lbaas-member-create \
--subnet private_network_subnet \
--address 10.16.0.9 \
--protocol-port 80 \
pool-test-http
# neutron lbaas-member-list pool-test-http
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
| id | name | address | protocol_port | weight | subnet_id | admin_state_up |
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
| 94eaaa07-d9de-4c76-8a12-458f678ba016 | | 10.16.0.8 | 80 | 1 | 6c022960-6447-49be-8be3-3029e3ce2634 | True |
| 9433d8b7-d341-4a4e-86df-3d642586960b | | 10.16.0.9 | 80 | 1 | 6c022960-6447-49be-8be3-3029e3ce2634 | True |
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
HTTPS のプールメンバも同様に、作成した後、HTTPS のプール(pool-test-https)と関連付けます。
# neutron lbaas-member-create \
--subnet private_network_subnet \
--address 10.16.0.8 \
--protocol-port 443 \
pool-test-https
# neutron lbaas-member-create \
--subnet private_network_subnet \
--address 10.16.0.9 \
--protocol-port 443 \
pool-test-https
# neutron lbaas-member-list pool-test-https
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
| id | name | address | protocol_port | weight | subnet_id | admin_state_up |
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
| 9f558822-ad80-4a62-bb53-2d93ffa2afcf | | 10.16.0.8 | 443 | 1 | 6c022960-6447-49be-8be3-3029e3ce2634 | True |
| a5431ccb-a0e6-4d2f-a950-ddc520b41071 | | 10.16.0.9 | 443 | 1 | 6c022960-6447-49be-8be3-3029e3ce2634 | True |
+--------------------------------------+------+-----------+---------------+--------+--------------------------------------+----------------+
Health Monitor 設定
接続できない Member をプールから除外するように、Health Monitor を設定します。
ヘルスチェックの値は、アプリケーションの特性やサービスレベルに合わせて、任意の値に変更してください。
# neutron lbaas-healthmonitor-create \
--delay 5 \
--max-retries 2 \
--timeout 10 \
--type HTTP \
--pool pool-test-http
# neutron lbaas-healthmonitor-create \
--delay 5 \
--max-retries 2 \
--timeout 10 \
--type HTTPS \
--pool pool-test-https
# neutron lbaas-healthmonitor-list
+--------------------------------------+------+-------+----------------+
| id | name | type | admin_state_up |
+--------------------------------------+------+-------+----------------+
| dfd8c872-c5fd-49f1-9c1e-01eb4c1195ed | | HTTP | True |
| e0dde485-0495-4447-afa4-6d20a24bdcd9 | | HTTPS | True |
+--------------------------------------+------+-------+----------------+
Floating IP の割り当て
ロードバランサが、パブリックまたはプロバイダーネットワークにデプロイされている場合、外部からロードバランサの VIP にアクセスすることができます。
しかし、プライベートネットワークや隔離されたネットワークにデプロイされている場合は、そのままでは、ロードバランサにアクセスすることができません。
その場合、"neutron floatingip-associate" コマンドを使用して Floating IP をロードバランサに割り当てることで、
外部からロードバランサの VIP へアクセスできるようにすることができます。
### neutron floatingip-associate <割り当てる Floating IP の ID> <ロードバランサのポート ID>
# neutron floatingip-associate 357d04e6-e658-4969-9f53-3966fb36d858 f9f98325-6a11-4414-ba23-99ee65c2745f
Associated floating IP 357d04e6-e658-4969-9f53-3966fb36d858
ロードバランサの統計情報の取得
LBaaS v2 agent は、以下の4つの項目について、それぞれのロードバランサから6秒ごとに統計情報を収集します。
- active_connections
- bytes_in
- bytes_out
- total_connections
"lbaas-loadbalancer-stats" コマンドを使用することで、それらの値を確認することができます。
# neutron lbaas-loadbalancer-stats lb-test
+--------------------+-------+
| Field | Value |
+--------------------+-------+
| active_connections | 0 |
| bytes_in | 234 |
| bytes_out | 35292 |
| total_connections | 3 |
+--------------------+-------+
"active_connections" のカウント値は、データ取得時点で、アクティブとなっている総コネクション数で、
他の3つの項目については、ロードバランサが起動してからの累積値を表示しています。
備考
UI の設定方法については、確認でき次第追記していきます。
2016/08/29
公式の GitHubにて、MOS9.0対応がされたようなので、URL を変更しました。
Horizon のメニューについては、変わらず表示されていませんでした。
参考 URL
[GitHub] fuel-plugin-neutron-lbaas
- https://github.com/openstack/fuel-plugin-neutron-lbaas
[GitHub] fuel-plugin-neutron-lbaas (Qiitaブログ用)
- https://github.com/falcon39/fuel-plugins/tree/master/fuel-plugin-neutron-lbaas
[公式マニュアル]ロードバランサas a Service (LBaaS)
- http://docs.openstack.org/mitaka/ja/networking-guide/adv-config-lbaas.html