PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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