OpenStackの仮想ネットワーク管理機能「Quantum」の基本的な設定 5ページ

仮想マシンが利用するネットワークの設定を行う

 最後に、仮想マシンが利用するネットワークの設定についてその流れを説明しておこう。目的に応じて設定内容は変わるが、今回は図4のように仮想マシンが直接外部ネットワークに接続されたシンプルな構成を作成する例を紹介しよう。

図4 今回作成するネットワーク構成例
図4 今回作成するネットワーク構成例

 ここでは、203.0.113.0/24という外部と接続できるネットワーク(外部ネットワーク)があり、ネットワークノードに203.0.113.10、計算ノードに203.0.113.11というIPアドレスが付加されているものとする。ゲートウェイは203.0.113.1で、仮想マシンには203.0.113.100から203.0.113.200の範囲のIPアドレスを割り当てることとする。この場合、各仮想マシンには外部ネットワークのIPアドレスが割り当てられ、ゲートウェイ経由で外部から仮想マシンにアクセスが可能となっている。

ネットワークの作成手順

 仮想ネットワークの構築作業は制御ノード上で実行する。このとき、Keystone用の認証情報を環境変数に設定しておく必要がある。以下のようにexportコマンドを実行して設定を行っておこう。

$ export OS_USERNAME=<管理用ユーザー>
$ export OS_TENANT_NAME=<管理用のテナント名>
$ export OS_PASSWORD=<管理用ユーザーのパスワード>
$ export OS_AUTH_URL=http://<keystoneが稼働しているホスト名>:5000/v2.0/

 また、以下では対象とするテナントをTENANT_ID変数に設定したうえでコマンドを実行している。たとえばテナント名が「Default」だった場合、以下のようにこの変数を設定しておこう。

TENANT_ID=Default

 ネットワークを作成するには、quantum net-createコマンドを使用する。まずはこのコマンドを使用し、「net1」という名前のネットワークを作成する。このネットワークは物理デバイスとしてeth0に対応するphysnet1を使用し、ネットワークタイプにはVLANを使わない「flat」を指定している。また、「–shared」オプションは、ネットワークを共有可能にするオプションだ。

$ quantum net-create --tenant-id $TENANT_ID net1 --shared --provider:network_type flat --provider:physical_network physnet1
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 0a3e1b6f-15a8-46dd-afad-937bdeff2cd9 |
| name                      | net1                                 |
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  |                                      |
| router:external           | False                                |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | Default                              |
+---------------------------+--------------------------------------+

 続いて、作成したネットワーク(net1)に対しquantum subnet-createコマンドでサブネットを割り当てる。以下ではサーバーに対して割り当てられている「203.0.113.0/24」というネットワークを利用するよう設定している。また「–allocation-pool」オプションで203.0.113.100から203.0.113.200の範囲のIPアドレスを仮想ネットワーク/仮想マシンで使用するように指定し、さらに「–gateway」オプションでゲートウェイのIPアドレスを「203.0.113.1」に指定している。

$ quantum subnet-create --tenant-id $TENANT_ID --allocation-pool start=203.0.113.100,end=203.0.113.200 --gateway 203.0.113.1 net1 203.0.113.0/24
Created a new subnet:
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| allocation_pools | {"start": "203.0.113.100", "end": "203.0.113.200"}   |
| cidr             | 203.0.113./24                                        |
| dns_nameservers  |                                                      |
| enable_dhcp      | True                                                 |
| gateway_ip       | 203.0.113.1                                          |
| host_routes      |                                                      |
| id               | 40b33548-40c6-4ff7-8f42-8c592165f054                 |
| ip_version       | 4                                                    |
| name             |                                                      |
| network_id       | 0a3e1b6f-15a8-46dd-afad-937bdeff2cd9                 |
| tenant_id        | Default                                              |
+------------------+------------------------------------------------------+

 作成したネットワークは、quantum net-listコマンドで確認できる。

# quantum net-list
+--------------------------------------+------+--------------------------------------+
| id                                   | name | subnets                              |
+--------------------------------------+------+--------------------------------------+
| 0a3e1b6f-15a8-46dd-afad-937bdeff2cd9 | net1 | 40b33548-40c6-4ff7-8f42-8c592165f054 |
+--------------------------------------+------+--------------------------------------+

 仮想ネットワークの設定が完了したら、実際に仮想マシンを立ち上げてみよう。仮想マシンの立ち上げはnova bootコマンドを利用する。このとき、「–nic -net-id=<仮想ネットワークのID>」オプションで接続する仮想ネットワークを指定する。

$ nova boot --flavor 2 --image 08ec2db3-99ba-4da2-b371-19f741c37b2a --key_name mykey --security_group default --nic net-id=0a3e1b6f-15a8-46dd-afad-937bdeff2cd9 test01
+-------------------------------------+--------------------------------------+
| Property                            | Value                                |
+-------------------------------------+--------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                               |
| OS-EXT-SRV-ATTR:host                | None                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                 |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000052                    |
| OS-EXT-STS:power_state              | 0                                    |
| OS-EXT-STS:task_state               | scheduling                           |
| OS-EXT-STS:vm_state                 | building                             |
| accessIPv4                          |                                      |
| accessIPv6                          |                                      |
| adminPass                           | 7M93LDfPNrza                         |
| config_drive                        |                                      |
| created                             | 2013-02-21T10:17:37Z                 |
| flavor                              | m1.small                             |
| hostId                              |                                      |
| id                                  | 3962778c-2841-435d-8766-b6c2013d743d |
| image                               | cirros-0.3.0-x86_64                  |
| key_name                            | mykey                                |
| metadata                            | {}                                   |
| name                                | test01                               |
| progress                            | 0                                    |
| security_groups                     | [{u'name': u'default'}]              |
| status                              | BUILD                                |
| tenant_id                           | eb7380b7990d4eb8a27bc9a1b80bf386     |
| updated                             | 2013-02-21T10:17:37Z                 |
| user_id                             | 4537dd6a5b7e4609979a7fe26856c522     |
+-------------------------------------+--------------------------------------+

 作成された仮想マシンをnova listコマンドで確認すると、net1という仮想ネットワークに接続され、203.0.113.101というIPアドレスが割り当てられていることが分かる。このIPアドレスを利用し、この仮想マシンに外部ネットワークからアクセスすることが可能だ。

# nova list
+--------------------------------------+--------+--------+---------------------+
| ID                                   | Name   | Status | Networks            |
+--------------------------------------+--------+--------+---------------------+
| 3962778c-2841-435d-8766-b6c2013d743d | test01 | ACTIVE | net1=203.0.113.101  |
+--------------------------------------+--------+--------+---------------------+

 なお、仮想マシンには通常DHCPを使ってIPアドレス割り当てられるのだが、筆者の環境では起動のタイミングによっては正しくIPアドレスが割り当てられない場合があった。その場合、仮想マシンを再起動する、もしくは仮想マシン内で再度DHCPによるIPアドレスの取得を実行させることで正しくIPアドレスを取得できた。

目的に応じて正しいネットワーク構成を

 以上の手順で、Quantumを利用してネットワーク設定を行い、外部ネットワークから接続できる仮想マシンを作成することができた。ただ、この構成では仮想ネットワークによって実現できる動的なネットワーク作成や構成変更などの恩恵を受けることができない。また、この構成では仮想マシンが外部ネットワークに直接接続されているため、OpenStackが提供するメタデータサービスに仮想マシンからはそのままではアクセスできない。OpenStackのドキュメントにはより柔軟なネットワーク構成例がいくつか紹介されているので、そちらを参考にして目的に応じた環境を構築すると良いだろう。