Neutronのインストール・設定(コントローラーノード)

データベースを作成

MariaDBにデータベースneutronを作成し、アクセス権を付与します。

controller# mysql
MariaDB [(none)]> CREATE DATABASE neutron;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'password';

MariaDB [(none)]> quit

データベースの確認

MariaDBにneutronユーザーでログインし、データベースの閲覧が可能か確認します。

controller# mysql -u neutron -p
Enter password: ←MariaDBのneutronパスワードpasswordを入力
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| neutron            |
+--------------------+

※ユーザーneutronでログイン可能でデータベースが閲覧可能なら問題ありません。

neutronユーザーとサービス、APIエンドポイントの作成

以下コマンドで認証情報を読み込んだあと、neutronサービスの作成とAPIエンドポイントを設定します。

環境変数ファイルの読み込み

controller# source admin-openrc

neutronユーザーの作成

controller# openstack user create --domain default --password-prompt neutron
User Password: password  #neutronユーザーのパスワードを設定(本書はpasswordを設定)
Repeat User Password: password
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | fdb0f541e28141719b6a43c8944bf1fb |
| name                | neutron                          |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

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

controller# openstack role add --project service --user neutron admin

neutronサービスの作成

controller# openstack service create --name neutron \
  --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | f71529314dab4a4d8eca427e701d209e |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

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

controller# openstack endpoint create --region RegionOne \
  network public http://controller:9696
controller# openstack endpoint create --region RegionOne \
  network internal http://controller:9696
controller# openstack endpoint create --region RegionOne \
  network admin http://controller:9696

パッケージのインストール

本書ではネットワークの構成は公式マニュアルの「Networking Option 2: Self-service networks」の方法で構築する例を示します。

controller# apt install neutron-server neutron-plugin-ml2 \
 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent \
 neutron-metadata-agent

Neutronコンポーネントの設定

Neutronサーバーの設定

controllerノードのneutron.confの設定を行います。 すでにいくつかの設定は行われています。各セクションから設定項目を探して同じように設定するか、項目が見つからない場合は設定を追加してください。言及していない設定はそのままで構いません。viで/[DEFAULTのようにセクション名の最後の括弧をのぞいて検索すると、項目を見つけられやすいと思います。

controller# vi /etc/neutron/neutron.conf

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
transport_url = rabbit://openstack:password@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[database]
#connection = sqlite:////var/lib/neutron/neutron.sqlite  ← コメントアウト
connection = mysql+pymysql://neutron:password@controller/neutron

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = password

[nova]
...
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = password

[keystone_authtoken]セクションは追記した設定以外は取り除くかコメントアウトしてください。

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/neutron/neutron.conf | egrep -v "^\s*$|^\s*#"

ML2プラグインの設定

ml2_conf.iniの設定を行います。

controller# vi /etc/neutron/plugins/ml2/ml2_conf.ini

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

[ml2_type_flat]
...
flat_networks = provider

[ml2_type_vxlan]
...
vni_ranges = 1:1000

[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_security_group = True
enable_ipset = True

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/neutron/plugins/ml2/ml2_conf.ini | egrep -v "^\s*$|^\s*#"

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

パブリックネットワークに接続している側のNICを指定します。本書ではens3を指定します。 今回の構成の場合は「flat_networksで指定した値:パブリックネットワークに接続している側のNIC」を指定する必要があるので、「provider:ens3」と設定します。

controller# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
physical_interface_mappings = provider:ens3 ←追記

local_ipは、先にphysical_interface_mappingに設定したNIC側のIPアドレスを設定します。

[vxlan]
enable_vxlan = True         ← コメントをはずす
local_ip = 10.0.0.111       ← 変更
l2_population = True        ← 変更 ※

エージェントとセキュリティグループの設定を行います。

[securitygroup]
...
enable_security_group = True    ← コメントをはずす
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
↑ 追記

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/neutron/plugins/ml2/linuxbridge_agent.ini | egrep -v "^\s*$|^\s*#"

※ ML2プラグインのl2populationについて

OpenStack Mitaka以降のバージョンの公式手順書では、ML2プラグインのmechanism_driversとしてlinuxbridgeとl2populationが指定されています。l2populationが有効だとこれまでの動きと異なり、インスタンスが起動してもネットワークが有効化されるまで通信ができません。つまりNeutronネットワークを構築してルーターのパブリック側のIPアドレス宛にPingコマンドを実行しても疎通ができません。このネットワーク有効化の有無についてメッセージキューサービスが監視して制御しています。 従って、これまでのバージョン以上にメッセージキューサービス(本例や公式手順ではしばしばRabbitMQが使用されます)が確実に動作している必要があります。このような仕組みが導入されたのは、不要なパケットがネットワーク内に流れ続けないようにするためです。

ただし、弊社でESXi仮想マシン環境に構築したOpenStack環境においてl2populationが有効化されていると想定通り動かないという事象が発生することを確認してます。その他のハイパーバイザーでは確認していませんが、ネットワーク通信に支障が起きる場合はl2populationをオフに設定すると改善される場合があります。修正箇所は次の通りです。

  • controllerの/etc/neutron/plugins/ml2/ml2_conf.iniの設定変更
[ml2]
...
mechanism_drivers = linuxbridge,l2population
↓
mechanism_drivers = linuxbridge
  • controller & computeの/etc/neutron/plugins/ml2/linuxbridge_agent.iniの設定変更
[vxlan]
...
l2_population = true
↓
l2_population = false

設定変更後はl2populationの設定変更を反映させるため、controllerとcomputeノードのNeutron関連サービスを再起動するか、システムを再起動してください。

Layer-3エージェントの設定

[DEFAULT]セクションで、利用するインターフェイスドライバーを指定します。Linuxブリッジを利用するため、次のように設定します。

controller# vi /etc/neutron/l3_agent.ini

[DEFAULT]
...
interface_driver = linuxbridge

DHCPエージェントの設定

controller# vi /etc/neutron/dhcp_agent.ini

[DEFAULT]
...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
dnsmasq_config_file =/etc/neutron/dnsmasq-neutron.conf

Dnsmasqの設定

Dnsmasqのログの設定とDHCPオプションの設定です。VXLANの追加ヘッダー対策のため、MTUを1454に設定するには次のようにDHCPオプションでパラメーターを渡すことができます。インスタンスが起動するときにインスタンスイメージにDHCPクライアントがある場合は全てのインスタンスでこのMTU値が反映されます。

controller# vi /etc/neutron/dnsmasq-neutron.conf
log-facility = /var/log/neutron/dnsmasq.log
log-dhcp
dhcp-option=26,1454

Metadataエージェントの設定

インスタンスのメタデータサービスを提供するMetadataエージェントを設定します。

controller# vi /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = 10.0.0.111 ← Metadataホストを指定
metadata_proxy_shared_secret = METADATA_SECRET

[cache]
memcache_servers = controller:11211

旧来のnova_metadata_ipではなく、nova_metadata_hostを利用します。

Metadataエージェントのmetadata_proxy_shared_secretに指定する値と、次の手順でNovaに設定するmetadata_proxy_shared_secretが同じ値になるように設定します。任意の値を設定すれば良いですが、思いつかない場合は次のように実行して生成した乱数を使うことも可能です。

controller# openssl rand -hex 10

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/neutron/metadata_agent.ini | egrep -v "^\s*$|^\s*#"

Novaの設定を変更

Novaの設定ファイルの[neutron]セクションに、Neutronの設定を追記します。

controller# vi /etc/nova/nova.conf
...
[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = password   ←neutronユーザーのパスワード
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET

METADATA_SECRETはMetadataエージェントで指定した値に置き換えます。

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/nova/nova.conf | egrep -v "^\s*$|^\s*#"

データベースに展開

コマンドを実行して、エラーが発生せずに完了することを確認します。

controller# 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] Running upgrade f83a0b2964d0 -> fd38cd995cc0, change shared attribute for firewall resource
  OK    ← 最後にOKと出力されることを確認

コントローラーノードのNeutronと関連サービスの再起動

設定を反映させるため、コントローラーノードの関連サービスを再起動します。 まずNova APIサービスを再起動します。

controller# service nova-api restart

次にNeutron関連サービスを再起動します。

controller# service neutron-server restart
controller# service neutron-linuxbridge-agent restart
controller# service neutron-dhcp-agent restart
controller# service neutron-metadata-agent restart

ontroller# service neutron-l3-agent restart

ログの確認

ログを確認して、エラーが出力されていないことを確認します。

controller# tailf /var/log/nova/nova-api.log
controller# tailf /var/log/neutron/neutron-server.log
controller# tailf /var/log/neutron/neutron-metadata-agent.log
controller# tailf /var/log/neutron/neutron-linuxbridge-agent.log

使用しないデータベースファイルを削除

controller# rm /var/lib/neutron/neutron.sqlite

results matching ""

    No results matching ""