2015年11月3日火曜日

Oracle OpenStack を VirtualBox に構築。その8

今回は、Oracle OpenStack R1 でネットワーク構成をしてみます。
Oracle OpenStack R1 の Neutron では、Open vSwitch のプラグインを使用しています。
今回は、Control Node で作業しています。

コマンドで、下記のような環境を作ってみます。


外部接続用ブリッジへの NIC 接続。

まず、OpenStack 環境を外部ネットワークとつなぐつもりの
Open vSwitch ブリッジ「br-ex」に eth3 ポートを接続しておきます。
[root@osctl01 ~]# ovs-vsctl add-port br-ex eth3
[root@osctl01 ~]# ovs-vsctl show
1a22e1fd-4813-415f-8171-f4d18f01e175
    Bridge br-ex
        Port "eth3"
            Interface "eth3"
        Port br-ex
            Interface br-ex
                type: internal
    Bridge br-int
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal
        Port "int-br-eth2"
            Interface "int-br-eth2"
    Bridge "br-eth2"
        Port "eth2"
            Interface "eth2"
        Port "phy-br-eth2"
            Interface "phy-br-eth2"
        Port "br-eth2"
            Interface "br-eth2"
                type: internal
    ovs_version: "1.11.0"

ネットワーク環境構築。

デフォルトで作成される、admin テナントにネットワークを作成していきます。
まだ、ネットワークは何も用意されていない状態です。

今回はコマンドで設定していますが、
わかりやすいので、Horizon ダッシュボードの様子も見てみます。


admin テナントの ID を確認しておきます。
[root@osctl01 ~]# source keystonerc_admin
[root@osctl01 ~(keystone_admin)]# keystone tenant-list
+----------------------------------+----------+---------+
|                id                |   name   | enabled |
+----------------------------------+----------+---------+
| c79c5e2a0174431d88958ebc9d1cb17d |  admin   |   True  |
| 3fb2c4e44c9b423c83ddded0776129a1 | services |   True  |
+----------------------------------+----------+---------+

これから何度か指定するため、admin テナントの ID を変数に入れておきます。
[root@osctl01 ~(keystone_admin)]# tenant_id=c79c5e2a0174431d88958ebc9d1cb17d

外部接続するためのネットワークを「public」という名前で作成します。
[root@osctl01 ~(keystone_admin)]# neutron net-create public --router:external=True --provider:network_type=flat
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | baf9f2cf-c4c9-42d7-8fb3-2a940f83b2e0 |
| name                      | public                               |
| provider:network_type     | flat                                 |
| provider:physical_network | default                              |
| provider:segmentation_id  |                                      |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | c79c5e2a0174431d88958ebc9d1cb17d     |
+---------------------------+--------------------------------------+

public ネットワークに、サブネットを作成します。
[root@osctl01 ~(keystone_admin)]# neutron subnet-create public 192.168.1.0/24 --name public_subnet --enable_dhcp=False --allocation-pool start=192.168.1.120,end=192.168.1.149 --gateway=192.168.1.253
Created a new subnet:
+------------------+----------------------------------------------------+
| Field            | Value                                              |
+------------------+----------------------------------------------------+
| allocation_pools | {"start": "192.168.1.120", "end": "192.168.1.149"} |
| cidr             | 192.168.1.0/24                                     |
| dns_nameservers  |                                                    |
| enable_dhcp      | False                                              |
| gateway_ip       | 192.168.1.253                                      |
| host_routes      |                                                    |
| id               | 3d0639e2-5669-4158-a31d-e0c70d0a7edb               |
| ip_version       | 4                                                  |
| name             | public_subnet                                      |
| network_id       | baf9f2cf-c4c9-42d7-8fb3-2a940f83b2e0               |
| tenant_id        | c79c5e2a0174431d88958ebc9d1cb17d                   |
+------------------+----------------------------------------------------+

こうなります。




ルータを作成します。
[root@osctl01 ~(keystone_admin)]# neutron router-create --tenant-id $tenant_id router01
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| external_gateway_info |                                      |
| id                    | cb9338a4-45ec-4fbe-991e-f18084da689f |
| name                  | router01                             |
| status                | ACTIVE                               |
| tenant_id             | c79c5e2a0174431d88958ebc9d1cb17d     |
+-----------------------+--------------------------------------+

ルータができました。



ルータのゲートウェイを設定します。
[root@osctl01 ~(keystone_admin)]# neutron router-gateway-set router01 public
Set gateway for router router01

ルータが public ネットワークにつながりました。



OpenStack 内部で使用するネットワークを、net01 という名前で作成します。
[root@osctl01 ~(keystone_admin)]# neutron net-create --tenant-id=$tenant_id net01
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 06ab575b-b965-4d58-9b0b-19e5040af590 |
| name                      | net01                                |
| provider:network_type     | vlan                                 |
| provider:physical_network | default                              |
| provider:segmentation_id  | 100                                  |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | c79c5e2a0174431d88958ebc9d1cb17d     |
+---------------------------+--------------------------------------+

あわせて、サブネットを作成します。
[root@osctl01 ~(keystone_admin)]# neutron subnet-create --tenant-id=$tenant_id net01 192.168.100.0/24 --name subnet-net01
Created a new subnet:
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| allocation_pools | {"start": "192.168.100.2", "end": "192.168.100.254"} |
| cidr             | 192.168.100.0/24                                     |
| dns_nameservers  |                                                      |
| enable_dhcp      | True                                                 |
| gateway_ip       | 192.168.100.1                                        |
| host_routes      |                                                      |
| id               | 3b446c54-0224-41e1-8022-f56612a3b03c                 |
| ip_version       | 4                                                    |
| name             | subnet-net01                                         |
| network_id       | 06ab575b-b965-4d58-9b0b-19e5040af590                 |
| tenant_id        | c79c5e2a0174431d88958ebc9d1cb17d                     |
+------------------+------------------------------------------------------+

net01 ネットワークが作成され、サブネットが設定されました。


サブネットをルータに接続します。
[root@osctl01 ~(keystone_admin)]# neutron router-interface-add router01 subnet-net01
Added interface 78fcd88d-c47d-41d3-ac22-567c6e544d12 to router router01.

これでネットワークはいったん完成とします。




ping と SSH でネットワークの接続確認をしたいので、
セキュリティグループへルール追加しておきます。
今回は default グループにルールを追加してしまいます。
[root@osctl01 ~(keystone_admin)]# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

[root@osctl01 ~(keystone_admin)]# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

ネットワークの接続確認。

以前に登録した CirrOS の Glance イメージを使用します。
[root@osctl01 ~(keystone_admin)]# glance image-list
+--------------------------------------+--------+-------------+------------------+----------+--------+
| ID                                   | Name   | Disk Format | Container Format | Size     | Status |
+--------------------------------------+--------+-------------+------------------+----------+--------+
| 0b26fc17-3aa9-4b39-84db-e26ec68a435b | cirros | qcow2       | bare             | 13287936 | active |
+--------------------------------------+--------+-------------+------------------+----------+--------+

Nova インスタンスを起動します。
「--nic」には、先ほど作成した net01 ネットワークの UUID を指定しています。
[root@osctl01 ~(keystone_admin)]# nova boot --flavor 1 --image cirros --nic net-id=06ab575b-b965-4d58-9b0b-19e5040af590 vm01
+--------------------------------------+-----------------------------------------------+
| Property                             | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          | nova                                          |
| OS-EXT-SRV-ATTR:host                 | -                                             |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                             |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000007                             |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | -                                             |
| OS-SRV-USG:terminated_at             | -                                             |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| adminPass                            | E6hdx9MjSWov                                  |
| config_drive                         |                                               |
| created                              | 2015-11-03T12:33:43Z                          |
| flavor                               | m1.tiny (1)                                   |
| hostId                               |                                               |
| id                                   | 7668c1d3-1f50-4041-8085-f5b1b3ee2909          |
| image                                | cirros (0b26fc17-3aa9-4b39-84db-e26ec68a435b) |
| key_name                             | -                                             |
| metadata                             | {}                                            |
| name                                 | vm01                                          |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| security_groups                      | default                                       |
| status                               | BUILD                                         |
| tenant_id                            | c79c5e2a0174431d88958ebc9d1cb17d              |
| updated                              | 2015-11-03T12:33:43Z                          |
| user_id                              | 695d91537c7a4e6fb672e856a6fa5900              |
+--------------------------------------+-----------------------------------------------+

インスタンス「vm01」が起動された状態です。
net01 ネットワークにも接続され、DHCP で IP アドレス(192.168.100.2) が付与されました。


フローティング IP アドレスを払い出しておきます。
今回は、192.168.1.121 が払い出されています。
[root@osctl01 ~(keystone_admin)]# neutron floatingip-create public
Created a new floatingip:

+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 192.168.1.121                        |
| floating_network_id | baf9f2cf-c4c9-42d7-8fb3-2a940f83b2e0 |
| id                  | 5db82a29-e1d7-4968-8bee-2eb9f703c69a |
| port_id             |                                      |
| router_id           |                                      |
| status              | ACTIVE                               |
| tenant_id           | c79c5e2a0174431d88958ebc9d1cb17d     |
+---------------------+--------------------------------------+

インスタンスに、フローティング IP アドレスを割り当てます。
[root@osctl01 ~(keystone_admin)]# nova floating-ip-associate vm01 192.168.1.121

しばらく待つと、vm01 が Running になります。
そして、フローティング IP アドレスがアサインされていることもわかります。
[root@osctl01 ~(keystone_admin)]# nova list
+--------------------------------------+------+--------+------------+-------------+------------------------------------+
| ID                                   | Name | Status | Task State | Power State | Networks                           |
+--------------------------------------+------+--------+------------+-------------+------------------------------------+
| 7668c1d3-1f50-4041-8085-f5b1b3ee2909 | vm01 | ACTIVE | -          | Running     | net01=192.168.100.2, 192.168.1.121 |
+--------------------------------------+------+--------+------------+-------------+------------------------------------+

OpenStack 環境外(今回は VirtualBox のホスト)からの ping も通ります。
これは、Control Node の eth3 を経由しているはずです。
PS C:\Users\gowatana> ping 192.168.1.121

192.168.1.121 に ping を送信しています 32 バイトのデータ:
192.168.1.121 からの応答: バイト数 =32 時間 =5ms TTL=63
192.168.1.121 からの応答: バイト数 =32 時間 =2ms TTL=63
192.168.1.121 からの応答: バイト数 =32 時間 =1ms TTL=63
192.168.1.121 からの応答: バイト数 =32 時間 =3ms TTL=63

192.168.1.121 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 5ms、平均 = 2ms

最初に eth3 を br-ex ブリッジに接続しましたが、
この時点では、br-ex には qg-5a21ae2e-33 というインターフェースも接続されます。
[root@osctl01 ~(keystone_admin)]# ovs-vsctl show
1a22e1fd-4813-415f-8171-f4d18f01e175
    Bridge "br-eth2"
        Port "br-eth2"
            Interface "br-eth2"
                type: internal
        Port "eth2"
            Interface "eth2"
        Port "phy-br-eth2"
            Interface "phy-br-eth2"
    Bridge br-ex        Port "eth3"
            Interface "eth3"
        Port br-ex
            Interface br-ex
                type: internal
        Port "qg-5a21ae2e-33"
            Interface "qg-5a21ae2e-33"
                type: internal
    Bridge br-int
        fail_mode: secure
        Port "tap6dc0b492-bb"
            tag: 2
            Interface "tap6dc0b492-bb"
                type: internal
        Port br-int
            Interface br-int
                type: internal
        Port "int-br-eth2"
            Interface "int-br-eth2"
        Port "qr-2865cb25-d1"
            tag: 2
            Interface "qr-2865cb25-d1"
                type: internal
    ovs_version: "1.11.0"

新たに作成された「qrouter-~」というネットワークネームスペースで
qg-5a21ae2e-33 の IP アドレスを見てみると、
フローティング IP アドレスが割り当てられているのがわかります。
[root@osctl01 ~(keystone_admin)]# ip netnsqrouter-cb9338a4-45ec-4fbe-991e-f18084da689f
qdhcp-06ab575b-b965-4d58-9b0b-19e5040af590
[root@osctl01 ~(keystone_admin)]# ip netns exec qrouter-cb9338a4-45ec-4fbe-991e-f18084da689f ip addr show qg-5a21ae2e-33 18: qg-5a21ae2e-33: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether fa:16:3e:40:9b:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.120/24 brd 192.168.1.255 scope global qg-5a21ae2e-33
    inet 192.168.1.121/32 brd 192.168.1.121 scope global qg-5a21ae2e-33
    inet6 fe80::f816:3eff:fe40:9bda/64 scope link
       valid_lft forever preferred_lft forever

フローティング IP (192.168.1.121)を指定して vm01 に SSH でログインしてみると、
ログインした CirrOS のインスタンスには フローティング IP ではない
実アドレス(今回は 192.168.100.2)が設定されていることがわかります。



以上、普通の OpenStack 操作ですが、
Oracle OpenStack でのネットワーク環境を構成してみる話でした。

0 件のコメント:

コメントを投稿