OpenStack 配備したインスタンスに外部からアクセス

前回のCentOS7にpackstackを使ってallinone構成でkiloをインストールの続き

インスタンスを外部ネットワークとつなげる設定

openvswitchを使うので、ブリッジとIPの設定を追加する。

サービスLAN用のNICを編集

# vi /etc/sysconfig/network-scripts/ifcfg-ens32
UUID=2d8cd29d-6cd1-4aa3-b6ae-d036eff5429f
DEVICE=ens33
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=no                                                                      

ブリッジの設定

# vi /etc/sysconfig/network-scripts/ifcfg-br-ex

DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.1.41
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS=192.168.1.1
ONBOOT=yes
NM_CONTROLLED=no

選択できるネットワークの種別を追加しておく

# vi /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
# (ListOpt) List of network type driver entrypoints to be loaded from
# Example: type_drivers = flat,vlan,gre,vxlan
type_drivers = flat,vlan,gre,vxlan

再起動して反映

# systemctl restart network

# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:a9:75:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.41/24 brd 192.168.1.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea9:755e/64 scope link 
       valid_lft forever preferred_lft forever
3: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000
    link/ether 00:50:56:a9:2b:55 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::250:56ff:fea9:2b55/64 scope link 
       valid_lft forever preferred_lft forever
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 8a:bc:6a:2b:ee:c3 brd ff:ff:ff:ff:ff:ff
5: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:50:56:a9:2b:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.42/24 brd 192.168.1.255 scope global br-ex
       valid_lft forever preferred_lft forever
    inet6 fe80::98a4:5bff:fe45:f743/64 scope link 
       valid_lft forever preferred_lft forever
6: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether c6:7b:18:37:97:4e brd ff:ff:ff:ff:ff:ff
7: br-tun: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether de:2a:4f:ef:fa:4a brd ff:ff:ff:ff:ff:ff
11: qbr92287c8b-b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether ea:33:00:08:a6:9b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::6cc6:52ff:fec5:c3a1/64 scope link 
       valid_lft forever preferred_lft forever
12: qvo92287c8b-b1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000
    link/ether b2:3f:41:cb:01:72 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b03f:41ff:fecb:172/64 scope link 
       valid_lft forever preferred_lft forever
13: qvb92287c8b-b1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr92287c8b-b1 state UP qlen 1000
    link/ether ea:33:00:08:a6:9b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e833:ff:fe08:a69b/64 scope link 
       valid_lft forever preferred_lft forever
14: tap92287c8b-b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr92287c8b-b1 state UNKNOWN qlen 500
    link/ether fe:16:3e:2e:20:27 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe2e:2027/64 scope link 
       valid_lft forever preferred_lft forever

外部ネットワークとfloating-ipについて

Openstackでは、内部のインスタンスにアクセスするためにfloating-ipという仕組みを利用します。 AWSでいうところのEIPです。

起動したインスタンスには内部のネットワークIP(172.16.8.10など内部サブネットとして作成したネットワークアドレス)を振って起動します。 ここにアクセスするためのIPとして、グローバルなIPが余っているならそれを動的に割り当てることが可能です。

ですが、自宅にそんなグローバルなIPが有るわけないので、自宅のプライベートなIPアドレス空間(192.168.1.0/24)を割当てます。 192.168.1.101 – 192.168.1.150 までのIPをopenstack用に使うことにします。(ルーターDHCP範囲とはずらすこと)

これを踏まえて、外部につなげるための構成でネットワークを作成します。

最終的には以下の図のような構成になります

f:id:watarisein:20151012005716p:plain

OpenStackでは仮想マシンは「内部ネットワーク」のアドレスを付与し 外部との通信は「フローティングIP」を割り当てます。 「フローティングIP」を割り当てることで外部から通信が可能となります。

①外部ネットワークの作成 Openstackにadminでログインします。 「管理」-「システムパネル」-「ネットワーク」を選択します。 「+ネットワークの作成」をクリックします。 「ネットワークの作成」画面が表示されるので「外部ネットワーク」にチェックを入れて「ネットワークの作成」をクリックします。 作成したネットワーク名をクリックします。 「+サブネットの作成」をクリックします。 外部ネットワークに接続するネットワークアドレス、DHCPプール等を設定します。

②内部ネットワークの作成 「管理」-「システムパネル」-「ネットワーク」を選択します。 「+ネットワークの作成」をクリックします。 「ネットワークの作成」画面が表示されるので「外部ネットワーク」にチェックを入れずに「ネットワークの作成」をクリックします。 作成したネットワーク名をクリックします。 「+サブネットの作成」をクリックします。 内部ネットワークに割り当てるネットワークアドレス、DHCPプール等を設定します。

③ルータの作成 「プロジェクト」-「ネットワーク」-「ルータ」を選択します。 「+ルータの作成」をクリックします。 ルータ名を入力します。 作成したルータ名のアクション列の「ゲートウェイの設定」をクリックします。 「外部ネットワークの設定」で①で作成したネットワークを割り当てます。 ルータ名をクリックします。 「+インターフェースの追加」をクリックします。 サブネットに②で作成した内部ネットワークのサブネットを割り当てます。

ファイアウォールの設定 「プロジェクト」-「コンピュート」-「アクセスとセキュリティ」を選択します。 「default」ルールの「ルールの管理」をクリックします。 「ルールの追加」から「ルール」に「ALLICMP」「受信」「CIDR 0.0.0.0/0」を追加します。 「ルールの追加」から「ルール」に「SSH」「CIDR 0.0.0.0/0」を追加します。

仮想マシンイメージの作成 下記URLからダウンロードします。 http://docs.openstack.org/ja/image-guide/content/ch_obtaining_images.html cirros-0.3.3-x86_64-disk.img 「プロジェクト」-「コンピュート」-「イメージ」を選択します。 「+イメージの作成」をクリックします。 「イメージソース」で「イメージファイル」を選択してローカルに保存した「cirros-0.3.3-x86_64-disk.img 」を 選択してアップロードします。

仮想マシンイメージの起動 「プロジェクト」-「コンピュート」-「イメージ」を選択します。 ⑤でアップロードしたciirosのアクション列から「起動」をクリックします。 インスタンス名、イメージ名「ciiros」を選択します。 ネットワークタブから②の内部ネットワークを選択して「起動」をクリックします。 「プロジェクト」-「コンピュート」-「インスタンス」を選択します。 起動したインスタンスのアクションから「Floating IPの割り当て」を選択します。 IPアドレスの+を選択後「IPの確保」を選択します。 外部ネットワークから接続できるIPが割り当てられました。 sshでcirrosに接続します。

# ssh -i cloud.key cirros@192.168.1.102
The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.
RSA key fingerprint is aa:4d:69:8c:dd:ba:e0:17:49:c7:78:d6:7a:d3:95:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.102' (RSA) to the list of known hosts.

cirrosのローカルIPを確認すると、ちゃんと見えた

$ ifconfig
eth0      Link encap:Ethernet  HWaddr FA:16:3E:2E:20:27  
          inet addr:172.16.8.3  Bcast:172.16.8.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe2e:2027/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1400  Metric:1
          RX packets:178 errors:0 dropped:0 overruns:0 frame:0
          TX packets:186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:21789 (21.2 KiB)  TX bytes:18842 (18.4 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)