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