Openstack Rocky でプライベートクラウドを構築する!(6)

前回に引き続き neutron のインストールと設定を行っていきます。

Contents

環境

ソフト

  • Ubuntu 18.04.1 Server 64bit
  • Openstack Rocky

ハード

※仮想マシンでもいけました。

  • CPUx2
  • MEM 8G
  • SSD 30G
  • NIC 2 枚

IP 構成

  • コントローラー ( vm-nfj-osctrln1 )
  • 公開用 ( 外部 ):10.1.55.11/16
  • 管理用 ( 内部 ):10.2.55.11/16
  • コンピュート ( vm-nfj-oscomp1 )
  • 公開用 ( 外部 ):10.1.55.21/16
  • 管理用 ( 内部 ):10.2.55.21/16

Neutron サービスのインストール

OpenStack Networking (neutron) サービスをコントローラーノードにインストールし API を利用可能にします。NEUTRON_DBPASS が neutron ユーザの DB パスワードです。

DB の作成

neutron データベースを作成
MariaDB [(none)]> CREATE DATABASE neutron;
Query OK, 1 row affected (0.02 sec)

アクセス権の設定

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'10.1.0.0/16' IDENTIFIED BY 'NEUTRON_DBPASS';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'10.2.0.0/16' IDENTIFIED BY 'NEUTRON_DBPASS';
Query OK, 0 rows affected (0.01 sec)

neutron ユーザの作成

管理者権限で CLI コマンドを実行するため admin 認証情報を読み込みます。openstack 上の neutron ユーザのパスワードとして NEUTRON_PASS を設定しています。

$ . admin-openrc 
$ openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 9a435f5a01e940fa9ec3ad5eb2a4a96e |
| name                | neutron                          |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

admin ロールに neutron ユーザを追加

$ openstack role add --project service --user neutron admin

neutron サービスエントリを作成します

$ openstack service create --name neutron --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | 6e1e492ab3744772af1f140ed111df0a |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

Networking サービス API エンドポイントを作成

public, internal, admin 用に作成します。

$ openstack endpoint create --region Tokyo network public http://vm-nfj-osctrln1:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 7b90a60a28c840769ee5042483c1c77c |
| interface    | public                           |
| region       | Tokyo                            |
| region_id    | Tokyo                            |
| service_id   | 6e1e492ab3744772af1f140ed111df0a |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://vm-nfj-osctrln1:9696      |
+--------------+----------------------------------+
$ openstack endpoint create --region Tokyo network internal http://vm-nfj-osctrln1:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 8e12195321d84d66ac7f3d344d9fce3c |
| interface    | internal                         |
| region       | Tokyo                            |
| region_id    | Tokyo                            |
| service_id   | 6e1e492ab3744772af1f140ed111df0a |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://vm-nfj-osctrln1:9696      |
+--------------+----------------------------------+
$ openstack endpoint create --region Tokyo network admin http://vm-nfj-osctrln1:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | f41366452c1042cea754bdebc707f172 |
| interface    | admin                            |
| region       | Tokyo                            |
| region_id    | Tokyo                            |
| service_id   | 6e1e492ab3744772af1f140ed111df0a |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://vm-nfj-osctrln1:9696      |
+--------------+----------------------------------+

ネットワーク設定

利用シーンを想定してオプション1またはオプション2を選択して設定します。
オプション1:インスタンスはプロバイダネットワークへの接続のみ可能とする。セルフサービスネットワーク、ルーター、フローティングIPはなく、管理者のみがプロバイダネットワークを管理できる。
オプション2:インスタンスをセルフサービスネットワークに接続可能とする。L3 サービスによりオプション1を補強し、利用者がプロバイダーネットワークとセルフサービスネットワークを管理できる。

オプション1の場合:プロバイダネットワーク:コンポーネントのインストール

$ sudo apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

オプション2の場合:セルフサービスネットワーク:コンポーネントのインストール

neutron-l3-agent パッケージもインストールします。

$ sudo apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent

/etc/neutron/neutron.conf の設定

[database] セクション

オプション1、オプション2共通です。データベースへの接続設定をします。NEUTRON_DBPASSがDBのパスワードです。10.2.2.90 は galera cluster (mysql) DB サーバーの IP アドレスです。

[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@10.2.2.90/neutron
[DEFAULT] セクション

ml2 ( Modular Layer 2 ) プラグインのみを有効として他のプラグインは無効とします。RabbitMQ への接続情報を追加します。91b1z0Bm5/ は openstack ユーザのパスワードです。(が、これが後で問題となった。パスワード文字列に / は入れないほうがよい)認証は Keystone を利用し、nova への通知設定も追加します。

オプション1の場合:
service_plugins には何も指定しません。

[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:91b1z0Bm5/@vm-nfj-osctrln1
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

オプション2の場合:
service_plugins に router を指定し、allow_overlapping_ips に true をセット指定する点がオプション1と異なります。

[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:91b1z0Bm5/@vm-nfj-osctrln1
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[keystone_authtoken] セクション

NEUTRON_PASS は openstack 上の neutron ユーザのパスワードです。オプション1、オプション2共通です。

[keystone_authtoken]
www_authenticate_uri = http://vm-nfj-osctrln1:5000
auth_url = http://vm-nfj-osctrln1:5000
memcached_servers = vm-nfj-osctrln1:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[nova] セクション

NOVA_PASS は openstack 上の nova ユーザのパスワードです。オプション1、オプション2共通です。

[nova]
auth_url = http://vm-nfj-osctrln1:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = Tokyo
project_name = service
username = nova
password = NOVA_PASS

Modular Layer 2 (ML2) プラグインの設定

/etc/neutron/plugins/ml2/ml2_conf.ini を編集します。

[ml2] セクション

オプション1の場合、type_drivers には flat と vlan を設定、オプション2の場合は vxlan も追加します。後から変更すると DB 側の整合性が失われることがあるそうなので注意。mechanism_drivers はオプション2の場合 l2population も追加します。

オプション1の場合:

[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security

オプション2の場合:

[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat] セクション

provider を指定します。オプション1、オプション2共通です。

[ml2_type_flat]
flat_networks = provider
[securitygroup] セクション

enable_ipset に true をセットします。オプション1、オプション2共通です。

[securitygroup]
enable_ipset = true

Linux ブリッジエージェントの設定

/etc/neutron/plugins/ml2/linuxbridge_agent.ini を編集します。

[linux_bridge] セクション

インターフェース名を指定します。オプション1、オプション2共通です。

[linux_bridge]
physical_interface_mappings = provider:ens160
[vxlan] セクション

enable_vxlan に false をセットします。オプション1では enable_vxlan は false を指定します。オプション2では、true を指定の上、local_ip と l2_population の設定を追加します。

オプション1の場合:

[vxlan]
enable_vxlan = false

オプション2の場合:
local_ip には管理側の IP を指定します。

[vxlan]
enable_vxlan = true
local_ip = 10.2.55.11
l2_population = true
[securitygroup] セクション
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

sysctl の設定確認

net.bridge.bridge-nf-call-ip6table とnet.bridge.bridge-nf-call-iptables が 1 になっている必要がありますので確認します。Ubuntu 18.04.1 Server ではデフォルトで有効になっていました。

$ sudo sysctl -a | grep net.bridge.bridge-nf-call-ip
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens160.stable_secret"
sysctl: reading key "net.ipv6.conf.ens192.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

L3 エージェントの設定

オプション1では設定しません。オプション2の場合のみ、/etc/neutron/l3_agent.ini の[DEFAULT] セクションに設定を行います。

[DEFAULT]
interface_driver = linuxbridge

DHCP エージェントの設定

/etc/neutron/dhcp_agent.ini を設定します。オプション1、オプション2共通です。

[DEFAULT] セクション
  1 [DEFAULT]
  2 interface_driver = linuxbridge
  3 dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
  4 enable_isolated_metadata = true

メタデータエージェントの設定

/etc/neutron/metadata_agent.ini を編集します。

[DEFAULT] セクション

METADATA_SECRET はメタデータプロキシのパスワードです。

[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET

コンピュートサービスからネットワークサービスを利用するための設定

/etc/nova/nova.conf を編集します。

[neutron] セクション
[neutron]
#
# Configuration options for neutron (network connectivity as a service).

url = http://vm-nfj-osctrln1:9696
auth_url = http://vm-nfj-osctrln1:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = Tokyo
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

インストール完了後の処理

neutron データベースの同期

ずらずらと出力されます。

$ sudo su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
  Running upgrade for neutron ...
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> kilo
INFO  [alembic.runtime.migration] Running upgrade kilo -> 354db87e3225
INFO  [alembic.runtime.migration] Running upgrade 354db87e3225 -> 599c6a226151
~(略)~
  OK

Nova API サービスの再起動

オプション1、オプション2ともに共通です。
$ sudo service nova-api restart

Networking サービスの再起動

オプション2の場合はneutron-l3-agent サービスも再起動します。

オプション1の場合:

$ sudo service neutron-server restart
$ sudo service neutron-linuxbridge-agent restart
$ sudo service neutron-dhcp-agent restart
$ sudo service neutron-metadata-agent restart

オプション2の場合:

$ sudo service neutron-server restart
$ sudo service neutron-linuxbridge-agent restart
$ sudo service neutron-dhcp-agent restart
$ sudo service neutron-metadata-agent restart
$ sudo service neutron-l3-agent restart

次回は Horizon

スポンサーリンク