【OpenStack(Stein)自宅お試し用】Windows10 VirtualBox CentOS7.6

#はじめに
とりあえず自宅でOpenStackを試してみたい人向けです。
自宅以外で使用する場合はセキュリティの設定に充分ご注意ください。
テスト用インスタンスを起動して、sshで接続できるまでを書きました。
#環境
・PC：Intel Core i5-8400  Memory 16GB
・ホスト：Windows10 Pro(64bit) 1809 + VirtualBox 6.0.10
・ゲスト：CentOS7.6 64bit(1810)

構成は以下になります
![stein_nw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/7cc791bf-8602-5c8b-2704-a67c4457ec3d.png)


#手順メモ
##VirtualBOX
・メインメモリ
システム→マザーボード
8192MBに設定

・プロセッサー
システム→プロセッサー
2に設定

・ネットワーク
割り当て：ブリッジネットワーク
高度→プロミスキャストモード：すべて許可
当方の環境ではプロミスキャストは「すべて許可」にしないと後述で設定するルータやテスト用インスタンスに接続できなかった
##ゲストOS
インストール：
[CentOS-7-x86_64-DVD-1810.iso](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso)を「最小構成」でインストール

以下、すべて「root」ユーザでログインし設定を行います

###初期設定
nmtuiでネットワーク設定を行います

```
# nmtui
```
■Edit a connection
当方はenp0s3に以下を設定
・IPv4(Manual)
　Addresses:192.168.11.67/24
　Gateway:192.168.11.254
　DNS servers(1):192.168.11.254
  DNS servers(2):8.8.8.8
・IPv6はIgnore

Automatically connectにチェック

■Set system hostname
ホスト名：stein007（ご自由に）

設定の反映と確認

```
# systemctl restart network
# ip a
[結果]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:0e:3c:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.67/24 brd 192.168.11.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 2404:7a80:8100:8a00:a00:27ff:fe0e:3cb6/64 scope global mngtmpaddr dynamic
       valid_lft 2591868sec preferred_lft 604668sec
    inet6 fe80::a00:27ff:fe0e:3cb6/64 scope link
       valid_lft forever preferred_lft forever
```

ここから先はputtyやteratermから接続します

SELINUX無効

```
# sed -i -e "s/^SELINUX=enforcing$/SELINUX=disabled/g" /etc/selinux/config
```
再起動

```
# reboot
```

vimのインストール(必須ではありません)

```
# yum install -y vim
```

###packstackインストール
ほぼRDOの公式を参考にしています
[https://www.rdoproject.org/install/packstack/](https://www.rdoproject.org/install/packstack/)


/etc/environment編集

```
# echo "LANG=en_US.utf-8" >> /etc/environment
# echo "LC_ALL=en_US.utf-8" >> /etc/environment
```

firewalld　無効・停止
NetworkManager　無効・停止
network　有効・開始

```
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
```
packstackをインストールします

```
# yum install -y centos-release-openstack-stein
# yum install -y yum-utils
# yum-config-manager --enable openstack-stein
# yum update -y
# yum install -y openstack-packstack
```

packstackのオプションはこちらを参考にしました
[https://www.rdoproject.org/networking/neutron-with-existing-external-network/]
(https://www.rdoproject.org/networking/neutron-with-existing-external-network/)
オプション中の
--default-password=password
は自宅用なのでパスワードをすべて「password」に設定するため追加しました
  
当方の環境ではインストール終了まで30分ほどかかりました

```
# packstack --allinone --provision-demo=n --default-password=password --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:enp0s3 --os-neutron-ml2-type-drivers=vxlan,flat

(途中省略)

 **** Installation completed successfully ******

Additional information:
 * Parameter CONFIG_NEUTRON_L2_AGENT: You have choosen OVN neutron backend. Note that this backend does not support LBaaS, VPNaaS or FWaaS services. Geneve will be used as encapsulation method for tenant networks
 * A new answerfile was created in: /root/packstack-answers-20190727-210406.txt
 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
 * File /root/keystonerc_admin has been created on OpenStack client host 192.168.11.67. To use the command line tools you need to source the file.
 * To access the OpenStack Dashboard browse to http://192.168.11.67/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
 * The installation log file is available at: /var/tmp/packstack/20190727-210404-5GSq8L/openstack-setup.log
 * The generated manifests are available at: /var/tmp/packstack/20190727-210404-5GSq8L/manifests
```
後でログインするdashboardのurl(ここでは「[http://192.168.11.67/dashboard](http://192.168.11.67/dashboard)」）が表示されていることを確認します


この時点で当方のネットワークはこのような状態でした

```
[root@stein007 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f7:7f:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.67/24 brd 192.168.11.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2404:7a80:8100:8a00:a00:27ff:fef7:7f17/64 scope global mngtmpaddr dynamic
       valid_lft 2591822sec preferred_lft 604622sec
    inet6 fe80::a00:27ff:fef7:7f17/64 scope link
       valid_lft forever preferred_lft forever
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:d9:97:39:fa:71 brd ff:ff:ff:ff:ff:ff
4: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether ca:f9:55:1a:fe:4c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::c8f9:55ff:fe1a:fe4c/64 scope link
       valid_lft forever preferred_lft forever
5: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a6:24:b7:65:b6:4b brd ff:ff:ff:ff:ff:ff
[root@stein007 ~]#
```


###ネットワーク設定変更
一応ifcfg-enp0s3を退避（必須ではありません）

```
# cp -p /etc/sysconfig/network-scripts/ifcfg-enp0s3 /var/tmp
```

ifcfg-br-exを作成
(IPADDR以下の値はifcfg-enp0s3と同じものを設定します）

```
# vim /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.11.67
PREFIX=24
GATEWAY=192.168.11.254
DNS1=192.168.11.254
DNS2=8.8.8.8
```
元からあるifcfg-enp0s3を編集

```
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=enp0s3
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
```

ここで当方は一旦再起動しました

``` 
# reboot
```

###externalネットワーク作成
ネットワーク名：external_network（ご自由に）
サブネット名：public_subnet（ご自由に）
allocation-pool：192.168.11.90～192.168.11.100（ルーターやFloating IPで使用するIPアドレスの範囲です）

```
# source /root/keystonerc_admin
# neutron net-create external_network --provider:network_type flat --provider:physical_network extnet  --router:external
# neutron subnet-create --name public_subnet --enable_dhcp=False --allocation-pool=start=192.168.11.90,end=192.168.11.100 --gateway=192.168.11.254 external_network 192.168.11.0/24
```

ここで作成したexternalネットワークをダッシュボードで確認してみます
前述のpackstackコマンドのところで確認したurl「[http://192.168.11.67/dashboard](http://192.168.11.67/dashboard)」
をブラウザに入力し、ユーザー名は「admin」パスワードは「password」を入力します
![stein001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/a86f665b-b7c9-c331-45c5-4ded629df396.png)

ログインするとこのような画面になると思います
![007-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/a4ca43e7-f926-f8ea-6f44-9d18ad45a7c4.png)

ネットワークトポロジーを確認します
「プロジェクト」→「ネットワーク」→「ネットワークトポロジー」
![ext001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/ff1b0834-55a7-5f26-67b7-17c9d1b90aaf.png)

作成したexternalネットワークを確認します
「プロジェクト」→「ネットワーク」→「ネットワーク」
![ext002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/0ef80030-4650-360a-18b8-e22821b02ce7.png)



###Internalネットワーク作成
InternalネットワークはこのままGUIで作成しました


「プロジェクト」→「ネットワーク」→「ネットワーク」→「ネットワークの作成」
■ネットワーク
ネットワーク名：internal_network(ご自由に）
チェックボックスは全てチェックしました
「次へ」をクリックします
![int001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/b5785233-d6fb-7367-aacd-5974ce7b4dfd.png)



■サブネット
サブネット名：private_subnet(ご自由に）
ネットワークアドレス：172.16.0.0/24(ご自由に）
他はデフォルトのまま「次へ」をクリックします
![int002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/dc2c3dc0-9d54-9b93-88f1-3df46814b5a9.png)



■サブネットの詳細
ここはデフォルトのまま「作成」をクリックします
![int003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/fe5b6fad-6e44-4c87-f5ac-c8d8088c9588.png)


internal_networkが追加されました
![int004-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/c3032465-6c39-f434-e685-6873fced064b.png)



ネットワークトポロジーにinternal_networkが追加された状態になっていると思います
![int005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/4bb14c33-bd11-fc71-9a13-4f871b8a3fc9.png)



###ルーターの作成
「プロジェクト」→「ネットワーク」→「ルーター」→「ルーターの作成」
ルーター名：myRouter（ご自由に）
外部ネットワーク：external_network
「ルーターの作成」をクリックします
![router001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/5e1d3cf6-8045-2c21-20a6-313134f4750b.png)



ルーターが追加されました
![router002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/468c7901-9afc-9e4c-15b8-02e9a478d25e.png)



作成したルーター名をクリックし「インターフェース」タブに移動し「インターフェースの追加」
サブネット：internal_networkを選択し「送信」をクリックします
![router003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/a3dafb09-a0fc-a7fc-9fb7-a534af90f916.png)


ルーターにinternal_networkのインターフェースが追加されました
![router004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/c5d249ae-172c-c42d-0b50-941528cd691a.png)


ネットワークトポロジーにルーターが追加され、各ネットワークと接続された状態になっていると思います
![router005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/edcb0e5b-0bbd-6051-0adb-820f9d352be5.png)


###セキュリティグループ作成
後でテスト用のインスタンスを作成しますが、その時の疎通確認のため
ICMPとsshの受信を許可するセキュリティグループを作成します
「プロジェクト」→「ネットワーク」→「セキュリティグループ」→「セキュリティグループの作成」
名前：all_ICMP_ssh（ご自由に）
「セキュリティグループの作成」をクリックします
![007-secgrp-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/38c1dd6b-1ca4-48a8-640b-dac2717c8c33.png)

「ルールの追加」で受信方向のICMPをすべて許可し「追加」をクリックします
![007-secgrp-002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/bbd22fa0-bd51-9ba9-085b-f40ce1dfda46.png)

「ルールの追加」で受信方向のsshをすべて許可し「追加」をクリックします
![007-secgrp-003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/4d12001b-c27f-cb1f-44e2-9750d6e20a6b.png)

セキュリティグループにICMPとsshが追加されました（下の2行）
![007-secgrp-004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/e3a7fa4d-f7fd-a733-9a92-dca89bf4dd3e.png)



###インスタンスの作成
事前にイメージを登録するので、当方はここにアクセスして
https://docs.openstack.org/ja/image-guide/obtain-images.html
次のイメージをダウンロードしました
cirros-0.4.0-x86_64-disk.img

「プロジェクト」→「コンピュート」→「イメージ」→「イメージの作成」
イメージ名：test-image（ご自由に）
ファイル：事前にダウンロードしたイメージファイル
形式：QCOW2-QEMUエミュレーター
他はデフォルトのまま「イメージの作成」をクリックします
![007-image-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/e594f404-7d50-4bb9-7318-3339403b203f.png)

![007-image-003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/10be23de-83bd-e9cb-b22b-809816d1532d.png)

この後、当方では上図のようにステータスが数分待っても「保存中」のままでしたが、一旦ほかの階層（例えば1つ上の「インスタンス」や1つ下の「キーペア」等）をクリックしてからまたイメージに戻ると下図のようにステータスが「稼働中」に変更されていました
![007-image-004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/46d988f9-c346-8cc7-8df1-d5e700297d94.png)


###インスタンスの起動
「プロジェクト」→「コンピュート」→「インスタンスの起動」
■「詳細」
インスタンス名：test-instance（ご自由に）
「次へ」をクリックします
![007-instance-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/ba7daf4a-728a-db80-a615-47b94aa3ee46.png)

■「ソース」
下段の「利用可能」に先ほど作成したイメージ（test-image）が表示されているので、
右端の「↑」（上矢印）をクリックすると、「割り当て済」にイメージが移動します
「次へ」をクリックします
![007-instance-002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/be7c9815-2af9-c562-e4ea-9852fe5352f7.png)


■「フレーバー」
「利用可能」に表示されている、「m1.tiny」の右端の「↑」（上矢印）をクリックすると、「割り当て済」に「m1.tiny」が移動します
「次へ」をクリックします
![007-instance-003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/240a7a44-16c8-9197-207b-928b99de93a9.png)

■「ネットワーク」
「利用可能」に表示されている、「internal_network」の右端の「↑」（上矢印）をクリックすると、「割り当て済」に「internal_network」が移動します
「次へ」をクリックします
![inst001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/e371ad6c-befc-78bf-576f-d6f5b36c570f.png)


■「ネットワークのポート」は何もせず「次へ」をクリックします
■「セキュリティグループ」
「利用可能」に表示されている、先ほど作成した「all_ICMP_ssh」の右端の「↑」（上矢印）をクリックすると、「割り当て済」にイメージが移動します
「default」右端の「下」（下矢印）をクリックし、「利用可能」に「default」を移動します
「インスタンスの起動」をクリックします
![007-instance-010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/4bf0e9eb-3fde-c6a4-4ef4-b9da440c3c42.png)

本来はキーペアを作成して公開鍵認証でインスタンスとssh接続を行うのが常套手段だと思いますが、お試し用のため割愛しています。また別の機会があれば。。。

しばらくすると、ステータスが「稼働中」になると思います
![inst002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/a3abb6a8-903f-376a-9de7-ba13c6a1d4c6.png)

右側のアクションから「Floating IPの割り当て」をクリックします
確保済みのFloadting IPアドレスはありま．．．の右側の「＋」をクリックします
![inst003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/ade9f693-1ea7-b38c-8231-a95b49ab80f8.png)

プールは「external_network」を選択し、「IPの確保」をクリックします
![inst004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/10750ab8-b81f-d669-b04e-0e1909cf7367.png)


当環境では192.168.11.93がFloating IP用に確保されました。IPを割り当てるポートは先ほど作成したインスタンスを選択し「割り当て」をクリックします
![inst005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/05bdb5ba-de6d-5ee3-df71-71e593241f43.png)

インスタンスのIPアドレスに割り当てられたFloating IP(192.168.11.93)が追加されました
![inst006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/d2778f71-51e6-ab95-4648-d1ed204efd4a.png)

ネットワークトポロジーにインスタンスが追加された状態になっていると思います
![inst009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/0f507d2a-dbc3-42ea-2393-a6eca02b8834.png)



作成したインスタンス名をクリックし「ログ」のタブを開きます
![inst007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/f7a10839-aef8-f092-3eda-e6abbdc2c75e.png)


下のほうにユーザ(cirros)とパスワード(gocubsgo)の情報がありますので、Floating IP(192.168.11.93)にsshで接続します

![inst008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467580/acd59323-a7a6-7d7c-ac91-4eab2da4f3ea.png)
接続できました！！
  
  
  
2019/08/05 誤字訂正
2019/09/17 誤字訂正