Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@jundo414

Mirantis OpenStack 9.0 (Mitakaベース) で LBaaS(V2) を使用する

概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?