背景
私は先日、キャリアのモバイル通信のコア設備を担当する部門に配属されました。近年のテレコム業界では、コア設備を OpenShift などのクラウド基盤上で動かす構成がデファクト になりつつあります。
さらに、OpenShift を OpenStack 上の VM にデプロイする、いわゆる 「Shift on Stack」 と呼ばれる構成や、OpenShift をベアメタルに展開する際の ハブクラスタ(ACM)を OpenStack 上に構築 するといったユースケースも一般的です。
こうした背景から OpenStack を学び始めたのですが、実際に調べてみると 最新情報を扱った記事が非常に少なく、正直なところ「枯れた技術」という印象を受けます。
まずは、PackStack を使ってインストールし、一通り動作させるところまでやってみたのですが、ネットワーク周りの設定が非常に複雑で、VM に Floating IP を割り当てて外部と通信させるところで行き詰まりました。
そこで見つけたのが、構築が圧倒的に簡単な OpenStack ディストリビューションである MicroStack です。
今回は、私が実際に構築した「MicroStack の導入手順」を紹介したいと思います。
環境
前提としてMicroStackがインストールできるのはUbuntuのみとなります。
マシンのスペック自体は対して求められませんが、VMを複数立てたい場合はコア数が多いほうが有利です。
| 検証環境 | |
|---|---|
| CPU | Xeon E5 2698 v3 (16C32T) |
| RAM | DDR4 16GB×3 |
| ROM | m.2 SSD 500GB |
| OS | ubuntu22.04 |
インストール手順
ちなみに、インストール手順の大まかな流れはこちらを参考にしました。
1. microstackのパッケージをインストール
sudo snap install microstack --beta
2. 初期化を行う。
この手順でAPIが利用するipアドレスが自動で入るので、サーバーのipを固定しておくのが無難です。
sudo microstack init --auto --control
3. microstackのaliasを設定する
コマンドを打つには、毎回microstack.openstackと打つ必要がありますが、snapに事前にaliasの設定コマンドがあるので以下のコマンドで設定します。
sudo snap alias microstack.openstack openstack
sudo snap alias microstack.nova-manage nova-manage
sudo snap alias microstack.ovs-vsctl ovs-vsctl
sudo snap alias microstack.neutron-openvswitch-agent neutron-openvswitch-agent
これで通常のopenstackと同じようにコマンドが打てるようになる
4. microstack外部ブリッジを設定
floating ipをつけて疎通が取れるようにするためには、物理NICのipを外してbr-exにipをつけなおす必要があります。
以下のスクリプトを実行するとbr-exにipを移すことができます。br-exはmicrostackのセットアップの段階で作成されるので、固定するipや物理NICのインターフェース名などを各々の環境に合わせてください。
#!/bin/sh
# MicroStack 外部ブリッジ自動設定スクリプト
set -e
NIC=enp7s0 #物理NIC
BR=br-ex
IPADDR=10.100.0.250/24 #固定したいip
GATEWAY=10.100.0.1 #デフォゲ
# br-exに物理NICを接続
microstack.ovs-vsctl --may-exist add-port $BR $NIC
# IPを物理NICから削除してbr-exへ
ip addr flush dev $NIC
ip addr add $IPADDR dev $BR
ip link set $BR up
# ルートを設定(存在チェック付き)
ip route replace default via $GATEWAY
再起動時にもこのスクリプトを実行するため、systemdに登録します
以下のunitファイルを/etc/systemd/system配下に作成してください
[Unit]
Description=Setup external bridge (br-ex) for MicroStack
After=snap.microstack.external-bridge.service
Wants=snap.microstack.external-bridge.service
[Service]
Type=oneshot
ExecStart=/home/ubuntu/setup-br-ex.sh #スクリプトの配置pathに置き換え
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
systemdに登録&自動実行
sudo systemctl daemon-reload
sudo systemctl enable setup-br-ex.service
dashboardにアクセス
https://固定したipでアクセスできるhttpだとアクセスできないので注意

デフォルトのユーザー名はadmin
ログインパスワードの確認
sudo snap get microstack config.credentials.keystone-password
ちなみに、microstackが最初に読み込んでいるrcファイルにも記載されています/var/snap/microstack/common/etc/microstack.rc
VMを立ててfloating ipをつける
1. 既存のネットワークやルーターを削除
こちらの手順は必須ではありませんが、消しておいた方が綺麗な状態にできると思うので消す方は、こちらの記事を参考にGUIで削除するか、CLIでも削除できるのでやってみてください。
2. ネットワークの作成
外側ネットワークの作成
openstack network create --external --provider-network-type flat --provider-physical-network physnet1 public
外側サブネットの作成
allocation poolはdhcpで配布しているものとは被らない範囲を指定してください。この範囲でfloating ipの払い出しを行います。
openstack subnet create \
--network public \
--subnet-range 10.100.0.0/24 \
--gateway 10.100.0.1 \
--allocation-pool start=10.100.0.200,end=10.100.0.240 \
--no-dhcp \
public-subnet
内部ネットワーク(VM同士の通信に使う)の作成
openstack network create int-net
内部サブネットの作成
こちらはプライベートipなら何でもOKです。
openstack subnet create \
--network private \
--subnet-range 192.168.10.0/24 \
private-subnet
ルーターの作成、ネットワークの接続
openstack router create router1
openstack router set router1 --external-gateway public
openstack router add subnet router1 private-subnet
3. VMの作成
キーペアの作成
sshでログインする際は、デフォルトでパスワード認証はできないため、キーペアの作成が必要となります
openstack keypair create mykey > mykey.pem
chmod 600 mykey.pem
openstackに登録されているイメージを確認
openstack image list
cirrosが登録されているので一旦これを使用

用意されているflavorの確認
openstack flavor list
openstack server create \
--flavor m1.tiny \
--image cirros \
--network private \
--key-name mykey \
vm1
4. floating ipの付与
先ほど設定した外部ネットワークを指定してfloating ipを作成します
openstack floating ip create ext-net

openstack floating ip listでも確認できます
払い出されたfloating ipをVMに付与します
openstack server add floating ip test-vm 10.100.0.170
openstack server listでfloating ipを確認します。

他のPCなどから疎通がとれるか確認します。セキュリティグループの設定でicmpなどを許可していない場合、疎通できない可能性があるので注意が必要です。デフォルトはすべて許可になっています。

ここまでくれば、疎通がとれるようになるはずです。
ちなみに、先ほど作ったキーペアでsshする際は-iオプションでキーを指定します。
ssh -i mykey.pem user@ip_address
まとめ
ざっくりと導入手順を説明しましたが、基本的にはipを固定してパッケージをsnapで入れれば使えるようになるという非常に簡単なパッケージです。複数台のマシンを使って連携させたいなどの高度なことはできませんが、お試しや一台で十分という場合には便利だと思います。

