LoginSignup
10
9

More than 5 years have passed since last update.

VirtualBoxで作成したCentOSにOpenStackを構築する(Networking編)

Posted at

環境編
Identity編
Image編
Compute編
の続きです。

公式ドキュメントに従ってやっていきます。
途中、プロバイダーネットワークとセルフサービスネットワークのどちらを構築するかの分岐がありますが、単純なプロバイダーネットワークの方をやっていきます。
セルフサービスネットワークはOpenStack内部でさらにネットワーク空間を切り分けられるイメージです。AWSのVPC的な?

OpenStack Networking

OpenStack Networking (neutron) を使うと、他の OpenStack サービスにより管理されているインターフェースデバイスを作成して、ネットワークに接続できます。様々なネットワーク装置やネットワークソフトウェアに対応するプラグインを実装することができ、 OpenStack のアーキテクチャーと環境に柔軟性をもたらします。

OpenStack Networking は、おもに OpenStack Compute を連携して、コンピュートインスタンスにネットワークと接続性を提供します。

  • neutronの概念: http://docs.openstack.org/liberty/ja/install-guide-rdo/neutron-concepts.html
  • わかりやすい参考記事: http://labs.gree.jp/blog/2015/02/13598/
  • (メモ)フラットネットワーク: テナント(ユーザのグループ, プロジェクトとも)の通信を分離するの VLAN もトンネルも使用しない仮想ネットワーク方式。各フラットネットワークは、一般的にブリッジマッピングにより定義される専用の物理インターフェースを必要とする。ただし、フラットネットワークに複数のサブネットを割り当てることはできる。

インストールと設定@コントローラノード

  • DB作成 mysqlで以下を実行。 NEUTRON_DBPASSにはroot++
  - `create database neutron;`
  - `GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';`
  - `grant all privileges on neutron.* TO 'neutron'@'%' identified by 'NEUTRON_DBPASS';`
  • neutronユーザ作成
    • # openstack user create --domain default --password-prompt neutron
      • NEUTRON_PASSとしてroot++を入力
  • adminロールにneutronユーザを追加
    • # openstack role add --project service --user neutron admin
  • neutronサービスエンティティ作成
    • # openstack service create --name neutron --description "OpenStack Networking" network - neutronのエンドポイント作成
    • # openstack endpoint create --region RegionOne network public http://controller:9696
    • # openstack endpoint create --region RegionOne network internal http://controller:9696
    • # openstack endpoint create --region RegionOne network admin http://controller:9696

コンポーネントのインストール

  • # yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge python-neutronclient ebtables ipset

    • # vim /etc/neutron/neutron.conf で以下を編集
neutron.conf
# データベースへのアクセス方法を定義
[database]
connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron # root++

# ML2プラグインを有効にして,追加プラグインを無効にする
[DEFAULT]
core_plugin = ml2
service_plugins =

# Rabbitメッセージキューの設定
[DEFAULT]
rpc_backend = rabbit

[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS # root++

# identifyサービスへの接続
[DEFAULT]
auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS # root++
# 他はコメントアウトする

# Networking が Compute にネットワークトポロジーの変更を通知するよう設定
[DEFAULT]
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2

[nova]
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS # root++

# ロックパスの設定
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

ML2プラグインの設定

ML2 プラグインは、Linux ブリッジ機構を使用して、インスタンス用の L2 (ブリッジとスイッチ) 仮想ネットワークインフラを構築します

  • # vi /etc/neutron/plugins/ml2/ml2_conf.ini で以下を編集
ml2_conf.ini
[ml2] 
# フラットネットワーク,VLANネットワークを有効にする
type_drivers = flat,vlan

# プロジェクト(プライベート)ネットワークを無効にする
tenant_network_types =

# Linuxブリッジ機構を有効にする
mechanism_drivers = linuxbridge

# ポートセキュリティ拡張ドライバーを有効にする
extension_drivers = port_security

# パブリックフラットプロバイダーネットワークを設定
[ml2_type_flat]
flat_networks = public

# ipset を有効にし、セキュリティーグループルールの効率性を向上させます。
[ml2_type_flat]
flat_networks = public

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

プライベートネットワーク向けの VXLAN トンネルなどの、インスタンス用の L2 (ブリッジおよびスイッチ) 仮想ネットワークインフラを構築して、セキュリティーグループを処理します。

  • # vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini で以下を編集
linuxbridge_agent.ini
# 仮想パブリックネットワークを物理パブリックネットワークのインタフェースに結びつける
[linux_bridge]
# public:enp0s3とした
physical_interface_mappings = public:PUBLIC_INTERFACE_NAME

# VXLANオーバレイネットワークを無効
[vxlan]
enable_vxlan = False

# ARPスプーフィングの保護を有効
[agent]
prevent_arp_spoofing = True

# セキュリティグループを有効にし、 Linux ブリッジ iptables ファイアウォールドライバーを設定
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

DHCPエージェントの設定

  • # vi /etc/neutron/dhcp_agent.ini で以下を編集
dhcp_agent.ini
# Linux ブリッジインターフェースドライバー、Dnsmasq DHCP ドライバーを設定して、 isolated metadata を有効にします。これにより、パブリックネットワークにあるインスタンスがネットワーク経由でメタデータにアクセスできます。
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

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

メタデータエージェント は、クレデンシャルなどの設定情報をインスタンスに提供する

  • # vi /etc/neutron/metadata_agent.ini
metadata_agent.ini
# アクセスパラメータを設定
[DEFAULT]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_region = RegionOne
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS # root++

# メタデータホストの設定
[DEFAULT]
nova_metadata_ip = controller

# メタデータプロキシーの共有シークレットを設定します。
[DEFAULT]
metadata_proxy_shared_secret = METADATA_SECRET # meta++

Networkingを利用するためのComputeの設定

  • # vi /etc/nova/nova.conf
nova.conf
# アクセス用のパラメーターを設定し、メタデータプロキシーを有効にし、シークレットを設定
[neutron]
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS # root++

service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET # meta++

シンボリックリンクの作成

  • # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
  • ll /etc/neutron/ して plugin.ini -> /etc/neutron/plugins/ml2/ml2_conf.ini なっていればおk

DB展開

  • 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

    • Failed to parse /etc/neutron/neutron.conf: at /etc/neutron/neutron.conf:3, Unexpected continuation line: ' verbose = True'
      • とでたのでコメントアウト
    • Failed to parse /etc/neutron/neutron.conf: at /etc/neutron/neutron.conf:60, Unexpected continuation line: ' core_plugin = ml2'
      • 頭に半角スペース入っていると刺さるっぽい 刺さらないパラメータもあるが,削除しておいた方が身のためか
      • 多分↑のverboseも同じ原因
      • パラメータ前のスペースを全て消した後再度実行 -> いけた
  • Compute API サービスを再実行

    • # systemctl restart openstack-nova-api
  • 起動設定

    • # systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
    • # systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

インストールと設定@コンピュートノード

  • コンポーネントのインストール

    • # yum install openstack-neutron openstack-neutron-linuxbridge ebtables ipset
  • # vi /etc/neutron/neutron.conf

neutron.cong
# Rabbitメッセージキューの設定
[DEFAULT]
rpc_backend = rabbit

[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS # root++

# identifyサービスへの接続
[DEFAULT]
auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS # root++
# 他はコメントアウトする

# ロックパスの設定
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

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

  • # vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini で以下
linuxbridge_agent.ini
# 仮想パブリックネットワークを物理パブリックネットワークのインタフェースに結びつける
[linux_bridge]
# public:enp0s3とした
physical_interface_mappings = public:PUBLIC_INTERFACE_NAME

# VXLANオーバレイネットワークを無効
[vxlan]
enable_vxlan = False

# ARPスプーフィングの保護を有効
[agent]
prevent_arp_spoofing = True

# セキュリティグループを有効にし、 Linux ブリッジ iptables ファイアウォールドライバーを設定
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

Networkingを利用するためのComputeの設定

  • # vim /etc/nova/nova.conf
nova.conf
# neutronアクセス用のパラメーターを設定
[neutron]
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS # root++
  • 起動設定
    • # systemctl enable neutron-linuxbridge-agent
    • # systemctl start neutron-linuxbridge-agent

確認

  • ロード済拡張機能一覧を表示して,neutron-serverプロセスが正しく起動していることを確認する
    • neutron ext-list
      • オプション1を選択したのでチュートリアルの例より少ない
  • neutronエージェントが正常に起動したことを確認するため,エージェント一覧を表示
    • neutron agent-list
      • コントローラノードに3つのエージェント,コンピュートノードに1つのエージェントがあることを確認
  • ここまで終われば,基本的なインスタンスを起動するために必要なコンポーネントがOpenStack環境に追加されたことになります。
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9