OpenStackを学ぶ必要があり、まずはいろいろと試す環境を構築するため、WindowsノートPCにAll-in-one(RDO)インストールで環境構築。その際のメモです。
流れは、Win7 PCにVirtual BoxでCentOSを導入し、Mitakaを導入。その後、GlanceでFedoraのImageを登録し、テストインスタンスを作成し、外部ネットワークにアクセスできるところまでを確認。
順調にいって、3~4時間、実際はいろいろハマるので、1日~2日はかかると思われる。
導入したPCのスペック
- ノートPC
- CPU: Corei7 2.9GH, 2コア
- メモリ: 16GB
- ディスク: 512GB SSD
- OS: Windows 7 64bit
OpenStack環境の構成
- Virtual BoxにてWindows 7上にCentOS7のVMを1台構築
- OpenStackはRed HadのディストリビューションRDOを利用
- Controller, Compute, Networkノードをすべて1台のマシンに導入(All-in-one構成)
- 二つのネットワークをVirtual Boxで作成(ネットワーク構成ガイド)
- Provider Network
- 外部アクセス用ネットワーク
- 10.0.2.0/24 (Virtual BoxのNATネットワーク)
- OpenStackのVMに与えるFloating IPはこのネットワークから与える
- Management Network
- Controller/Compute/Networkノードが所属する管理サーバー用ネットワーク
- 外部にアクセスできないネットワーク
- 192.168.56.0/24(Virtual Boxのホストオンリーネットワーク)
- Provider Network
1. Virtual BoxでのVM作成
こちらを参考にVMを作成。
VMの設定は下記の通り(Virtual Boxでの設定順)
1.「新規作成」し、下記の設定でVMを作成
- メモリ: 8GB
- 仮想ディスク: 100GB, VDI, 可変
2.ホストオンリーネットワークアダプタの作成(Virtual Box側の設定)
ファイル → 環境設定 → ネットワーク でホストオンリーネットワークのタブで作成
- 名前: 適当に
- IP: 192.168.56.1
- ネットマスク: 255.255.255.0
- DHCPは無効とする
3.CPU数の設定(VMの設定)
- VM設定パネルで「システム」を選択し、プロセッサーのタブで設定
- 2コアのCPUなので、2コアまで使用するように設定
4.ネットワークアダプタの設定(VMの設定)
ネットワークアダプタは下記の二つ。ホストOS(Windows)から、ゲストOS(CentOS)にアクセスでき、かつ、CentOSから外部ネットワークにアクセスできる構成とした。
- NAT
- デフォルト
- VM(CetnOS7)が、外部ネットワークに接続するためのNATを行うアダプタ
- Virtual Box(Win)のデフォルトでは10.0.5.0/24が割り当てられる
- Provider Network
- ホストオンリー
- ゲストOS(CentOS)とホストOSの間で通信するためのネットワークアダプタ
- 192.168.56.1/24を設定
- プロミスキャスモードを「すべて許可」に設定。(重要、ネストされたOpenStack上のVMが外部と通信するために必要な設定)
- Management Netowrk
CentOS 7のインストール
1. CentOSダウンロード
- CentOS 7.2 をダウンロード: ダウンロード先
- Minimal Installで良い
2. VMの光学ドライブにCentOSのImage Fileをセット
VMの設定から「ストレージ」を選択し、ISOファイルをセット
3. VMを起動し、インストール実施
VMを起動すると、CentOSのインストーラーが自動で起動するので、ガイドに従って、インストール。こちらを参照。
- 言語: English
- Date & Time: Tokyo/Asia
- キーボード: Japanese
- Install タイプ: Minimal
- rootのパスワードをセットし、新規Userを作成
インストール後、CentOSを起動。
CentOSの設定
OpenStackインストール前に、ネットワークの設定やFirewall無効化、OSのUpdate等を実施。
1. ネットワークの設定
1.1. NICの確認
enp0s3(NAT), enp0s8(ホストオンリー)の二つが認識されていることを確認
$ sudo ip addr
1.2. NICの設定
/etc/sysconfig/network-scripts/にある、ifcfg-enp0s3, ifcfg-enp0s8を下記の通り編集
[ifcfg-enp0s3]
DHCPでIPが割り振られるように設定
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
[ifcfg-enp0s8]
固定IPをセット。192.168.56.100とし、OpenStackの各サービスのエンドポイントはこのIPを使用する。
TYPE=Ethernet
BOOTPROTO=static
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.56.100
NETMASK=255.255.255.0
1.3. ネットワークの設定確認
ネットワークをリスタートし、設定内容を確認。その後、VMから外部へ接続が可能となるので、pingで確認。
また、ここまで設定できていると、TeraTerm等でSSH接続可能なので、SSH接続も確認する。
$ systemctl restart network.service
$ ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:d8:ae:9d brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 86134sec preferred_lft 86134sec
inet6 fe80::a00:27ff:fed8:ae9d/64 scope link
valid_lft forever preferred_lft forever
$ ip addr show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:88:36:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.100/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe88:3655/64 scope link
valid_lft forever preferred_lft forever
$ ping yahoo.co.jp
PING yahoo.co.jp (183.79.135.206) 56(84) bytes of data.
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=43 time=38.8 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=2 ttl=43 time=37.9 ms
2. CentOS Update
OSを最新の状態にし、reboot。
$ yum -y update
$ shutdown -r now
3. NTPのインストール
$ yum -y install ntp
$ systemctl start ntpd
$ systemctl enable ntpd
4. カーネルパラメータの変更
/etc/sysctl.conf ファイルを編集して、以下のパラメーターを追加
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
設定を反映。
$ sysctl -p
5. SELINUXの無効化
/etc/selinux/configを編集して、enforcing をpermissiveに変更
SELINUX=permissive
6. Network Managerの無効化
$ systemctl disable NetworkManager
$ systemctl stop NetworkManager
RDOでのOpenStackのインストール
RDOのquick start guideを元に、OpenStackをインストールする。
1. RDOリポジトリのセットアップ
$ yum install -y https://rdoproject.org/repos/rdo-release.rpm
2. Packstack Installer セットアップ
$ yum install -y openstack-packstack
3. Answer file作成
$ packstack --gen-answer-file=answer.txt
4. Answerfileの編集
デフォルトでインストールされないサービスを必要に応じて、インストールするように設定
CONFIG_MANILA_INSTALL=y
CONFIG_SAHARA_INSTALL=y
CONFIG_HEAT_INSTALL=y
CONFIG_TROVE_INSTALL=y
各サービスのエンドポイントで使用されるIPアドレスを、管理用ネットワークのNICのIPアドレスに変更。
(Packstackで自動作成された、Answer fileでは、一つ目のNIC:enp0s3のIPアドレス(10.0.2.15)がデフォルトで設定される。
今回の構成では、二つ目のNIC:enp0s8のIPアドレス(192.168.56.100)を設定する。)
vi エディタで下記のように置換。
:%s/10.0.2.15/192.168.56.100/gc
各サービスのパスワードを変更。デフォルトのままでも良く、Answer Fileに記載されているので、わからなくなってもあとから確認は可能。
5. OpenStackのインストール
下記のコマンドを実行し、OpenStackをインストール。30分~1時間でインストールが完了。
$ packstack --answer-file=answer.txt
6. OpenStack Dashboardの確認
下記にアクセスして、User ID: admin、パスワードはAnswer Fileで設定したパスワードでLogin。
adminのパスワードは~/keystonerc_admin
に書かれているので、確認可能。
http://192.168.56.100/dashboard/
7. 各サービスのステータス確認
下記コマンドで、インストールしたOpenStackの各サービスのステータスがAliveであることを確認する。(OpenStackのコマンドラインツールでOpenstackを操作するために、admin用の環境変数を読み込み、ステータスを確認。)
$ source keystonerc_admin
$ openstack-status
8. 仮想ブリッジ: br-ex の設定
RDOでのOpenStackインストール直後は、インスタンスが外部ネットワークにアクセスするルートが設定されていないので、設定する。Open vSwitchで仮想ブリッジ:br-exを作成し、外部ネットワークに繋がっているenp0s3を接続するように設定する。
ifcfg-enp0s3をコピーして、ifcfg-br-exを作成。
cp ifcfg-enp0s3 ifcfg-br-ex
ifcfg-enp0s3を下記のように設定。
TYPE=OVSPort
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ifcfg-br-exを下記のように設定。OVSの仮想ブリッジにDHCPでIPを割り当てるため、
OVSBOOTPROTO, OVSDHCPINTERFACESを設定。
TYPE=OVSBridge
OVSBOOTPROTO=dhcp
OVSDHCPINTERFACES=enp0s3
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs
設定後、ネットワークをリスタート。
$ systemctl restart network.service
仮想ブリッジbr-exにNIC enp0s3が接続されていることを確認。
$ ovs-vsctl show
・・・
Bridge br-ex
Port br-ex
Interface br-ex
type: internal
Port "enp0s3"
Interface "enp0s3"
ovs_version: "2.4.0"
テストインスタンスの作成
admin ユーザーでテストインスタンスを作成し、SSHで外部からアクセスできること、また、インスタンス内部から外部ネットワークにアクセスできることを確認する。
1. 既存ネットワークの削除
RDOでインストールすると、172.24.4.228/28というPublicネットワークが作成されていたが、ホストOSのWindowsからインスタンスにアクセスできるように、10.0.2.0/24をPublicネットワークとするように作り変える。
既存のPublic Networkには、demo tenantのルーター(router1)に接続されているため、このルーターとの接続を解除し、その後、Public Networkを削除する。削除は、adminでログインし、ルーター、および、ネットワークの設定画面(「管理」→「ルーター」「ネットワーク」)で行う。
2. Public Networkの作成
同じ画面で、下記の通り外部接続用のPublic Networkを作成する。
プロジェクトのネットワーク設定画面(「プロジェクト」→「ネットワーク」→「ネットワーク」)にて、サブネットを追加する。
- サブネット
- ネットワーク名: Public_subnet
- ネットワークアドレス: 10.0.2.0/24
- ゲートウェイIP: 10.0.2.15
- サブネット詳細
- DHCP有効
- IP割当プール: 10.0.2.20,10.0.2.50 (とりあえず、20個)
- DSN IP: 8.8.8.8(Googleのネームサーバー)
3. Private Network作成
インスタンスに割り当てるプライベートネットワークを作成する。設定は下記のように行った。
- ネットワーク
- ネットワーク名: private
- サブネット作成にチェック
- サブネット
- ネットワーク名: private_subnet
- ネットワークアドレス: 192.168.1.0/24
- ゲートウェイIP: 192.168.1.1
- サブネット詳細
- DHCP有効
- IP割当プール: 192.168.1.10,192.168.1.30 (とりあえず、20個)
- DSN IP: 8.8.8.8(Googleのネームサーバー)
4. 仮想ルーター作成
ルーター設定画面で、ルーターを新規作成。その後、「ゲートウェイの設定」でPublic Networkを、「インターフェースの追加」でPrivate Networkを接続する。
ネットワークトポロジーを見ると下記のように、ルーターにPublic/Private Networkが接続されていることが分かる。
5. OS Imageの登録
Glanceに起動するインスタンスのImageを登録。FedoraのOpenStack向けの公式Imageをダウンロードして使用することにする。
ダウンロード後、イメージ管理画面で、「イメージの作成」ボタンからImageを登録する。
6. セキュリティーグループの設定
デフォルトで用意されている「default」にセキュリティーポリシーを追加し、ICMPとSSHの受信を許可するようにする。(これを行わないと、インスタンスにPing, SSH接続ができない。)
「コンピュート」→「アクセスとセキュリティー」→「セキュリティーグループ」とたどり、「ルールの管理」にてALL ICMPとSSHを追加。
7. キーペアの追加
SSH接続するためのキーペアを追加する。Horizon上でキーペアを追加し、Windows PCへダウンロードするとWindows上でキーの変換を行う必要があるので、CentOS上でキーペアを作成し、OpenStackへ登録するようにする。ホームディレクトリに秘密鍵が作成されていることを確認。
$ source keystonerc_admin
$ nova keypair-add admin > admin_key.pem → キーペア名: admin, 秘密鍵名: admin_key.pem
$ ls -l
-rw-r--r--. 1 root root 1688 Apr 17 23:40 admin_key.pem
-rw-------. 1 root root 1184 Feb 26 14:37 anaconda-ks.cfg
-rw-------. 1 root root 48576 Apr 17 20:26 answer.txt
-rw-r--r--. 1 root root 1684 Apr 17 22:44 demo_key.pem
-rw-------. 1 root root 233 Apr 17 23:40 keystonerc_admin
-rw-------. 1 root root 233 Apr 17 22:43 keystonerc_demo
8. インスタンス作成
「コンピュート」→「インスタンス」より「インスタンスの起動」を押して、起動するインスタンスのパラメータを設定し、インスタンスを作成。
- ソース
- Fedora
- フレーバー
- m1.small
- ネットワーク
- Private
- セキュリティーグループ
- default
- キーペア
- admin
9. Floating IPの設定
作成したインスタンスのメニューから「Floating IPの割り当て」を選択し、IPの割当を行う。Private IPがNAT変換され、割り当てられたPublic IPで外部に接続しにいくことになる。
結果、インスタンスには下記のIPが割り振られた。
- Floating IP
- 10.0.2.22
- Private IP
- 192.168.1.13
10. テストインスタンスへのアクセス
CentOS上から秘密鍵を使ってSSHで接続可能であることを確認する。Fedora公式ImageのUser IDは「fedora」が設定されているので、このIDでLogin。その後Login後、pingでインスタンスから外部にアクセス可能なことを確認。
$ ping 10.0.2.22
PING 10.0.2.22 (10.0.2.22) 56(84) bytes of data.
64 bytes from 10.0.2.22: icmp_seq=1 ttl=63 time=0.990 ms
64 bytes from 10.0.2.22: icmp_seq=2 ttl=63 time=0.559 ms
64 bytes from 10.0.2.22: icmp_seq=3 ttl=63 time=1.36 ms
$ chmod 600 admin_key.pem → パーミッションを変更しないとSSHで接続できない。
$ ssh -i admin_key.pem fedora@10.0.2.22 → 公式イメージのUser IDは「fedora」
[fedora@test ~]$ → ログイン成功
[fedora@test ~]$ ping www.yahoo.co.jp
PING www.g.yahoo.co.jp (182.22.71.251) 56(84) bytes of data.
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=1 ttl=43 time=21.6 ms
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=2 ttl=43 time=21.9 ms
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=3 ttl=43 time=21.3 ms
RDOでAll-in-oneインストールといえど、いろいろはまりどころがある印象でした。特に仮想ネットワーク周りの知識が弱かったので、ネットワーク周りの設定に苦労しました。