OpenStack Kilo(RDO版)でのMidoNet構築手順(2)

2015年10月14日(水)
工藤 雄大

前回は、OS、OpenStack、MidoNetのインストール部分までの手順をご紹介しました。今回は引き続き、「OpenStackとMidoNetの連携」、「Network設定」、「VyOS環境の構築」の手順をご説明します。

OpenStackとMidoNetの連携

OpenStackとMidoNetを連携できるように設定します。

(1)Keystone連携@Controller

MidoNet API Serviceを作成します。

【MidoNet API Serviceの作成】@Controller
# source /root/keystonerc_admin
# openstack service create --name midonet --description "MidoNet API Service" midonet
# openstack user create --password admina midonet
# openstack role add --project services --user midonet admin

(2)Neutron連携@Controller

NeutronからMidoNet Pluginを使えるように設定します。

【Neutron MidoNet Pluginのインストール】@Controller
# yum install python-neutron-plugin-midonet

【neutron.confの修正】@Controller
# vi /etc/neutron/neutron.conf
【core_pluginの変更、service_pluginsのコメントアウト】
----
core_plugin = neutron.plugins.midonet.plugin.MidonetPluginV2
# service_plugins =~
----

【midonet.iniの作成】@Controller
【下記内容で新規作成する】
# mkdir /etc/neutron/plugins/midonet
# vi /etc/neutron/plugins/midonet/midonet.ini
----
[DATABASE]
sql_connection = mysql://neutron:admina@192.168.10.101/neutron
[MIDONET]
# MidoNet API URL
midonet_uri = http://192.168.10.101:8081/midonet-api
# MidoNet administrative user in Keystone
username = midonet
password = admina
# MidoNet administrative user's tenant
project_id = services
----

【midonet.iniをplugin.iniとする】@Controller
# rm -f /etc/neutron/plugin.ini
# ln -s /etc/neutron/plugins/midonet/midonet.ini /etc/neutron/plugin.ini
【dhcp_agent.iniの変更、追記】@Controller
# vi /etc/neutron/dhcp_agent.ini
---

【リスト内の強調部分を修正。use_namespaces=Trueとなっていることを確認する】
[DEFAULT]
interface_driver = neutron.agent.linux.interface.MidonetInterfaceDriver
dhcp_driver = midonet.neutron.agent.midonet_driver.DhcpNoOpDriver
use_namespaces = True
enable_isolated_metadata = True

【下記を追記する】
[MIDONET]
# MidoNet API URL
midonet_uri = http://192.168.10.101:8081/midonet-api
# MidoNet administrative user in Keystone
username = midonet
password = admina
# MidoNet administrative user's tenant
project_id = services

【Neutron databaseの再構築】@Controller
# systemctl stop neutron-server
# mysql -e 'drop database neutron'
# mysql -e 'create database neutron'
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/midonet/midonet.ini upgrade kilo" neutron
# systemctl restart openstack-nova-api openstack-nova-scheduler openstack-nova-conductor
# systemctl start neutron-server

【Neutron Serviceの再起動】@Controller
# systemctl restart neutron-dhcp-agent
# systemctl restart neutron-metadata-agent

(3)Nova連携@Compute 1、2

libvirt設定を変更し、nova-rootwrapをインストールします。

【qemu.confの編集】@Compute 1、2
# vi /etc/libvirt/qemu.conf
------
【下記のコメントアウトをはずす】
user = "root"
group = "root"

【下記コメントアウトをはずすとともに、強調部分を追記する。1つ上の行("/dev/vfio/vfio")の「,」も忘れずに】
cgroup_device_acl = [
   "/dev/null", "/dev/full", "/dev/zero",
   "/dev/random", "/dev/urandom",
   "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
   "/dev/rtc","/dev/hpet", "/dev/vfio/vfio",
   "/dev/net/tun"
]
----

【libvirtの再起動】@Compute 1、2
# systemctl restart libvirtd

【nova-rootwrapのインストール】@Compute 1、2
# yum install openstack-nova-network
# systemctl disable openstack-nova-network
# systemctl restart openstack-nova-compute

Network設定

External Networkの作成と、MidoNet Provider Routerの設定をします。図1の構成となるよう設定します。

図1:上流Network構成完成図

図1:上流Network構成完成図

(4)External Network作成@Controller

External Networkを作成します。Floating IPは、このExternal Networkから払い出されます。

【External Network作成】@Controller
# source keystonerc_admin
# neutron net-create ext-net --shared --router:external
# neutron subnet-create ext-net 10.10.0.0/24 --name ext-subnet --allocation-pool start=10.10.0.10,end=10.10.0.100 --disable-dhcp --gateway 10.10.0.1

(5)MidoNet Provider Router設定@Controller

MidoNet Provider Routerの設定をします。ここからは手順が細かいので、注意深く設定してください。まず、下準備をします。

【Tenant ID確認】@Controller
# source keystonerc_admin
# keystone tenant-list
【admin tenantのID(出力例の強調されている行)を控えます】
--(出力例)--
+----------------------------------+----------+---------+
|                id                |   name   | enabled |
+----------------------------------+----------+---------+
| 010b1aeb817949f8bd737cbacea5ecfa |  admin   |   True  |
| 060d49f1360b4a5b977d5e801cf85c41 | services |   True  |
+----------------------------------+----------+---------+
--(ここまで)--

【MidoNet Provider RouterへのTenant ID割り当て】@ControllerのMidoNet CLI
# midonet-cli

【Tenant解除】
midonet> cleart

【MidoNet Provider Routerのルータ名(以下の出力例でのrouter0)を控えます】
midonet> router list
(出力例)
router router0 name MidoNet Provider Router state up

【Tenant割り当て】
midonet> sett <上記で控えたadmin tenantのID>
(投入例)
midonet> sett 010b1aeb817949f8bd737cbacea5ecfa

続いて、MidoNet Provider Routerへポートを追加します。

【MidoNet Provider Routerへのポート追加】@ControllerのMidoNet CLI
midonet> router <上記で控えたルータ名> add port address <IP Address> net <Segment>
--(投入例)--
midonet> router router0 add port address 172.16.255.1 net 172.16.255.0/30
midonet> router router0 add port address 172.16.255.5 net 172.16.255.4/30
--(ここまで)--

【MidoNet Provider Routerのポート確認】@ControllerのMidoNet CLI
midonet> router router0 port list
--(出力例)--
port port2 device router0 state up plugged(略)address 10.10.0.1 net 10.10.0.0/24 peer bridge0:port0
port port0 device router0 state up plugged(略)address 172.16.255.1 net 172.16.255.0/30
port port1 device router0 state up plugged(略)address 172.16.255.5 net 172.16.255.4/30
--(ここまで)--

【作成したポートへBGP設定投入・確認】@ControllerのMidoNet CLI
midonet> router router0 port <port名> add bgp local-AS <local AS> peer-AS <peer AS> peer <対向IP Address>
--(投入例)--
router router0 port port0 add bgp local-AS 64512 peer-AS 64513 peer 172.16.255.2
router router0 port port1 add bgp local-AS 64512 peer-AS 64513 peer 172.16.255.6
--(ここまで)--

【BGP名確認】@ControllerのMidoNet CLI
【出力例の「bgp」の次がbgp0となっていることを確認】
midonet> router router0 port port0 list bgp
(出力例)
bgp bgp0 local-AS 64512 peer-AS 64513 peer 172.16.255.2
midonet> router router0 port port1 list bgp
(出力例)
bgp bgp0 local-AS 64512 peer-AS 64513 peer 172.16.255.6

【External Network経路情報のBGPピアへの通知設定・確認】@ControllerのMidoNet CLI
midonet> router router0 port <port名> bgp <bgp名> add route net <External Network Segment>
midonet> router router0 port <port名> bgp <bgp名> list route
--(投入例)--
router router0 port port0 bgp bgp0 add route net 10.10.0.0/24
router router0 port port1 bgp bgp0 add route net 10.10.0.0/24
--(ここまで)--

【設定確認】@ControllerのMidoNet CLI
router router0 port port0 bgp bgp0 list route
router router0 port port1 bgp bgp0 list route

この時点のNetwork構成は、図2のようなイメージになります。MidoNet Provider Routerに、インタフェースとBGP設定は入っていますが、GWにはひもづいていません。

図2:上流Network構成の途中経過1

図2:上流Network構成の途中経過1

作成したMidoNet Provider Router上のポートを、GWへひもづけます。

【GW 1、2のホスト名確認】@ControllerのMidoNet CLI
midonet> host list
--(出力例)--
host host3 name gw2.midonet.example.com alive true addresses(略)
host host4 name gw1.midonet.example.com alive true addresses(略)
---(ここまで)---

【GW 1、2のインタフェース確認】@ControllerのMidoNet CLI
midonet> host <host名> list interface
--(GW 1用の投入・出力例。GW 2用も確認ください)--
【上流接続用インタフェース(eth2)にIP Addressが割り当たっていないことを確認
midonet> host host4 list interface
iface midonet host_id host4 status 2 addresses [] mac ee:49:c9:db:6c:bd mtu 1500 type Virtual endpoint UNKNOWN
iface lo host_id host4 status 3 addresses [u'127.0.0.1', u'0:0:0:0:0:0:0:1'] mac 00:00:00:00:00:00 mtu 65536 type Virtual endpoint LOCALHOST
iface eth1 host_id host4 status 3 addresses [u'192.168.20.107', u'ffff:ffff:fe80:0:ffff:ffff:fe3e:39ff'] mac 00:0c:29:32:11:3b mtu 1500 type Virtual endpoint DATAPATH
iface eth2 host_id host4 status 3 addresses [u'ffff:ffff:fe80:0:ffff:ffff:fe3e:39ff'] mac 00:0c:29:32:11:45 mtu 1500 type Virtual endpoint DATAPATH
iface eth0 host_id host4 status 3 addresses [u'192.168.10.107', u'ffff:ffff:fe80:0:ffff:ffff:fe3e:39ff'] mac 00:0c:29:32:11:31 mtu 1500 type Virtual endpoint DATAPATH
--(ここまで)--

【MidoNet Provider Router PortをGW 1へひもづけ】@ControllerのMidoNet CLI
【構成図及びここまでの出力結果を確認しながら、注意深く設定を投入してください。特に以下の強調部分のホスト名、ポート名に注意してください】
midonet> host <GW 1のhost名> add binfing port router0:<GW 1にひもづけるMidoNet Provider Routerのport名> interface <interface名>
(投入例)
midonet> host host4 add binding port router0:port0 interface eth2

【MidoNet Provider Router PortをGW 2へひもづけ】@ControllerのMidoNet CLI
midonet> host <GW 2のhost名> add binfing port router0:<GW 2にひもづけるMidoNet Provider Routerのport名> interface <interface名>
(投入例)
midonet> host host3 add binding port router0:port1 interface eth2

Port Groupを作成します。

【Port Groupの作成、ポート追加、確認】@ControllerのMidoNet CLI
midonet> port-group create name uplink-spg stateful true
midonet> port-group pgroup0 add member port router0:port0
midonet> port-group pgroup0 add member port router0:port1
midonet> port-group pgroup0 list member

(6)サーバシャットダウン・起動@全ノード

設定後、全ノードをシャットダウンし、その後起動します。起動後、Midolmanのステータスを確認してください。

【サーバシャットダウン・起動】@全ノード
【全サーバを落としてから、全サーバを起動してください】
# shutdown -h now

【Midolmanサービスの確認】@Controller、Compute 1、2、GW 1、2
# service midolman status

ここまでで、MidoNet環境の構築が完了しました。この時点でのNetwork構成は図 3のようなイメージです。

図 3:上流Network構成の途中経過2

図 3:上流Network構成の途中経過2

株式会社日立ソリューションズ

技術開発本部 研究開発部 オープンソース技術グループ 技師
新技術、新製品の評価及びソリューション開発に従事。ここ7、8年は仮想化関連技術の先行評価に取り組み、近年はオープンソースのクラウド技術の評価及び技術情報展開を実施している。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています