SoftLayerの無料ベアメタルでOpenStackの学習をする(6) - ISOからのUbuntu Serverの導入と第5章「ストーリーの解説と事前準備」

[前回はこちら](http://qiita.com/orz/items/ad7b23756f290d1dcf61) - [次回はこちら](http://qiita.com/orz/items/5b68ecc57e2afb936330)
***
#これはなに
[「OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門」](http://www.shoeisha.co.jp/book/detail/9784798139784)の実習をSoftLayerの無料ベアメタルで行う記録である。
![OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門](http://www.seshop.com/static/images/product/17681/L.png)

# Ubuntu Server 14.04.02のISOからの導入
5章を進めていくと「5.4.4 踏み台サーバーの起動」でうまくいかなくなった。OS Reloadからの再構築も試したのだがうまくいかない。作業用ネットワークのサブネット10.0.0.0/24がSoftLayerのPrivateに振られている10.0.0.0/8と衝突しているのが悪いのかも知れない。またはUbuntuでは通常使えないrootで安易に作業を進めたのが良くなかったのかもしれない。
本当はちゃんと問題判別をするべきなのだが、無料期間は一ヶ月と限られているし、今回はOpenStackの学習を進めたい。そこで、SoftLayerのプロビジョニングではなく[http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server)からUbuntu ServerのISOをダウンロードし、そこから導入することとした。

SoftLayerはクラウドと言っても好きなISOからOSを導入することができる。
ベアメタルの場合はOS無しをオーダー時に指定することもできる。もちろんSoftLayerの管理外になるので責任はすべてユーザーが負う必要がある。
自分のISOから導入してもSoftLayerからの課金は元々のオーダーの情報を元に行われる。そのため自分のISOイメージから導入するのであればOSは無しか無料のものにしよう。後で使わなくなるオプションは無料のものも含めてすべてはずしておこう。プロヴィジョニング時間が短縮化されるだけではなく、無用な監視によるアラートも発生しなくなる。

SoftLayerにVPNで接続してポータルからKVM Console接続を行う。ベアメタルの場合はIPMIインターフェースに接続される。コンソールからローカルPC上のISOをマウントしてサーバーを再起動した。

![ISOマウント](https://qiita-image-store.s3.amazonaws.com/0/71995/853260de-3245-dfec-cff7-efc8e2e139bb.png)

もちろんISO自体をSoftLayerにアップロードしてcifsなどでマウントしてもいいのだが、(期待では多分)一度だけのことだ。さらに導入にISO全体を使うわけではない。そのため今回は導入自体には時間がかかるが転送の不要なローカルPC上のISOからの導入を選んだ。
時間がかかる以外はローカルマシンへの導入とまったく変わらない。
LANはPublic側だけ構成し手動でアサインされたIPアドレスを設定した。DNSはGoogleの8.8.8.8を設定した。ssh serverを選択し外部から接続できるようにした。
導入後、第2章の手順を再度行い、第5章の準備を行った。<br/>
[以前](http://qiita.com/orz/items/79c5dcc5e0304c0e5337)、GUIが無いという今回の課題にnginxをReverse Proxyとして設定した。この時は、Public/Privareの二つのIPが割り当てられるSoftLayerの環境でPrivare IPだけでHorizonを利用可能したが今回の構成では使えない。代わりにBasic認証で保護することとする。
 
# 第5章 ストーリーの解説と事前準備
第5章から第10章までの支援ファイルはこちら。まとめてgitでダウンロードできる。
https://github.com/josug-book1-materials/chapter05-10
<br/>第5章の支援ファイルはこちらである。
https://github.com/josug-book1-materials/chapter05-10/tree/master/05
<br/>実は第5章のすべてのステップをまとめて行うスクリプトも用意されている。
https://github.com/josug-book1-materials/chapter05-10/blob/master/05/build_chap05.sh
さすがに勉強にならないので、ステップ・バイ・ステップで確認しながら進める。

## 5.1 ストーリーの解説
今回は、すでに構築されているOpenStack環境に追加のテナントとしてSNSサービスを展開するというもの。
展開するアプリは、下記で管理されている。

[https://github.com/josug-book1-materials/sample-app](https://github.com/josug-book1-materials/sample-app)

WEB-APP-DBという3層アプリで、この章では作業用の踏み台サーバーとネットワーク作成を行う。

## 5.2 社内OpenStack環境を利用するための準備
ダッシュボードに接続しログインできることを確認することになっているが、先に進む。
OpenStackのクライアントツールは2章で導入済みなので、環境設定用の openrc を作る。
内容はこの[ファイル](https://github.com/josug-book1-materials/quick-devstack/blob/master/openrc-infra-user)のサブセットがガイドされている。読み込んで環境を設定する。

```
user01@test:~$ cd
user01@test:~$ source openrc
user01@test:~$ env | grep ^OS_
OS_REGION_NAME=RegionOne
OS_PASSWORD=passw0rd
OS_AUTH_URL=http://192.168.100.10:5000/v2.0
OS_USERNAME=snsapp-infra-user
OS_TENANT_NAME=SNSApp
```

「nova list」や「neutron net-list」で応答を確認する。

<pre>
user01@test:~$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
user01@test:~$ neutron net-list
+--------------------------------------+---------+---------------------------------------+
| id                                   | name    | subnets                               |
+--------------------------------------+---------+---------------------------------------+
| 36733654-35d1-47c9-9942-dab9400c52f0 | Ext-Net | 0f824c1a-340f-4d5f-94c0-aee8ae1157c2  |
+--------------------------------------+---------+---------------------------------------+
</pre>

vmを作成していないので「nova list」に内容がないのは当然。Ext-Netは[2章で少し苦労して作った](http://qiita.com/orz/items/bb23d01b3f05b734ae5f)。

## 5.3 アプリケーションが実行可能な仮想マシンイメージの準備
構築に利用する「centos-base」も2章で用意済みである。
<pre>
user01@test:~$ glance image-list --name centos-base
+--------------------------------------+-------------+-------------+------------------+-----------+--------+
| ID                                   | Name        | Disk Format | Container Format | Size      | Status |
+--------------------------------------+-------------+-------------+------------------+-----------+--------+
| 098f948e-e80b-4b1a-8a46-f8d2dd57e149 | centos-base | qcow2       | bare             | 633235456 | active |
+--------------------------------------+-------------+-------------+------------------+-----------+--------+
</pre>

## 5.4 作業用ネットワークと踏み台サーバーの準備
仮想ルーター「Ext-Router」を作成し「Ext-Net」に接続する。

<pre>user01@test:~$ neutron router-create Ext-Router
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| external_gateway_info |                                      |
| id                    | 8fa135bb-9354-442a-a311-cdf7527977fb |
| name                  | Ext-Router                           |
| routes                |                                      |
| status                | ACTIVE                               |
| tenant_id             | 106e169743964758bcad1f06cc69c472     |
+-----------------------+--------------------------------------+

user01@test:~$ neutron router-gateway-set Ext-Router Ext-Net
Set gateway for router Ext-Router
</pre>

作業用ネットワーク「work-net」をつくり、サブネット10.0.0.0/24を割り当てる。ゲートウェイは、10.0.0.254。そこに「Ext-Router」を接続する。「Ext-Router」は「Ext-Lan」と「work-net」の両方に足が出ていることになる。

<pre>user01@test:~$ neutron net-create work-net
Created a new network:
+-----------------+--------------------------------------+
| Field           | Value                                |
+-----------------+--------------------------------------+
| admin_state_up  | True                                 |
| id              | 1fcd9570-8fb4-4929-99c8-94b410b8e1d6 |
| name            | work-net                             |
| router:external | False                                |
| shared          | False                                |
| status          | ACTIVE                               |
| subnets         |                                      |
| tenant_id       | 106e169743964758bcad1f06cc69c472     |
+-----------------+--------------------------------------+

user01@test:~$ neutron subnet-create --ip-version 4 --gateway 10.0.0.254 \
> --name work-subnet \
> --dns-nameserver 8.8.8.8 \
> --dns-nameserver 8.8.4.4 \
> work-net 10.0.0.0/24
Created a new subnet:
+-------------------+--------------------------------------------+
| Field             | Value                                      |
+-------------------+--------------------------------------------+
| allocation_pools  | {"start": "10.0.0.1", "end": "10.0.0.253"} |
| cidr              | 10.0.0.0/24                                |
| dns_nameservers   | 8.8.4.4                                    |
|                   | 8.8.8.8                                    |
| enable_dhcp       | True                                       |
| gateway_ip        | 10.0.0.254                                 |
| host_routes       |                                            |
| id                | 7551e4cf-4451-4f47-9127-c670b718b20b       |
| ip_version        | 4                                          |
| ipv6_address_mode |                                            |
| ipv6_ra_mode      |                                            |
| name              | work-subnet                                |
| network_id        | 1fcd9570-8fb4-4929-99c8-94b410b8e1d6       |
| tenant_id         | 106e169743964758bcad1f06cc69c472           |
+-------------------+--------------------------------------------+

user01@test:~$ neutron router-interface-add Ext-Router work-subnet
Added interface 706d27e1-cc60-49dd-8c4d-366fbb204bf3 to router Ext-Router.
</pre>

「nova keypair-add」で踏み台サーバーにSSHログインするキーペアを作成し、秘密鍵の権限を600にする。

<pre>
user01@test:~$ nova keypair-add key-for-step-server | tee key-for-step-server.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEAs1Bp7q7PJIwDjq1rCN/TW3kA4DUDonM5fUbPmozfgpAxno4U
～～～～～
user01@test:~$ chmod 600 key-for-step-server.pem
</pre>

「neutron security-group-create」でセキュリィグループを作成し、SSH接続を許可するルールを「neutron security-group-rule-create」で加える。

<pre>
user01@test:~$  neutron security-group-create --description "secgroup for step server" sg-for-step-server
Created a new security_group:
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                | Value                                                                                                                                                                                                                                                                                                                         |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| description          | secgroup for step server                                                                                                                                                                                                                                                                                                      |
| id                   | aafb1b5b-23be-4b1d-81fc-4bf6db47dde4                                                                                                                                                                                                                                                                                          |
| name                 | sg-for-step-server                                                                                                                                                                                                                                                                                                            |
| security_group_rules | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "b0fa6c289c53464dacd6a9281088969b", "port_range_max": null, "security_group_id": "aafb1b5b-23be-4b1d-81fc-4bf6db47dde4", "port_range_min": null, "ethertype": "IPv4", "id": "6b4e7646-568c-4abe-87c0-34cf34e812d4"} |
|                      | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "b0fa6c289c53464dacd6a9281088969b", "port_range_max": null, "security_group_id": "aafb1b5b-23be-4b1d-81fc-4bf6db47dde4", "port_range_min": null, "ethertype": "IPv6", "id": "f9ad12f4-f458-423b-a319-446c4471d254"} |
| tenant_id            | b0fa6c289c53464dacd6a9281088969b                                                                                                                                                                                                                                                                                              |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

user01@test:~$ neutron security-group-rule-create --ethertype IPv4 \
> --protocol tcp --port-range-min 22 --port-range-max 22 \
> --remote-ip-prefix 0.0.0.0/0 sg-for-step-server
Created a new security_group_rule:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| id                | ec7bfe4c-6588-485a-a1f4-559ae0396edb |
| port_range_max    | 22                                   |
| port_range_min    | 22                                   |
| protocol          | tcp                                  |
| remote_group_id   |                                      |
| remote_ip_prefix  | 0.0.0.0/0                            |
| security_group_id | 815ad3c0-cdc5-460f-b338-ff34fb535d86 |
| tenant_id         | 106e169743964758bcad1f06cc69c472     |
+-------------------+--------------------------------------+

user01@test:~$ neutron security-group-rule-create --ethertype IPv4 --protocol icmp \
> --remote-ip-prefix 0.0.0.0/0 sg-for-step-server
Created a new security_group_rule:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| id                | df40f228-5c98-4f4d-bbde-8277a647613a |
| port_range_max    |                                      |
| port_range_min    |                                      |
| protocol          | icmp                                 |
| remote_group_id   |                                      |
| remote_ip_prefix  | 0.0.0.0/0                            |
| security_group_id | 815ad3c0-cdc5-460f-b338-ff34fb535d86 |
| tenant_id         | 106e169743964758bcad1f06cc69c472     |
+-------------------+--------------------------------------+
</pre>

次に踏み台サーバーを作成する。
利用するuserdataファイル「userdata_step-server.txt」は[こちら](https://github.com/josug-book1-materials/chapter05-10/blob/master/05/userdata_step-server.txt)。
タイムゾーンをJSTにして、gitを入れて、OpenStackクライアントツールを導入するシェルをgitして実行。さらに、環境設定ファイルを作成して終了。
「nova boot」で準備しておいたCentOSを起動するのだが、その前にこんな感じで接続先の「work-net」のuuidを取り出している。

<pre>
user01@test:~$ function get_uuid () { cat - | grep " id " | awk '{print $4}'; }
user01@test:~$ export MY_WORK_NET=`neutron net-show work-net | get_uuid`
user01@test:~$ env | grep MY_
MY_WORK_NET=1fcd9570-8fb4-4929-99c8-94b410b8e1d6
</pre>

「nova boot」で準備しておいたCentOSを起動。[userdata_step-server.txt](https://github.com/josug-book1-materials/chapter05-10/blob/master/05/userdata_step-server.txt)は~/chapter05-10/05に用意されているので、cdしてから、nova bootを実行した。

<pre>
user01@test:~/chapter05-10/05$ nova boot --flavor standard.xsmall \
> --image "centos-base" \
> --key-name key-for-step-server \
> --security-groups sg-for-step-server \
> --user-data userdata_step-server.txt \
> --availability-zone az1 \
> --nic net-id=${MY_WORK_NET} step-server
+--------------------------------------+----------------------------------------------------+
| Property                             | Value                                              |
+--------------------------------------+----------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                             |
| OS-EXT-AZ:availability_zone          | nova                                               |
| 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                            | otDZkGxK9Prk                                       |
| config_drive                         |                                                    |
| created                              | 2015-03-21T23:12:51Z                               |
| flavor                               | standard.xsmall (100)                              |
| hostId                               |                                                    |
| id                                   | 65d3400d-3467-4563-9ff5-9c0e30c7157e               |
| image                                | centos-base (098f948e-e80b-4b1a-8a46-f8d2dd57e149) |
| key_name                             | key-for-step-server                                |
| metadata                             | {}                                                 |
| name                                 | step-server                                        |
| os-extended-volumes:volumes_attached | []                                                 |
| progress                             | 0                                                  |
| security_groups                      | sg-for-step-server                                 |
| status                               | BUILD                                              |
| tenant_id                            | 106e169743964758bcad1f06cc69c472                   |
| updated                              | 2015-03-21T23:12:51Z                               |
| user_id                              | 98dd78b670884b64b879568215777c53                   |
+--------------------------------------+----------------------------------------------------+
</pre>

StatusがACTIVEになるまで「nova list」を何度か実行する。

<pre>
user01@test:~/chapter05-10/05$ nova list --field name,status,networks
+--------------------------------------+-------------+--------+-------------------+
| ID                                   | Name        | Status | Networks          |
+--------------------------------------+-------------+--------+-------------------+
| 65d3400d-3467-4563-9ff5-9c0e30c7157e | step-server | ACTIVE | work-net=10.0.0.1 |
+--------------------------------------+-------------+--------+-------------------+
</pre>

本書の例では、10.0.0.5が振られていたが、今回の環境では10.0.0.1が振られた。
StatusがACTIVEになっても起動が完了しているわけではない。「nova console-log」でloginプロンプトがでるのを待つ。

<pre>
user01@test:~/chapter05-10/05$ nova console-log --length 10 step-server
Cloud-init v. 0.7.5 finished at Sat, 21 Mar 2015 23:14:50 +0000. Datasource DataSourceConfigDriveNet [net,ver=2][source=/dev/sr0].  Up 71.31 seconds
Starting postfix: [  OK  ]
Starting abrt daemon: [  OK  ]
Starting crond: [  OK  ]
Starting atd: [  OK  ]

CentOS release 6.6 (Final)
Kernel 2.6.32-504.el6.x86_64 on an x86_64

step-server login:
</pre>

起動が完了しログインプロンプトが出ている。[一気に第5章を作成するスクリプト](https://github.com/josug-book1-materials/chapter05-10/blob/master/05/build_chap05.sh)では、こんなコマンドで処理を待っている。

<pre>
wait_instance step-server work-net
</pre>

[ここで定義されている](https://github.com/josug-book1-materials/chapter05-10/blob/master/lib/goodies.sh)ユーティリティfunctionらしい。他にも便利そうなfunctionがあるので、保存しておいてそのうちに使おう。

踏み台サーバーは現在「work-net」だけに接続されていて外部からアクセスできない。本書でも外部ネットワークの「Ext-Net」からFloating IPを払い出して踏み台サーバーに割り当てている。ただ、そのサンプルが「15.126.281.215」。
いくらFloating IPは環境によって異なるといっても、このネットワークはどこから来たのだろう？
第2章を見ると、環境の作成方法で外部ネットのアドレスが違うようだ。
2.1のHP Helion Public Couldを見ると25ページでExt-Netから払い出したFloating IPが15.126.210.72になっている。今回の15.126.281.215のサンプルは、HP Helion Public Couldのものらしい。このレンジ自体、Couldなので毎回変わるらしいし。
2.2のSUSE Couldでは192.168.124.0のネットワークが使われている。
2.3のRDOでは192.168.200.0が外部ネットワークアドレスとなっている。
つまり、これらの値が記載されている場合、今回の環境では192.168.100.0のアドレスに読み替えれば良いようだ。<br/>
Floating IPを払い出す。

<pre>
user01@test:~$ nova floating-ip-create Ext-Net
+-----------------+-----------+----------+---------+
| Ip              | Server Id | Fixed Ip | Pool    |
+-----------------+-----------+----------+---------+
| 192.168.100.131 |           | -        | Ext-Net |
+-----------------+-----------+----------+---------+
</pre>

実際に192.168.100.131が払い出された。踏み台サーバーに割り当てる。割り当て後に確認すると、このアドレスはFixed Ip 10.0.0.1に関連付けられているのが分かる。

```
user01@test:~$ nova floating-ip-associate step-server 192.168.100.131
user01@test:~$ nova floating-ip-list
+-----------------+-----------+----------+---------+
| Ip              | Server Id | Fixed Ip | Pool    |
+-----------------+-----------+----------+---------+
| 192.168.100.131 |           | 10.0.0.1 | Ext-Net |
+-----------------+-----------+----------+---------+

```
踏み台サーバーにFloating IPでログインする。
<pre>user01@test:~$ ssh -i key-for-step-server.pem root@192.168.100.131
[root@step-server ~]#
</pre>

openrcは事前に用意されている。読み込んでOpenStackの操作ができるか確認する。

<pre>
[root@step-server ~]# source openrc
[root@step-server ~]# nova list --field name,networks
+--------------------------------------+-------------+------------------------------------+
| ID                                   | Name        | Networks                           |
+--------------------------------------+-------------+------------------------------------+
| 65d3400d-3467-4563-9ff5-9c0e30c7157e | step-server | work-net=10.0.0.1, 192.168.100.131 |
+--------------------------------------+-------------+------------------------------------+
</pre>



## 5.5 アプリケーション用仮想ネットワークの準備
今回のアプリケーションは3層アプリケーションである。そのためネットワークを3つ作成する。
<pre>
[root@step-server ~]# neutron net-create dmz-net
Created a new network:
+-----------------+--------------------------------------+
| Field           | Value                                |
+-----------------+--------------------------------------+
| admin_state_up  | True                                 |
| id              | 35e4baac-7230-4232-9644-856874dfe8af |
| name            | dmz-net                              |
| router:external | False                                |
| shared          | False                                |
| status          | ACTIVE                               |
| subnets         |                                      |
| tenant_id       | 106e169743964758bcad1f06cc69c472     |
+-----------------+--------------------------------------+
[root@step-server ~]# neutron net-create app-net
Created a new network:
+-----------------+--------------------------------------+
| Field           | Value                                |
+-----------------+--------------------------------------+
| admin_state_up  | True                                 |
| id              | 7d3828af-2da1-4e10-a904-f9e03b28e181 |
| name            | app-net                              |
| router:external | False                                |
| shared          | False                                |
| status          | ACTIVE                               |
| subnets         |                                      |
| tenant_id       | 106e169743964758bcad1f06cc69c472     |
+-----------------+--------------------------------------+
[root@step-server ~]# neutron net-create dbs-net
Created a new network:
+-----------------+--------------------------------------+
| Field           | Value                                |
+-----------------+--------------------------------------+
| admin_state_up  | True                                 |
| id              | ec886dac-29bf-404a-8464-736c948e7c2a |
| name            | dbs-net                              |
| router:external | False                                |
| shared          | False                                |
| status          | ACTIVE                               |
| subnets         |                                      |
| tenant_id       | 106e169743964758bcad1f06cc69c472     |
+-----------------+--------------------------------------+
</pre>

ネットワークにサブネットを割り当てる。

<pre>
[root@step-server ~]# neutron subnet-create --ip-version 4 --gateway 192.168.0.254 \
> --name dmz-subnet dmz-net 192.168.0.0/24
Created a new subnet:
+-------------------+--------------------------------------------------+
| Field             | Value                                            |
+-------------------+--------------------------------------------------+
| allocation_pools  | {"start": "192.168.0.1", "end": "192.168.0.253"} |
| cidr              | 192.168.0.0/24                                   |
| dns_nameservers   |                                                  |
| enable_dhcp       | True                                             |
| gateway_ip        | 192.168.0.254                                    |
| host_routes       |                                                  |
| id                | c19bf6c8-ab26-4e5a-8189-027c45768402             |
| ip_version        | 4                                                |
| ipv6_address_mode |                                                  |
| ipv6_ra_mode      |                                                  |
| name              | dmz-subnet                                       |
| network_id        | 35e4baac-7230-4232-9644-856874dfe8af             |
| tenant_id         | 106e169743964758bcad1f06cc69c472                 |
+-------------------+--------------------------------------------------+
[root@step-server ~]#  neutron subnet-create --ip-version 4 --no-gateway \
> --name app-subnet app-net 172.16.10.0/24
Created a new subnet:
+-------------------+--------------------------------------------------+
| Field             | Value                                            |
+-------------------+--------------------------------------------------+
| allocation_pools  | {"start": "172.16.10.1", "end": "172.16.10.254"} |
| cidr              | 172.16.10.0/24                                   |
| dns_nameservers   |                                                  |
| enable_dhcp       | True                                             |
| gateway_ip        |                                                  |
| host_routes       |                                                  |
| id                | 0a129689-d549-4759-93cb-79dee7ddbef6             |
| ip_version        | 4                                                |
| ipv6_address_mode |                                                  |
| ipv6_ra_mode      |                                                  |
| name              | app-subnet                                       |
| network_id        | 7d3828af-2da1-4e10-a904-f9e03b28e181             |
| tenant_id         | 106e169743964758bcad1f06cc69c472                 |
+-------------------+--------------------------------------------------+
[root@step-server ~]# neutron subnet-create --ip-version 4 --no-gateway \
> --name dbs-subnet dbs-net 172.16.20.0/24
Created a new subnet:
+-------------------+--------------------------------------------------+
| Field             | Value                                            |
+-------------------+--------------------------------------------------+
| allocation_pools  | {"start": "172.16.20.1", "end": "172.16.20.254"} |
| cidr              | 172.16.20.0/24                                   |
| dns_nameservers   |                                                  |
| enable_dhcp       | True                                             |
| gateway_ip        |                                                  |
| host_routes       |                                                  |
| id                | 8fb7ea2d-eba6-4fdb-aa8e-618a1546d80e             |
| ip_version        | 4                                                |
| ipv6_address_mode |                                                  |
| ipv6_ra_mode      |                                                  |
| name              | dbs-subnet                                       |
| network_id        | ec886dac-29bf-404a-8464-736c948e7c2a             |
| tenant_id         | 106e169743964758bcad1f06cc69c472                 |
+-------------------+--------------------------------------------------+
</pre>

以前作った仮想ルーターExt-Routerをdmz-subnetに接続する。

<pre>
[root@step-server ~]# neutron router-interface-add Ext-Router dmz-subnet
Added interface b1d0f782-e160-411b-a71d-4d97e1b2e5e4 to router Ext-Router.
</pre>

現在の仮想ネットワークの一覧はこちら。

<pre>
[root@step-server ~]# neutron net-list
+--------------------------------------+----------+-----------------------------------------------------+
| id                                   | name     | subnets                                             |
+--------------------------------------+----------+-----------------------------------------------------+
| 1fcd9570-8fb4-4929-99c8-94b410b8e1d6 | work-net | 7551e4cf-4451-4f47-9127-c670b718b20b 10.0.0.0/24    |
| 35e4baac-7230-4232-9644-856874dfe8af | dmz-net  | c19bf6c8-ab26-4e5a-8189-027c45768402 192.168.0.0/24 |
| 36733654-35d1-47c9-9942-dab9400c52f0 | Ext-Net  | 0f824c1a-340f-4d5f-94c0-aee8ae1157c2                |
| 7d3828af-2da1-4e10-a904-f9e03b28e181 | app-net  | 0a129689-d549-4759-93cb-79dee7ddbef6 172.16.10.0/24 |
| ec886dac-29bf-404a-8464-736c948e7c2a | dbs-net  | 8fb7ea2d-eba6-4fdb-aa8e-618a1546d80e 172.16.20.0/24 |
+--------------------------------------+----------+-----------------------------------------------------+
</pre>

# Basic 認証をかけたNginxのReverse ProxyでHorizonへのアクセス

[以前](http://qiita.com/orz/items/79c5dcc5e0304c0e5337)のnginx Reverse Proxy構成では、Privare IPだけでHorizonを利用可能した。今回の構成ではnginxにBasic認証をかけることとする。かけ方は[こちら](http://easyramble.com/nginx-basic-auth.html)を参考にした。

第2章で使ったapache2が起動しているなら停止する。nginxとapache2-utilsを導入する。apache2-utilsには「htpasswd」コマンドが含まれている。

<pre>
$ sudo service apache2 stop
$ sudo apt-get install nginx
$ sudo apt-get -y install apache2-utils
</pre>

「htpasswd」コマンドでユーザーとパスワードを設定する。

<pre>
user01@test:/etc/nginx$ sudo htpasswd -c .htpasswd osuser01
New password:
Re-type new password:
Adding password for user osuser01
</pre>

/etc/nginx/conf.dに今回はproxy.confという名前で下記を作成する。

<pre>
server {
  listen 80;
  server_name [Public IP];
  location /  {
    auth_basic "Input ID/PASS";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://192.168.100.10/;
  }
}
</pre>

nginxを開始する。restartなのは停止中でも実行中でも開始できるからである。

<pre>
user01@test:~$ sudo service nginx restart
</pre>

http://[Public IP]/ にアクセスするとBasic認証の情報を聞いてくる。htpasswdで設定した内容を入力する。
次に、Horizonの認証が求められるので、今度は今回のOpenStack環境用に設定されている「snsapp-infra-user / passw0rd」を入力する。
ネットワークトポロジーと確認すると、下記のように状況が確認できる。

![ネットワークトポロジーイメージ](https://qiita-image-store.s3.amazonaws.com/0/71995/ddd4c480-eaa8-0204-b20b-edc41b64c9d1.png)

***
何とか第5章が完了した。次回からはスピードアップしたい。
***
[前回はこちら](http://qiita.com/orz/items/ad7b23756f290d1dcf61) - [次回はこちら](http://qiita.com/orz/items/5b68ecc57e2afb936330)