参考
https://www.rdoproject.org/install/packstack/
基本的に公式の手順にならって進める。
事前準備
/etc/environment に以下追加。
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
network周りの準備
network-scripts インストール,Network Manager 無効化,Firewalld無効化,SELinux無効化。
# dnf install network-scripts
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
teaming設定
NetworkManagerを無効化したため,/etc/sysconfig/network-scripts 配下に以下ファイル作成&編集。
ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
TEAM_CONFIG='{"runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash": ["eth", "ipv4"]}, "link_watch": {"name": "ethtool"}}'
ifcfg-enp1s0f0
NAME=enp1s0f0
DEVICE=enp1s0f0
ONBOOT=yes
TEAM_MASTER=team0
TEAM_PORT_CONFIG='{"prio": 0}'
ifcfg-enp1s0f1
NAME=enp1s0f1
DEVICE=enp1s0f1
ONBOOT=yes
TEAM_MASTER=team0
TEAM_PORT_CONFIG='{"prio":0}'
ifup team0で リンクアップさせ,ステータスを確認。
# ifup tema0
# teamdctl team0 state
setup:
runner: lacp
ports:
enp1s0f0
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 2
runner:
aggregator ID: 5, Selected
selected: yes
state: current
enp1s0f1
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 2
runner:
aggregator ID: 5, Selected
selected: yes
state: current
runner:
active: yes
fast rate: yes
VLAN設定
team0ではVLAN trunk(802.1Q)で複数の外部ネットワークを指定できるようにしたいので,VLAN設定を行う。
# modprobe 8021q
# lsmod | grep 8021q
8021q 40960 0
garp 16384 1 8021q
mrp 20480 1 8021q
外部ネットワーク用にteam0を割り当てるため,ifcfg-team0にOVS用の設定。
DEVICE=team0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br_ex
ONBOOT=yes
BOOTPROTO=none
TEAM_CONFIG='{"runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash": ["eth", "ipv4"]}, "link_watch": {"name": "ethtool"}}'
インストール
RDOリポジトリインストール & サブスクリプションでcodeready-builderを有効化。
# dnf install -y https://www.rdoproject.org/repos/rdo-release.el8.rpm
# subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
パッケージの更新。
# dnf update
Packstack installerのインストール。
# dnf install openstack-packstack
インストール。
# packstack --allinone --provision-demo=n --os-neutron-ovn-bridge-mappings=extnet:br-ex --os-neutron-ovn-bridge-interfaces=br-ex:team0
VLANの設定が入っていなかったのでml2_config.iniを編集。
[ml2]
type_drivers=geneve,flat,vlan #vlan追加
tenant_network_types=geneve
mechanism_drivers=ovn
path_mtu=0
extension_drivers=port_security,qos
[securitygroup]
enable_security_group=True
[ml2_type_geneve]
max_header_size=38
vni_ranges=10:100
[ml2_type_flat]
flat_networks=*
# ↓追記
[ml2_type_vlan]
# VLAN IDを指定しなければ任意のVLANを通せる
network_vlan_ranges=extnet
<略>
ip a で見るといけているっぽい。
10: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UP group default qlen 1000
openstack環境構築
ネットワークの作成
外部ネットワーク作成
まずは外部との接点となる外部ネットワークの作成。今回はスイッチ上でVLAN100で設定している192.168.1.0/24を指定する。(相変わらずOpenstackのネットワークの作成→サブネットの作成という流れに違和感を覚える。あまりネットワークにサブネットをぶら下げるメリットがあるようには思えないのだけど,この設計思想は一体どこからきたんだろうか・・・。)
openstack用に割り当てたレンジ(192.168.1.120~192.168.1.129)をDHCPのレンジで設定する。
$ openstack network create --provider-network-type vlan --external --provider-physical-network extnet --provider-segment 100 --share VLAN100
$ openstack subnet create --network VLAN100 --subnet-range 192.168.1.0/24 --dhcp --gateway 192.168.1.1 --allocation-pool start=192.168.1.120,end=192.168.1.129 --dns-nameserver 1.1.1.1 subnet_V100
内部ネットワーク作成
続いて内部ネットワークの作成。172.16.1.0/24,GWは末尾1,DHCPプールは50~100とした。
$ openstack network create internal01
$ openstack subnet create --network internal01 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 --dhcp --dns-nameserver 1.1.1.1 --allocation-pool start=172.16.1.50,end=172.16.1.100 subnet01
ルータ作成
最後にルータの作成,外部ネットワークの接続,内部ネットワークの接続。
$ openstack router create ext-router
$ openstack router set --external-gateway VLAN100 --enable-snat --fixed-ip ip-address=192.168.1.4 ext-router
$ openstack router add subnet ext-router subnet01
シンプルな構成のできあがり。
イメージ作成
テスト用にcirrosのイメージを作成。ここからwgetで持ってきて,7zを解答。vmdkファイルを結合してqcow2へ変換する。
$ qemu-img convert -O qcow2 ./Kali-Linux-2021.2-vmware-amd64.vmdk kali-linux-2021.2.qcow2
$ openstack image create "cirros" --file ./cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public
インスタンスの起動はダッシュボードからポチポチやって(ここは省略),無事に起動確認。(そういえば,デフォルトパスワードがUS配列の影響をうけないものに変わって嬉しいw)