3. Networkノードのセットアップ

Networkノードでは以下のインストール/設定を行います。

  • Neutron
    • neutron-plugin-ml2
    • neutron-plugin-openvswitch-agent
    • neutron-l3-agent
    • neutron-dhcp-agent
  • Open vSwitch
    • openvswitch-switch
    • vlan
    • bridge-utils

3.1. ネットワーク設定

/etc/network/interfaces を設定します。

eth0 にはIP アドレスを割り当てずリンクアップだけをさせるよう設定を行います。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

auto eth1
iface eth1 inet static
        address 192.168.5.132
        netmask 255.255.255.0
        network 192.168.5.0
        broadcast 192.168.5.255

auto eth2
iface eth2 inet static
        address 192.168.6.132
        netmask 255.255.255.0
        network 192.168.6.0
        broadcast 192.168.6.255

auto eth3
iface eth3 inet dhcp

3.2. 個別インストールが面倒くさくて一括でインストールしたい人向け

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo shutdown -r 0
sudo apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent \
                        neutron-l3-agent neutron-dhcp-agent python-mysqldb python-memcache \
                        sysstat git ntp
sudo mkdir /var/cache/neutron
sudo chown neutron:neutron /var/cache/neutron

3.3. パッケージアップデート

インストール前にパッケージのアップデートを行います。

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo shutdown -r 0

3.4. NTP

各ノードの時刻がずれているとNova等サービスが正常に動作しません。時刻同期のため、NTP を使用します。

sudo apt-get -y install ntp

時刻同期先に任意のサーバを指定し、NTP を再起動します。

参考: NTPの使い方 : インターネットマルチフィード時刻情報サービス for Public

$ sudo vim /etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

restrict 127.0.0.1
restrict ::1

disable monitor

$ sudo service ntp restart

3.5. カーネルパラメータの設定

Networkノード構成前に、いくつかのカーネルネットワーク機能を有効化します。

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

$ sudo sysctl -p

3.6. Open vSwitch

Open vSwitchをインストールします。

今回はNeutron + Open vSwitch (GRE)を利用しネットワークを構成します。

※ kernel 3.11 以降では openvswitch-datapath-dkms のインストールは不要です。

sudo apt-get install -y openvswitch-switch vlan bridge-utils

各種ブリッジとネットワークの対応は以下の通りです。

ブリッジ インタフェース 用途
br-ex eth0 OVS 内のインスタンスから外部ネットワークへの通信を処理
br-int eth1 OVS 内のインスタンスの内部ネットワーク通信を処理

3.6.1. インテグレーションブリッジ

インテグレーションブリッジを作成します。

sudo ovs-vsctl add-br br-int

3.6.2. エクスターナルブリッジ

エクスターナルブリッジを作成します。

sudo ovs-vsctl add-br br-ex

外部ネットワークの物理インターフェースに接続するエクスターナルブリッジに、ポートを追加します。

sudo ovs-vsctl add-port br-ex eth0

使用しているネットワークインターフェースドライバーによっては、インスタンスと外部ネットワーク間の適切なスループットを達成するために、GROを無効にする必要があります。

sudo ethtool -K eth0 gro off

参考: 仮想マシンインスタンスと外部の通信(ftp受信)でスループットが低い

3.7. Neutronインストール

Neutronのインストールと各種設定を行います。

Neutronネットワークノードドキュメント 参照。

sudo apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent \
                        neutron-l3-agent neutron-dhcp-agent
sudo mkdir /var/cache/neutron
sudo chown neutron:neutron /var/cache/neutron

3.7.1. /etc/neutron/neutron.conf

/etc/neutron/neutron.conf を編集します。

sudo vim /etc/neutron/neutron.conf

設定サンプル

[DEFAULT]
verbose = True
debug = True
state_path = /var/lib/neutron
lock_path = $state_path/lock
bind_host = 0.0.0.0
bind_port = 9696
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = 192.168.5.131
rabbit_password = y7u8i9YUI
rabbit_port = 5672
rabbit_hosts = 192.168.5.131:5672
rabbit_userid = neutron
rabbit_virtual_host = /neutron
rabbit_ha_queues = false
notification_driver = neutron.openstack.common.notifier.rpc_notifier
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://192.168.5.131:8774/v2
nova_region_name = RegionOne
nova_admin_username = nova
nova_admin_tenant_id = 235941422117481288d4d5a10f28f0c5
nova_admin_password = y7u8i9YUI
nova_admin_auth_url = http://192.168.5.131:35357/v2.0

[quotas]

[agent]
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf

[keystone_authtoken]
auth_host = 192.168.5.131
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = y7u8i9YUI
signing_dir = /var/cache/neutron

[database]
connection = mysql://neutron:y7u8i9YUI@192.168.5.131/neutron?charset=utf8

[service_providers]
service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default

nova_admin_tenant_id には serviceプロジェクトのIDを指定します。nova_url, nova_admin_tenant_id など認証情報に誤りがある場合はインスタンス生成時、Unexpected vif_type=binding_failed がnova-compute.logに出力されます。nova_url のURL指定には /v2 が必須です。

3.7.2. /etc/neutron/l3_agent.ini

/etc/neutron/l3_agent.ini を編集します。

sudo vim /etc/neutron/l3_agent.ini

設定サンプル

[DEFAULT]
debug = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
ovs_use_veth = False
use_namespaces = True
external_network_bridge = br-ex

3.7.3. /etc/neutron/l3_agent.iniパラメータ適当に解説

パラメータ 説明
debug デバックログを出力
interface_driver インタフェースドライバを指定
ovs_use_veth OVSインタフェース用用のvethを使用。RHEL6.5の場合はTrue
use_namespaces ネットワークネームスペースを使用
external_network_bridge エクスターナルネットワークブリッジを指定

3.7.4. /etc/neutron/dhcp_agent.ini

/etc/neutron/dhcp_agent.ini を編集します。

sudo vim /etc/neutron/dhcp_agent.ini

設定サンプル

[DEFAULT]
debug = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
ovs_integration_bridge = br-int
ovs_use_veth = False
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True
enable_isolated_metadata = False
enable_metadata_network = False

3.7.5. /etc/neutron/dhcp_agent.iniパラメータ適当に解説

パラメータ 説明
debug デバッグログを出力
interface_driver インタフェースドライバを指定
ovs_use_veth インタフェース用用のvethを使用。RHEL6.5の場合はTrue
dhcp_driver DHCPドライバを指定
use_namespaces ネットワークネームスペースを使用

3.7.6. /etc/neutron/metadata_agent.ini

/etc/neutron/metadata_agent.ini を編集します。

sudo vim /etc/neutron/metadata_agent.ini

設定サンプル

[DEFAULT]
debug = True
auth_url = http://192.168.5.131:5000/v2.0
auth_region = RegionOne
admin_tenant_name = service
admin_user = neutron
admin_password = y7u8i9YUI
endpoint_type = adminURL
nova_metadata_ip = 192.168.5.131
nova_metadata_port = 8775
metadata_proxy_shared_secret = TimeIsMoney

3.7.7. /etc/neutron/metadata_agent.iniパラメータ適当に解説

パラメータ 説明
debug デバッグログを出力
auth_url Keystone認証用URLを指定
auth_region リージョンを指定
admin_tenant_name 接続可能なNeutronユーザの所属テナント
admin_user 接続可能なNeutronユーザ
admin_password 接続可能なNeutronユーザのパスワード
endpoint_type 利用するエンドポイントのタイプ
nova_metadata_ip Nova メタデータサーバ(APIサーバ)のIPアドレス(※名前不可だったはず)
nova_metadata_port Nova メタデータサーバ(APIサーバ)のポート
metadata_proxy_shared_secret メタデータプロキシ接続用パスフレーズ(任意の文字列。nova.confでも指定する。)

3.7.8. /etc/neutron/plugins/ml2/ml2_conf.ini

/etc/neutron/plugins/ml2/ml2_conf.ini を編集します。

sudo vim /etc/neutron/plugins/ml2/ml2_conf.ini

設定サンプル

[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_flat]

[ml2_type_vlan]

[ml2_type_gre]
tunnel_id_ranges = 1:1000

[ml2_type_vxlan]

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

[ovs]
integration_bridge=br-int
enable_tunneling=True
tunnel_bridge=br-tun
int_peer_patch_port=patch-tun
tun_peer_patch_port=patch-int
local_ip=192.168.6.132
tunnel_type=gre

3.7.9. /etc/neutron/plugins/ml2/ml2_conf.iniパラメータ適当に解説

  • [ml2]
パラメータ 説明
type_drivers タイプドライバを指定
tenant_network_types テナントのネットワークタイプを指定
mechanism_drivers メカニズムドライバを指定
  • [ml2_type_gre]
パラメータ 説明
tunnel_id_ranges GREトンネルIDのレンジ
  • [ovs]
パラメータ 説明
integration_bridge インテグレーションブリッジ名
enable_tunneling トンネリングを有効化
tunnel_bridge トンネリングブリッジ名
local_ip GREトンネルで利用するインタフェースのIPアドレス
tunnel_type トンネルタイプ

3.7.10. Neutronサーバ再起動

設定後、Neutron各種サービスを再起動します。この時Neutronデータベースの ml2_gre_endpoints にアドレスが登録されます。

再起動後にml2_conf.iniの[OVS] local_ip を編集する場合はデータを削除しないと大体ハマります。

sudo service neutron-plugin-openvswitch-agent restart
sudo service neutron-l3-agent restart
sudo service neutron-dhcp-agent restart
sudo service neutron-metadata-agent restart

この時、Open vSwitchからは以下のように見えます。

$ sudo ovs-vsctl show
29701125-98b4-4e3e-bbc8-e81ab7e7637d
  Bridge br-int
      Port patch-tun
          Interface patch-tun
              type: patch
              options: {peer=patch-int}
      Port br-int
          Interface br-int
              type: internal
  Bridge br-tun
      Port br-tun
          Interface br-tun
              type: internal
      Port patch-int
          Interface patch-int
              type: patch
              options: {peer=patch-tun}
  Bridge br-ex
      Port "eth0"
          Interface "eth0"
      Port br-ex
          Interface br-ex
              type: internal
  ovs_version: "2.0.1"