このエントリーをはてなブックマークに追加

2.2.9. Virtual Network Service (Quantum) のインストール

Quantumのインストールを行います。インストールしなくてもnova-networkを利用することによりOpenStackは利用可能です。
但し、クラウド間連携、データセンター間での連携、もしくはAWSなどと連携する際には必要になるでしょう。
また、ウェブ、データベース、アプリなど用途別でネットワークを分離したりするのも容易になります。
容易とはいえコマンドで作業を行うことは難しいですがHorizon上だと直感的に出来ます。
ここではL3エージェントを利用しコンピュートノードはネットワークノードのL3エージェント経由でパブリックネットワークに出ていく構成を構築しています。
そのためフローティングIPをインスタンスに付与していても外部からインスタンスへ接続する場合はネットワークノードへのルーティングを設定する必要があります。
コンピュートノードから直接パブリックネットワークに出ていくL3エージェントを設定しないフラットな構成も可能です。

2.2.9.1. Quantumのダウンロード

Quantumのソースをダウンロードします。
またQuantumAPIを利用するためのクライアントもダウンロードしておきます。

2.2.9.1.1. Quantumに依存するパッケージのインストール

Openvswitchに関するパッケージが必要です。
パッケージでのインストールだと依存関係でインストールしてもらえると思いますがそのままだとarpingを利用します。
L3エージェントを動かす際のオプションが違うためエラーになりますのでiputils-arpingのほうを利用します。
$ sudo apt-get install openvswitch-switch openvswitch-datapath-dkms iputils-arping -y

2.2.9.1.2. Quantumのソースをダウンロード

$ sudo git clone git://github.com/openstack/quantum /opt/quantum

2.2.9.1.3. QuantumのバージョンをGrizzlyに固定

$ cd /opt/quantum ; sudo git checkout -b grizzly origin/stable/grizzly

2.2.9.2. Quantumのインストール

ダウンロードしたQuantumとクライアントをインストールします。
pipでパッケージの依存関係を解決します。
$ sudo pip install -r /opt/quantum/tools/pip-requires
$ cd /opt/quantum && sudo python setup.py install

2.2.9.3. Quantumが利用するユーザ、ディレクトリなどの作成

ソースからインストールする場合はユーザやディレクトリを作成する必要がありますので作成します。
$ sudo useradd quantum -m -d /var/lib/quantum -s /bin/false
$ sudo mkdir /etc/quantum
$ sudo mkdir /var/log/quantum
$ sudo chown quantum:quantum /var/log/quantum

2.2.9.4. Quantumの設定

quantumのコンフィグを行います。
サンプルのものをコピーして設定します。
が、まだサンプル自体もそんなに完成されたコンフィグとは言えません。
$ sudo cp -a /opt/quantum/etc/* /etc/quantum
$ sudo mv /etc/quantum/quantum/rootwrap.d /etc/quantum/rootwrap.d
$ sudo mv /etc/quantum/quantum/plugins /etc/quantum

2.2.9.4.1. DHCPエージェントの設定

DHCPエージェントの設定を行います。
$ sudo vi /etc/quantum/dhcp_agent.ini
[DEFAULT]
dhcp_agent_manager = quantum.agent.dhcp_agent.DhcpAgentWithStateReport
signing_dir = /var/lib/quantum/keystone-signing
admin_password = quantum
admin_user = quantum
admin_tenant_name = service
auth_url = http://stack01:35357/v2.0
root_helper = sudo /usr/local/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
use_namespaces = True
debug = True
verbose = True
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = quantum.agent.linux.dhcp.Dnsmasq

2.2.9.4.2. L3エージェントの設定

L3エージェントの設定を行います。
$ sudo vi /etc/quantum/l3_agent.ini
[DEFAULT]
l3_agent_manager = quantum.agent.l3_agent.L3NATAgentWithStateReport
external_network_bridge = br-ex
signing_dir = /var/lib/quantum/keystone-signing
admin_password = quantum
admin_user = quantum
admin_tenant_name = service
auth_url = http://stack01:35357/v2.0
root_helper = sudo /usr/local/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
use_namespaces = True
debug = True
verbose = True
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver

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

$ sudo vi /etc/quantum/metadata_agent.ini
[DEFAULT]
signing_dir = /var/lib/quantum/keystone-signing
root_helper = sudo /usr/local/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
nova_metadata_ip = 192.168.10.50
nova_metadata_port = 8775
#metadata_proxy_shared_secret = stack
debug = True
verbose = True
auth_url = http://192.168.10.50:35357/v2.0
auth_region = RegionOne
admin_tenant_name = service
admin_user = quantum
admin_password = quantum

2.2.9.4.4. Quantumサーバの設定

Quantumサーバの設定を行います。
$ sudo vi /etc/quantum/quantum.conf
[DEFAULT]
auth_strategy = keystone
allow_overlapping_ips = True
policy_file = /etc/quantum/policy.json
debug = True
verbose = True
core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=password
rpc_backend = quantum.openstack.common.rpc.impl_kombu
state_path = /var/lib/quantum
lock_path = $state_path/lock
bind_host = 0.0.0.0
bind_port = 9696
api_paste_config = api-paste.ini
control_exchange = quantum
notification_driver = quantum.openstack.common.notifier.rpc_notifier
default_notification_level = INFO
notification_topics = notifications
[QUOTAS]
[DEFAULT_SERVICETYPE]
[AGENT]
root_helper = sudo /usr/local/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
[keystone_authtoken]
auth_host = stack01
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = quantum
admin_password = quantum
signing_dir = /var/lib/quantum/keystone-signing

2.2.9.4.5. Open-vSwitchプラグインのコンフィグ

Open-vSwitchプラグインを利用するので設定します。
$ sudo vi /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini
[DATABASE]
sql_connection = mysql://quantum:password@stack01/ovs_quantum?charset=utf8
reconnect_interval = 2
[OVS]
local_ip = 192.168.10.50
enable_tunneling = True
tunnel_id_ranges = 1:1000
tenant_network_type = gre
[AGENT]
root_helper = sudo /usr/local/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
polling_interval = 2
[SECURITYGROUP]
firewall_driver = quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

2.2.9.5. Keystoneの設定

環境変数を読み込ませていない場合は読み込ませます。

$ export ADMIN_TOKEN=ADMIN
$ export OS_USERNAME=admin
$ export OS_PASSWORD=secrete
$ export OS_TENANT_NAME=demo
$ export OS_AUTH_URL=http://stack01:5000/v2.0/
Quantum用のUser、Service、EndpointをKeystoneに追加します。
SERVICE_PASSWORD=quantum
SERVICE_HOST=stack01

function get_id () {
    echo `"$@" | awk '/ id / { print $4 }'`
}
ADMIN_ROLE=$(keystone role-list | grep " admin" | awk '{print $2}')
SERVICE_TENANT=$(keystone tenant-list | grep service | awk '{print $2}')

QUANTUM_USER=$(get_id keystone user-create --name=quantum \
                                          --pass="$SERVICE_PASSWORD" \
                                          --tenant_id $SERVICE_TENANT \
                                          --email=quantum@example.com)
keystone user-role-add --tenant_id $SERVICE_TENANT \
                       --user_id $QUANTUM_USER \
                       --role_id $ADMIN_ROLE
QUANTUM_SERVICE=$(get_id keystone service-create \
  --name=quantum \
    --type=network \
    --description="Quantum Service")
 keystone endpoint-create \
     --region RegionOne \
     --service_id $QUANTUM_SERVICE \
     --publicurl "http://$SERVICE_HOST:9696/" \
     --adminurl "http://$SERVICE_HOST:9696/" \
     --internalurl "http://$SERVICE_HOST:9696/"

2.2.9.6. データベースの作成

Quantumが利用するデータベースを作成します。
Quantumのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意して下さい。
データベース名quantum、ユーザ名quantum、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
$ MYSQL_PASS_QUANTUM=password
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ mysql -u root -pnova -e "drop database ovs_quantum;"
$ mysql -u root -pnova -e "create database ovs_quantum character set utf8;"
$ mysql -u root -pnova -e "grant all privileges on ovs_quantum.* to 'quantum'@'%' identified by '$MYSQL_PASS_QUANTUM';"
$ mysql -u root -pnova -e "grant all privileges on ovs_quantum.* to 'quantum'@'localhost' identified by '$MYSQL_PASS_QUANTUM';"
$ mysql -u root -pnova -e "grant all privileges on ovs_quantum.* to 'quantum'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_QUANTUM';"

2.2.9.7. SUDOの設定

プロセスを起動するためにquantumのsudo設定が必要ですのでおこなっておきます。

$ cat << 'QUANTUM_SUDO' | sudo tee /etc/sudoers.d/quantum_sudoers > /dev/null
Defaults:quantum !requiretty

quantum ALL = (root) NOPASSWD: /usr/local/bin/quantum-rootwrap
QUANTUM_SUDO
$ sudo chmod 440 /etc/sudoers.d/*

2.2.9.8. インターフェースの作成

Quantumが利用するインターフェースを追加します。
br-exが外部向けでbr-intが内部向けです。
nova-networkのFLAT DHCPとは違い結局はネットワークノードのQuantumのL3エージェントでルーティングするので好きなセグメントを設定しても問題ありません。
$ sudo ovs-vsctl --no-wait -- --may-exist add-br br-ex
$ sudo ovs-vsctl --no-wait -- --may-exist add-br br-int
$ sudo ovs-vsctl --no-wait br-set-external-id br-int bridge-id br-int
$ sudo ip addr flush dev br-ex
$ sudo ip addr add 200.0.0.1/24 dev br-ex
$ sudo ip link set br-ex up

2.2.9.9. 起動スクリプトの用意

Quantumを起動します。がソースからのインストールの場合は起動スクリプトがありませんので用意します。

2.2.9.9.1. quantum-server

$ cat << 'QUANTUM_SERVER_INIT' | sudo tee /etc/init/quantum-server.conf > /dev/null
description "Quantum server"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [016]

chdir /var/run

pre-start script
        mkdir -p /var/run/quantum
        chown quantum:root /var/run/quantum
end script

script
        [ -r /etc/default/quantum-server ] && . /etc/default/quantum-server
        [ -r "$QUANTUM_PLUGIN_CONFIG" ] && CONF_ARG="--config-file $QUANTUM_PLUGIN_CONFIG"
        exec start-stop-daemon --start --chuid quantum --exec /usr/local/bin/quantum-server -- \
            --config-file /etc/quantum/quantum.conf \
            --log-file /var/log/quantum/server.log $CONF_ARG
end script
QUANTUM_SERVER_INIT

2.2.9.9.2. quantum-dhcp-agent

$ cat << 'QUANTUM_DHCP_AGENT_INIT' | sudo tee /etc/init/quantum-dhcp-agent.conf > /dev/null
description "Quantum DHCP agent"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [016]

chdir /var/run

pre-start script
        mkdir -p /var/run/quantum
        chown quantum:root /var/run/quantum
end script

exec start-stop-daemon --start --chuid quantum --exec /usr/local/bin/quantum-dhcp-agent -- --config-file=/etc/quantum/quantum.conf --config-file=/etc/quantum/dhcp_agent.ini --log-file=/var/log/quantum/dhcp-agent.log
QUANTUM_DHCP_AGENT_INIT

2.2.9.9.3. quantum-l3-agent

$ cat << 'QUANTUM_L3_AGENT_INIT' | sudo tee /etc/init/quantum-l3-agent.conf > /dev/null
description "Quantum l3 plugin agent"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [016]

chdir /var/run

pre-start script
        mkdir -p /var/run/quantum
        chown quantum:root /var/run/quantum
end script

exec start-stop-daemon --start --chuid quantum --exec /usr/local/bin/quantum-l3-agent -- --config-file=/etc/quantum/quantum.conf --config-file=/etc/quantum/l3_agent.ini --log-file=/var/log/quantum/l3-agent.log
QUANTUM_L3_AGENT_INIT

2.2.9.9.4. quantum-metadata-agent

$ cat << 'QUANTUM_METADATA_AGENT_INIT' | sudo tee /etc/init/quantum-metadata-agent.conf > /dev/null
description "Quantum metadata plugin agent"
author "Yolanda Robla <yolanda.robla@canonical.com>"

start on runlevel [2345]
stop on runlevel [016]

chdir /var/run

pre-start script
        mkdir -p /var/run/quantum
        chown quantum:root /var/run/quantum
end script

exec start-stop-daemon --start --chuid quantum --exec /usr/local/bin/quantum-metadata-agent -- \
            --config-file=/etc/quantum/quantum.conf --config-file=/etc/quantum/metadata_agent.ini \
            --log-file=/var/log/quantum/metadata-agent.log
QUANTUM_METADATA_AGENT_INIT

2.2.9.9.5. プラグインの指定ファイルの用意

$ echo 'QUANTUM_PLUGIN_CONFIG="/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini"'  | sudo tee /etc/default/quantum-server

2.2.9.10. プロセスの起動

作成した起動スクリプトを利用してQuantumを起動します。

$ for i in dhcp-agent l3-agent metadata-agent server
do
  sudo stop quantum-$i ; sudo start quantum-$i
done

2.2.9.11. nova-networkの設定を削除

nova-networkで利用していたネットワーク、フローティングIPなどの設定を削除しておきます。
ここでは、元々あったものを指定していますので適宜変更して下さい。
$ nova net-list
+--------------------------------------+---------------+-------------+
| ID                                   | Label         | CIDR        |
+--------------------------------------+---------------+-------------+
| 8cc40b38-ba0a-457a-ba39-26a0f723448b | nova_network1 | 10.0.0.0/25 |
+--------------------------------------+---------------+-------------+
$ nova net-delete 8cc40b38-ba0a-457a-ba39-26a0f723448b
$ nova net-list
$ nova floating-ip-bulk-list
+------------+----------------+---------------+------+-----------+
| project_id | address        | instance_uuid | pool | interface |
+------------+----------------+---------------+------+-----------+
| None       | 192.168.10.113 | None          | nova | br100     |
| None       | 192.168.10.114 | None          | nova | br100     |
| None       | 192.168.10.115 | None          | nova | br100     |
| None       | 192.168.10.116 | None          | nova | br100     |
| None       | 192.168.10.117 | None          | nova | br100     |
| None       | 192.168.10.118 | None          | nova | br100     |
| None       | 192.168.10.119 | None          | nova | br100     |
| None       | 192.168.10.120 | None          | nova | br100     |
| None       | 192.168.10.121 | None          | nova | br100     |
| None       | 192.168.10.122 | None          | nova | br100     |
| None       | 192.168.10.123 | None          | nova | br100     |
| None       | 192.168.10.124 | None          | nova | br100     |
| None       | 192.168.10.125 | None          | nova | br100     |
| None       | 192.168.10.126 | None          | nova | br100     |
+------------+----------------+---------------+------+-----------+
$ nova floating-ip-bulk-delete 192.168.10.112/28
$ nova floating-ip-bulk-list

2.2.9.11.1. nova-networkが起動しないように変更

$ stop nova-network
$ mv /etc/init/nova-network.conf /etc/init/nova-network.conf_orig

2.2.9.12. Quantumによるネットワークの作成

privateがFIXED(内部)ネットワークで、novaをFLOATING(外部)ネットワークとします。

2.2.9.12.1. テナントを確認

ここでは、各サービス用以外のプロジェクトはdemoだけですのでdemoにネットワークを作成していきます。

$ keystone tenant-list
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| 05862ea81eca4e628e81ee9d8e640429 |   demo  |   True  |
| 5155b1ac8d1046438bccc54a71a5d5a1 | service |   True  |
+----------------------------------+---------+---------+

2.2.9.12.2. 内部用ネットワークを作成

$ INT_TENANT_NAME=demo
$ INT_TENANT_ID=$(keystone tenant-list | grep $INT_TENANT_NAME | awk -F'|' '{print $2}' | cut -c2-)
$ quantum net-create --tenant_id $INT_TENANT_ID private
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 62891fc1-bd61-4900-90aa-52bff159409e |
| name                      | private                              |
| provider:network_type     | gre                                  |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1                                    |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 05862ea81eca4e628e81ee9d8e640429     |
+---------------------------+--------------------------------------+

2.2.9.12.3. 内部用サブネットを作成

100.0.0.0/24というサブネットを作成します。
ゲートウェイは100.0.0.254とします。
テナントIDはdemo、ネットワークIDはprivateのものを指定します。
$ PRIVATE_NETWORK_ID=$(quantum net-list | grep private | awk -F'|' '{print $2}' | cut -c2-)
$ quantum subnet-create --tenant_id $INT_TENANT_ID --ip_version 4 --gateway 100.0.0.254 $PRIVATE_NETWORK_ID 100.0.0.0/24
Created a new subnet:
+------------------+----------------------------------------------+
| Field            | Value                                        |
+------------------+----------------------------------------------+
| allocation_pools | {"start": "100.0.0.1", "end": "100.0.0.253"} |
| cidr             | 100.0.0.0/24                                 |
| dns_nameservers  |                                              |
| enable_dhcp      | True                                         |
| gateway_ip       | 100.0.0.254                                  |
| host_routes      |                                              |
| id               | 6ddf9270-790c-432f-8061-03799fffe4a3         |
| ip_version       | 4                                            |
| name             |                                              |
| network_id       | 62891fc1-bd61-4900-90aa-52bff159409e         |
| tenant_id        | 05862ea81eca4e628e81ee9d8e640429             |
+------------------+----------------------------------------------+

2.2.9.12.4. ルータを作成

内部ネットワークと外部ネットワークを接続するルータを作成します。
demoプロジェクトに作成するためdemoプロジェクトのIDを指定します。
$ quantum router-create --tenant_id $INT_TENANT_ID router1
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| external_gateway_info |                                      |
| id                    | 7392936d-86e2-4873-bc25-4ad1c7a38957 |
| name                  | router1                              |
| status                | ACTIVE                               |
| tenant_id             | 05862ea81eca4e628e81ee9d8e640429     |
+-----------------------+--------------------------------------+

2.2.9.12.5. ルータと内部用サブネットを紐付け

ルータのIDと内部用サブネットのIDを指定して両者を紐付けします。

$ SUBNET_INT_ID=$(quantum subnet-list | grep "100.0.0.0" | awk -F'|' '{print $2}' | cut -c2-)
$ ROUTER_ID=$(quantum router-list | grep router1 | awk -F'|' '{print $2}' | cut -c2-)
$ quantum router-interface-add $ROUTER_ID $SUBNET_INT_ID
Added interface to router 7392936d-86e2-4873-bc25-4ad1c7a38957

2.2.9.12.6. 外部用ネットワークを作成

$ quantum net-create nova -- --router:external=True
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | dbefc5d3-7a34-4eb1-8f6e-b044c1d25e11 |
| name                      | nova                                 |
| provider:network_type     | gre                                  |
| provider:physical_network |                                      |
| provider:segmentation_id  | 2                                    |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 05862ea81eca4e628e81ee9d8e640429     |
+---------------------------+--------------------------------------+

2.2.9.12.7. 外部用サブネットを作成

外部用サブネットを200.0.0.0/24とします。
物理ネットワークと同じネットワークである必要はありません。
$ EXT_NETWORK_ID=$(quantum net-list | grep nova | awk -F'|' '{print $2}' | cut -c2-)
$ quantum subnet-create --ip_version 4 $EXT_NETWORK_ID 200.0.0.0/24 -- --enable_dhcp=False
Created a new subnet:
+------------------+----------------------------------------------+
| Field            | Value                                        |
+------------------+----------------------------------------------+
| allocation_pools | {"start": "200.0.0.2", "end": "200.0.0.254"} |
| cidr             | 200.0.0.0/24                                 |
| dns_nameservers  |                                              |
| enable_dhcp      | False                                        |
| gateway_ip       | 200.0.0.1                                    |
| host_routes      |                                              |
| id               | fe0d785a-b014-454d-8231-cf6f2a13c779         |
| ip_version       | 4                                            |
| name             |                                              |
| network_id       | dbefc5d3-7a34-4eb1-8f6e-b044c1d25e11         |
| tenant_id        | 05862ea81eca4e628e81ee9d8e640429             |
+------------------+----------------------------------------------+

2.2.9.12.8. ルータのゲートウェイを設定

ルータIDと外部ネットワークIDを指定します

$ quantum router-gateway-set $ROUTER_ID $EXT_NETWORK_ID
Set gateway for router 7392936d-86e2-4873-bc25-4ad1c7a38957

2.2.9.12.9. 内部ネットワークへのルーティングを追加

手動で内部ネットワークへのルーティングを追加します。
$ ROUTER_GW_IP=$(quantum port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }')
$ sudo route add -net 100.0.0.0/24 gw $ROUTER_GW_IP
$ echo $ROUTER_GW_IP
200.0.0.2
ただし、接続するのにネームスペース(ip netns hogehoge ping インスタンスなど)でも問題ないのであればルーティングの設定は必要ありません。

2.2.9.12.10. OS再起動時に必要な設定

OS再起動後はNICが一枚の場合は実インターフェースと紐付けていませんのでブリッジインターフェースが消えています。
なので再起動後は以下の設定を再度行う必要があります。
$ sudo ip addr flush dev br-ex
$ sudo ip addr add 200.0.0.1/24 dev br-ex
$ sudo ip link set br-ex up
$ ROUTER_GW_IP=$(quantum port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }')
$ sudo route add -net 100.0.0.0/24 gw $ROUTER_GW_IP

もしくは面倒なので起動スクリプトを作成して設定しておきましょう。

$ cat << 'BR_EX_INIT' | sudo tee /etc/init.d/bridge-add > /dev/null
#! /bin/sh
### BEGIN INIT INFO
# Provides:          bridge-add
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Bridge Interface Add
### END INIT INFO

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

case $1 in
    start)
        ip addr flush dev br-ex
        ip addr add 200.0.0.1/24 dev br-ex
        ip link set br-ex up
        route add -net 100.0.0.0 netmask 255.255.0.0 gw 200.0.0.2
        ;;
    stop)
        sudo ip link set br-ex down
        ;;
    *)
        echo "Usage: $0 {start|stop}" >&2
        exit 3
        ;;
esac

exit 0
BR_EX_INIT
起動スクリプトを登録しておきます。*
OpenVswitchが起動してから設定するようにしています。
$ chmod 755 /etc/init.d/bridge-add
$ sudo update-rc.d bridge-add defaults 21 19

2.2.9.12.11. 複数NICの場合

但し、Quantumを利用する場合は本来複数NICだと思いますので例えば以下のように設定します。
起動スクリプトも必要ありません。
例として記述しています。
$ sudo ovs-vsctl add-port br-ex eth1

auto eth1
iface eth1 inet static
       up   ifconfig $IFACE 0.0.0.0 up
       up   ip link set $IFACE promisc on
       down ip link set $IFACE promisc off
       down ifconfig $IFACE down

auto br-ex
iface br-ex inet static
       address 200.0.0.1
       netmask 255.255.255.0
       network 200.0.0.0
       broadcast 200.0.0.255
       post-up /sbin/route add -net 100.0.0.0 netmask 255.255.0.0 gw 200.0.0.2

2.2.9.13. Novaの設定

既にQuantum単体ではコマンド、Horizonで利用可能ですがNovとの連携が出来ていませんのでNovaのコンフィグを変更してプロセ

スを再起動する必要があります。 | nova-networkの部分をコメントアウトしてQuantumの部分のコメントを外します。 | ファイアウォールの部分は確認中です。

$ sudo vi /etc/nova/nova.conf

一部抜粋したものです。

#common network
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
force_dhcp_release = True
use_ipv6=false

#for nova-network
#firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
#network_manager=nova.network.manager.FlatDHCPManager
#flat_injected=false
#libvirt_use_virtio_for_bridges = True
#public_interface=br100
#flat_interface=eth0
#flat_network_bridge=br100
#fixed_range=10.0.0.0/24
#flat_network_dhcp_start=10.0.0.2
#network_size=255

#for quantum
security_group_api = quantum
firewall_driver = nova.virt.firewall.NoopFirewallDriver
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
libvirt_vif_driver = nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
network_api_class = nova.network.quantumv2.api.API
service_quantum_metadata_proxy = True
quantum_url = http://192.168.10.50:9696
quantum_admin_auth_url = http://192.168.10.50:35357/v2.0
metadata_listen = 192.168.10.50
metadata_listen_port = 8775
quantum_auth_strategy = keystone
quantum_admin_tenant_name = service
quantum_admin_username = quantum
quantum_admin_password = quantum

全体です。

$ cat /etc/nova/nova.conf
[DEFAULT]
verbose=True
my_ip=192.168.10.50
allow_admin_api=True
api_paste_config=/etc/nova/api-paste.ini
instances_path=/var/lib/nova/instances
compute_driver=libvirt.LibvirtDriver
live_migration_uri=qemu+tcp://%s/system
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE
rootwrap_config=/etc/nova/rootwrap.conf
multi_host=True
send_arp_for_ha=True
ec2_private_dns_show_ip=True

#behavior of an instance of when the host has been started
start_guests_on_host_boot=True
resume_guests_state_on_host_boot=True

#logging and other administrative
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova

#common network
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
force_dhcp_release = True
use_ipv6=false

#for nova-network
#firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
#network_manager=nova.network.manager.FlatDHCPManager
#flat_injected=false
#libvirt_use_virtio_for_bridges = True
#public_interface=br100
#flat_interface=eth0
#flat_network_bridge=br100
#fixed_range=10.0.0.0/24
#flat_network_dhcp_start=10.0.0.2
#network_size=255

#for quantum
security_group_api = quantum
firewall_driver = nova.virt.firewall.NoopFirewallDriver
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
libvirt_vif_driver = nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
network_api_class = nova.network.quantumv2.api.API
service_quantum_metadata_proxy = True
quantum_url = http://192.168.10.50:9696
quantum_admin_auth_url = http://192.168.10.50:35357/v2.0
metadata_listen = 192.168.10.50
metadata_listen_port = 8775
quantum_auth_strategy = keystone
quantum_admin_tenant_name = service
quantum_admin_username = quantum
quantum_admin_password = quantum

#vnc
novncproxy_base_url=http://192.168.10.50:6080/vnc_auto.html
xvpvncproxy_base_url=http://192.168.10.50:6081/console
vncserver_proxyclient_address=127.0.0.1
vncserver_listen=0.0.0.0
vnc_keymap=ja

#scheduler
scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

#object
s3_host=stack01
use_cow_images=yes

#glance
image_service=nova.image.glance.GlanceImageService
glance_api_servers=stack01:9292

#rabbit
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=password

#nova database
sql_connection=mysql://nova:password@stack01/nova

#cinder
enabled_apis=ec2,osapi_compute,metadata
volume_api_class=nova.volume.cinder.API

#keystone
auth_strategy=keystone
keystone_ec2_url=http://stack01:5000/v2.0/ec2tokens

#memcache
#memcached_servers=stack01:11211

2.2.9.13.1. Novaの再起動

設定を変更したのでNovaを再起動します。
$ for i in api cert compute conductor consoleauth console novncproxy objectstore scheduler
do
  sudo start nova-$i ; sudo restart nova-$i
done
以上で、設定は終わりです。
Horizonもログインしなおせばネットワークの設定項目が増えています。
コマンドでのフローティングIPの付与の方法などは後で追加しておきます。

目次

前のトピックへ

2.2.8. OpenStackの利用

次のトピックへ

2.3.1. Openstackインストール前のOS設定

このページ