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

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

フローティングIPの部分がおかしいですので参考にしないでください。
Quantumのインストールを行います。インストールしなくてもOpenStackは利用可能です。
クラウド間連携、データセンター間での連携、もしくはAWSなどと連携する際には必要になるでしょう。
ウェブ、データベース、アプリなど用途別でネットワークを分離したりするのにも容易にすることが出きるようになります。

Quantumのインストール

L2部分はOpenvswitchのプラグインを利用します。

$ sudo apt-get -y install quantum-server python-cliff python-pyparsing \
                          quantum-plugin-openvswitch quantum-plugin-openvswitch-agent \
                          quantum-l3-agent quantum-dhcp-agent

インターフェースの追加

ここではNIC1枚でQuantumを利用しようとしているためサブインターフェースを追加します。
複数ネットワークがある場合はeth0:1をeth1などとして適宜変更してください。
$ sudo service openvswitch-switch restart
$ sudo ovs-vsctl add-br br-int
$ sudo ovs-vsctl add-br br-ex
$ sudo ovs-vsctl add-port br-ex eth0:1
$ sudo vi /etc/network/interfaces
auto br-ex
iface br-ex inet static
       address 192.168.10.70
       network 192.168.10.0
       netmask 255.255.255.0
       broadcast 192.168.10.255
       gateway 192.168.10.1
       dns-nameservers 192.168.10.1

auto eth0:1
iface eth0:1 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

設定を反映します。

$ sudo service networking restart

Quantumの設定

コンフィグを行う前にバックアップしておきます。

$ sudo cp -a  /etc/quantum /etc/quantum_bak

quantum.confの設定

認証にKeystonを利用するように設定します。
$ sudo vi /etc/quantum/quantum.conf
[DEFAULT]
rabbit_password=password
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
auth_strategy = keystone
verbose = True
debug = True
bind_host = 0.0.0.0
bind_port = 9696
core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
api_paste_config = api-paste.ini
control_exchange = quantum
notification_driver = quantum.openstack.common.notifier.list_notifier
list_notifier_drivers = quantum.openstack.common.notifier.rabbit_notifier

[QUOTAS]

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

Open-vSwitchプラグインを利用するので設定します。
$ sudo vi /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini
[DATABASE]
sql_connection = mysql://quantum:password@stack01/quantum?charset=utf8
reconnect_interval = 2

[OVS]
#For VLAN
tenant_network_type = vlan
network_vlan_ranges = physnet1:1:4094
bridge_mappings = physnet1:br-ex

[AGENT]
polling_interval = 2
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf

api-paste.iniの設定

認証にKeystonを利用するように設定します。
$ sudo vi /etc/quantum/api-paste.ini
[composite:quantum]
use = egg:Paste#urlmap
/: quantumversions
/v2.0: quantumapi_v2_0

[composite:quantumapi_v2_0]
use = call:quantum.auth:pipeline_factory
noauth = extensions quantumapiapp_v2_0
keystone = authtoken keystonecontext extensions quantumapiapp_v2_0

[filter:keystonecontext]
paste.filter_factory = quantum.auth:QuantumKeystoneContext.factory

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = 192.168.10.50
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = quantum
admin_password = password

[filter:extensions]
paste.filter_factory = quantum.extensions.extensions:plugin_aware_extension_middleware_factory

[app:quantumversions]
paste.app_factory = quantum.api.versions:Versions.factory

[app:quantumapiapp_v2_0]
paste.app_factory = quantum.api.v2.router:APIRouter.factory

L3エージェントのコンフィグ

認証にKeystonを利用するように設定します。
$ sudo vi /etc/quantum/l3_agent.ini
[DEFAULT]
external_network_bridge = br-ex
debug = True
metadata_ip = 169.254.169.254

interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
auth_url = http://stack01:35357/v2.0
auth_region = RegionOne
admin_tenant_name = service
admin_user = quantum
admin_password = password

root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf

Keystoneの設定

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

$ CONTROLLER_HOST=stack01
$ export ADMIN_TOKEN=ADMIN
$ export OS_USERNAME=admin
$ export OS_PASSWORD=password
$ export OS_TENANT_NAME=admin
$ export OS_AUTH_URL=http://$CONTROLLER_HOST:5000/v2.0/
Quantum用のUser、Service、EndpointをKeystoneに追加します。
SERVICE_PASSWORD=password
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/"

データベースの作成

Quantumが利用するデータベースを作成します。
データベースの作成、設定だけで問題ありません。
同期はQuantum Server起動時に行われるため必要ありません。
データベース名quantum、ユーザ名quantum、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
$ MYSQL_PASS_QUANTUM=password
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ mysql -uroot -pnova -e "drop database if exists quantum;"
$ mysql -uroot -pnova -e "create database quantum;"
$ mysql -uroot -pnova -e "grant all privileges on quantum.* to 'quantum'@'%' identified by '$MYSQL_PASS_QUANTUM';"
$ mysql -uroot -pnova -e "grant all privileges on quantum.* to 'quantum'@'localhost' identified by '$MYSQL_PASS_QUANTUM';"
$ mysql -uroot -pnova -e "grant all privileges on quantum.* to 'quantum'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_QUANTUM';"

nova-networkの削除

Quantumを利用するのであればnova-networkは必要ありませんので削除します。

$ sudo apt-get remove nova-network -y

nova.confの設定

nova-networkを利用していた部分をquantumを利用する設定に変更します。

#network
#libvirt_use_virtio_for_bridges = True
#network_manager=nova.network.manager.FlatDHCPManager
#dhcpbridge_flagfile=/etc/nova/nova.conf
#dhcpbridge=/usr/bin/nova-dhcpbridge
#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
#force_dhcp_release = True
#flat_injected=false
#use_ipv6=false

network_api_class=nova.network.quantumv2.api.API
quantum_url=http://stack01:9696
quantum_auth_strategy=keystone
quantum_admin_tenant_name=service
quantum_admin_username=quantum
quantum_admin_password=service_pass
quantum_admin_auth_url=http://stack01:35357/v2.0
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver

各プロセスの再起動

NovaとQuantumのプロセスを再起動します。

$ sudo service quantum-server restart
$ sudo service quantum-plugin-openvswitch-agent restart
$ sudo service quantum-l3-agent restart
$ sudo service quantum-dhcp-agent restart
$ for proc in api cert consoleauth scheduler compute novncproxy
do
  sudo stop nova-$proc ; sudo start nova-$proc
done

QuantumによるIPアドレスやルートの設定

プロジェクトはadminで作業を行いますので違う場合は最初のtenant_idの箇所を変更してください。
いちいちIDで設定する必要がありますので少し面倒です。
インターネットやクラウド外のネットワークなどに出ていくための外部ネットワークを作成します。
$ tenant_id=$(keystone tenant-list | grep -v invisible | awk '/admin/ {print $2}')
$ quantum net-create --tenant-id $tenant_id ext_net --router:external=True --provider:network_type flat --provider:physical_network physnet1
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 3806d91c-5a72-4217-b259-60b562037bb4 |
| name                      | ext_net                              |
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  |                                      |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 8496e364de37417e94ea7c490762716b     |
+---------------------------+--------------------------------------+

作成した外部ネットワークの設定を確認します。

$ quantum net-show $(quantum net-list | grep ext_net | awk '{print $2}')
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 3806d91c-5a72-4217-b259-60b562037bb4 |
| name                      | ext_net                              |
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  |                                      |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 8496e364de37417e94ea7c490762716b     |
+---------------------------+--------------------------------------+

外部ネットワークのサブネットの作成

外部ネットワークのサブネットの作成を行います。
$ quantum subnet-create --tenant-id $tenant_id --name ext_net_subnet01 --allocation-pool start=192.168.10.112,end=192.168.10.127 ext_net 192.168.10.0/24 --enable_dhcp False
Created a new subnet:
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| allocation_pools | {"start": "192.168.10.112", "end": "192.168.10.127"} |
| cidr             | 192.168.10.0/24                                      |
| dns_nameservers  |                                                      |
| enable_dhcp      | False                                                |
| gateway_ip       | 192.168.10.1                                         |
| host_routes      |                                                      |
| id               | 901df139-9885-4e8f-90f8-40b63ea5616e                 |
| ip_version       | 4                                                    |
| name             | ext_net_subnet01                                     |
| network_id       | 3806d91c-5a72-4217-b259-60b562037bb4                 |
| tenant_id        | 8496e364de37417e94ea7c490762716b                     |
+------------------+------------------------------------------------------+

作成したサブネットを確認します。

$ quantum subnet-list
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+
| id                                   | name               | cidr            | allocation_pools                                     |
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+
| 901df139-9885-4e8f-90f8-40b63ea5616e | ext_net_subnet01   | 192.168.10.0/24 | {"start": "192.168.10.112", "end": "192.168.10.127"} |
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+

作成したサブネットの詳細を確認します。

$ quantum subnet-show $(quantum subnet-list  | grep ext_net_subnet01 | awk '{print $2}')
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| allocation_pools | {"start": "192.168.10.112", "end": "192.168.10.127"} |
| cidr             | 192.168.10.0/24                                      |
| dns_nameservers  |                                                      |
| enable_dhcp      | False                                                |
| gateway_ip       | 192.168.10.1                                         |
| host_routes      |                                                      |
| id               | 901df139-9885-4e8f-90f8-40b63ea5616e                 |
| ip_version       | 4                                                    |
| name             | ext_net_subnet01                                     |
| network_id       | 3806d91c-5a72-4217-b259-60b562037bb4                 |
| tenant_id        | 8496e364de37417e94ea7c490762716b                     |
+------------------+------------------------------------------------------+

内部ネットワーク1の作成

$ tenant_id=$(keystone tenant-list | grep -v invisible | awk '/admin/ {print $2}')
$ quantum net-create --tenant-id $tenant_id int_net01 --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 101
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 209b8a46-863c-45cc-a9a7-4049f080c07b |
| name                      | int_net01                            |
| provider:network_type     | vlan                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  | 101                                  |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 8496e364de37417e94ea7c490762716b     |
+---------------------------+--------------------------------------+

作成した内部ネットワーク1を確認します。

$ quantum net-show $(quantum net-list | grep net01 | awk '{print $2}')
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 209b8a46-863c-45cc-a9a7-4049f080c07b |
| name                      | int_net01                            |
| provider:network_type     | vlan                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  | 101                                  |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 8496e364de37417e94ea7c490762716b     |
+---------------------------+--------------------------------------+

内部ネットワーク1のサブネットの作成

内部ネットワーク1のサブネットは10.10.10.0/24として作成します。
ゲートウェイは何も設定しないと10.10.10.1で作成されます。
$ quantum subnet-create --tenant-id $tenant_id --name int_net01_subnet01 int_net01 10.10.10.0/24
Created a new subnet:
+------------------+------------------------------------------------+
| Field            | Value                                          |
+------------------+------------------------------------------------+
| allocation_pools | {"start": "10.10.10.2", "end": "10.10.10.254"} |
| cidr             | 10.10.10.0/24                                  |
| dns_nameservers  |                                                |
| enable_dhcp      | True                                           |
| gateway_ip       | 10.10.10.1                                     |
| host_routes      |                                                |
| id               | 7fbc3a06-26ad-4f51-bebe-b4ff3a0d3088           |
| ip_version       | 4                                              |
| name             | int_net01_subnet01                             |
| network_id       | 209b8a46-863c-45cc-a9a7-4049f080c07b           |
| tenant_id        | 8496e364de37417e94ea7c490762716b               |
+------------------+------------------------------------------------+

作成したサブネットを確認します。

$ quantum subnet-list
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+
| id                                   | name               | cidr            | allocation_pools                                     |
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+
| 7fbc3a06-26ad-4f51-bebe-b4ff3a0d3088 | int_net01_subnet01 | 10.10.10.0/24   | {"start": "10.10.10.2", "end": "10.10.10.254"}       |
| 901df139-9885-4e8f-90f8-40b63ea5616e | ext_net_subnet01   | 192.168.10.0/24 | {"start": "192.168.10.112", "end": "192.168.10.127"} |
+--------------------------------------+--------------------+-----------------+------------------------------------------------------+

ルータ1の作成

内部ネットワーク1と外部ネットワークをルーティングするルータ1を作成します。

$ quantum router-create --tenant-id $tenant_id router01
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| external_gateway_info |                                      |
| id                    | f419547b-c29b-42ed-bea2-e0cecb6e10f2 |
| name                  | router01                             |
| status                | ACTIVE                               |
| tenant_id             | 8496e364de37417e94ea7c490762716b     |
+-----------------------+--------------------------------------+

コマンドで出力されたものと同じですがルータ1の設定を確認します。

$ quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}')
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| external_gateway_info |                                      |
| id                    | f419547b-c29b-42ed-bea2-e0cecb6e10f2 |
| name                  | router01                             |
| status                | ACTIVE                               |
| tenant_id             | 8496e364de37417e94ea7c490762716b     |
+-----------------------+--------------------------------------+
ルータのゲートウェイを確認します。
何も設定していませんので何も出力されません。
$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

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

外部ネットワークに出ていくためには新規のルータを作成するたびに必要です。
作成した外部ネットワークはpublic01なのでそれに紐付けます。
$ quantum router-gateway-set router01 ext_net
Set gateway for router router01
ルータ01の設定を確認します。
IDで出力されていますので分かりにくいですがtenant_idはテナント名serivceのID、network_idのIDはpublic01のIDです。
$ quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}')
+-----------------------+--------------------------------------------------------+
| Field                 | Value                                                  |
+-----------------------+--------------------------------------------------------+
| admin_state_up        | True                                                   |
| external_gateway_info | {"network_id": "3806d91c-5a72-4217-b259-60b562037bb4"} |
| id                    | f419547b-c29b-42ed-bea2-e0cecb6e10f2                   |
| name                  | router01                                               |
| status                | ACTIVE                                                 |
| tenant_id             | 8496e364de37417e94ea7c490762716b                       |
+-----------------------+--------------------------------------------------------+
外部ネットワークのゲートウェイが設定されたことがわかります。
$ sudo ip netns exec qrouter-$(quantum router-list | grep id | awk '{print $2}' | grep -v id) route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 qg-c9d5b66e-9c
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 qg-c9d5b66e-9c

ルータ1と内部ネットワーク1の関連付けを設定

$ quantum router-interface-add router01 int_net01_subnet01
Added interface to router router01
ここで再度ルーティング情報を確認します。
内部ネットワークが追加されたことがわかります。
$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 qg-c9d5b66e-9c
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 qr-d10bb9ec-91
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 qg-c9d5b66e-9c

仮想マシンの起動

仮想マシンをプロジェクトadminで起動します。
その際にネットワークはnet01を選択して起動します。
コマンドの場合は後で追加しておきます。
$ TTY_LINUX_AMI=$(nova image-list | grep ttylinux-ami | awk '{print $2}')
$ NET01=$(quantum net-show $(quantum net-list | grep int_net01 | awk '{print $2}') | grep " id" | awk '{print $4}')
$ nova boot --flavor 1 --image $TTY_LINUX_AMI tiny_001 --key_name mykey --security-groups default --nic net-id=$NET01
+-------------------------------------+----------------------------------------------------------+
| Property                            | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                                   |
| OS-EXT-SRV-ATTR:host                | stack01                                                  |
| OS-EXT-SRV-ATTR:hypervisor_hostname | stack01                                                  |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000001                                        |
| OS-EXT-STS:power_state              | 0                                                        |
| OS-EXT-STS:task_state               | scheduling                                               |
| OS-EXT-STS:vm_state                 | building                                                 |
| accessIPv4                          |                                                          |
| accessIPv6                          |                                                          |
| adminPass                           | jVXNnZzjt98w                                             |
| config_drive                        |                                                          |
| created                             | 2012-12-24T07:23:38Z                                     |
| flavor                              | m1.tiny                                                  |
| hostId                              | 6b229a3fdc3d8298cd6f2a3ee8a81855742c3f4ae3eb0d3cc35fe84c |
| id                                  | 94eefaa9-d32b-4a75-9043-d9f215e493bb                     |
| image                               | ttylinux-ami                                             |
| key_name                            | mykey                                                    |
| metadata                            | {}                                                       |
| name                                | tiny_001                                                 |
| progress                            | 0                                                        |
| security_groups                     | [{u'name': u'default'}]                                  |
| status                              | BUILD                                                    |
| tenant_id                           | 8496e364de37417e94ea7c490762716b                         |
| updated                             | 2012-12-24T07:23:38Z                                     |
| user_id                             | ad73890f86ed42c69e712ae35f56e7fa                         |
+-------------------------------------+----------------------------------------------------------+
$ nova list
+--------------------------------------+----------+--------+----------------------+
| ID                                   | Name     | Status | Networks             |
+--------------------------------------+----------+--------+----------------------+
| 94eefaa9-d32b-4a75-9043-d9f215e493bb | tiny_001 | ACTIVE | int_net01=10.10.10.3 |
+--------------------------------------+----------+--------+----------------------+
完成した仮想マシンに対してpingで疎通確認を行うには先ほどルーティングの確認のように行う必要があります。
普通にpingをしても怒られます。
しかしただ疎通確認を行うだけなのにもはや謎コマンドです。
$ ping 10.10.10.3
普通にインターネットに疎通確認をしてしまっています。
PING 10.10.10.3 (10.10.10.3) 56(84) bytes of data.
From 122.1.212.131 icmp_seq=1 Packet filtered
From 122.1.212.131 icmp_seq=2 Packet filtered
From 122.1.212.131 icmp_seq=3 Packet filtered
$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') ping 10.10.10.3
PING 10.10.10.3 (10.10.10.3) 56(84) bytes of data.
64 bytes from 10.10.10.3: icmp_req=1 ttl=64 time=10.0 ms
64 bytes from 10.10.10.3: icmp_req=2 ttl=64 time=0.491 ms
64 bytes from 10.10.10.3: icmp_req=3 ttl=64 time=0.923 ms
またログインする場合は以下のように行います。
こちらもなかなか気持ち悪いコマンドです。
$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') ssh -i /home/stack/mykey root@10.10.10.3

フローティングIPの払い出し

外部ネットワークへ接続するためのフローティングIPを仮想マシンのために払い出しを行います。
これはまだFolsomのダッシュボードで作業が行えません。
不便なので次のバージョンでは行えるようになるらしいです。
$ quantum floatingip-create ext_net
Created a new floatingip:
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 192.168.10.113                       |
| floating_network_id | 3806d91c-5a72-4217-b259-60b562037bb4 |
| id                  | e96a680a-4a4e-480f-9189-76ba2166d4a3 |
| port_id             |                                      |
| router_id           |                                      |
| tenant_id           | 8496e364de37417e94ea7c490762716b     |
+---------------------+--------------------------------------+

設定した時のものと一緒ですが払いだしたフローティングIPを確認します。

$ quantum floatingip-show $(quantum floatingip-list | grep -v id | grep -v "+" | awk '{print $2}')
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 192.168.10.113                       |
| floating_network_id | 3806d91c-5a72-4217-b259-60b562037bb4 |
| id                  | e96a680a-4a4e-480f-9189-76ba2166d4a3 |
| port_id             |                                      |
| router_id           |                                      |
| tenant_id           | 8496e364de37417e94ea7c490762716b     |
+---------------------+--------------------------------------+
$ quantum floatingip-list
+--------------------------------------+------------------+---------------------+---------+
| id                                   | fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+---------+
| e96a680a-4a4e-480f-9189-76ba2166d4a3 |                  | 192.168.10.113      |         |
+--------------------------------------+------------------+---------------------+---------+

払いだしたフローティングIPと仮想マシンとを紐付けます。

$ quantum floatingip-associate $(quantum floatingip-list | grep "|" | grep -v id | awk '{print $2}') $(quantum port-list | grep 10.10.10.3 | awk '{print $2}')
Associated floatingip e96a680a-4a4e-480f-9189-76ba2166d4a3

フローティングIPが仮想マシンのIPアドレスと紐付いたことを確認します。

$ quantum floatingip-list
+--------------------------------------+------------------+---------------------+--------------------------------------+
| id                                   | fixed_ip_address | floating_ip_address | port_id                              |
+--------------------------------------+------------------+---------------------+--------------------------------------+
| e96a680a-4a4e-480f-9189-76ba2166d4a3 | 10.10.10.3       | 192.168.10.113      | dd6d35ec-d0cd-4436-810a-3440fad47505 |
+--------------------------------------+------------------+---------------------+--------------------------------------+

ルーティングの設定を追加します。

$ ROUTER_GW_IP=`quantum port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }'`
$ sudo route add -net 10.10.10.0/24 gw $ROUTER_GW_IP dev br-ex
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.10.1    0.0.0.0         UG    100    0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 br-ex
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

むう、フローティングIPなので外部ネットワークのはずだけど何で内部ネットワークになってるんだろ。

$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') ping 192.168.10.112
$ sudo ip netns exec qrouter-$(quantum router-show $(quantum router-list  | grep router01 | awk '{print $2}') | grep " id" | awk '{print $4}') ping 192.168.10.113