はじめに
この記事では、OpenStack All-in-Oneマシン上で作成したインスタンスを、Routerを介さずに直接外部ネットワークへ通信させるための設定方法について記載します。
ある程度のネットワーク知識をお持ちの場合、わざわざOpenStack内に外部接続用のRouterを立てずにインスタンスから直接外部ネットワークへ通信できないものか・・と考える方もいらっしゃるかと思います。私も同じことを考えていました。
Kolla-ansibleを使ってOpenStackを作成する際、特定パラメータを設定することで実現可能でしたので、備忘として設定方法を残しておきたいと思います。
前提
前提として、ここで作成したAll-in-Oneマシンは検証などのテスト用途で作成したものであります。本番環境での利用を想定していないので、あくまで参考手順として利用下さい.
簡単ですが、作成環境は以下の通りです。
・サーバー(VM) : 12vCPU / 16GB Mem / 900GB HDD / 2vNIC (VMware ESXi6台上で作成)
・OS : ubuntu 20.4.3 LTS
・kolla-ansible : 13.1.0
・OpenStack Release : xena
手順
Kolla-ansibleでOpenStackのAll-in-Oneマシンを作成する際に設定が必要となるパラメータだけピックアップして記載します。
基本的な作成方法は、Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 を参考として下さい。
1. globals.ymlへのパラメータセット
Kolla-ansibleでOpenStackを作成する前に、globals.ymlへ下記パラメータをセットしておきます。
enable_neutron_provider_networks: "yes"
(任意) ml2_conf.iniへのパラメータセット
vlanを使ってインスタンスが接続するネットワークセグメントを細かく指定したい場合 (=つまりOpenStackマシンのNICをtrunkポート化したい場合) Kolla-ansibleでのdeploy完了後にml2_conf.ini内へ必要パラメータをセットします。
冒頭の基本的な作成方法に従えば、対象ファイルは「/etc/kolla/neutron-server/ml2_conf.ini」に存在するはずです。
なお、OpenStackマシンのNICが接続されているスイッチのポートが「access」ポート設定となっている場合、この手順は不要です。
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan,vlan
[ml2_type_vlan]
network_vlan_ranges = physnet1:[許可したいvlan番号の始まり]:[許可したいvlan番号の終わり]
※許可するVLAN番号の始まりと終わりについては、スイッチ側設定と完全一致 or スイッチ側設定に包含されるよう設定ください。
2.OpenStack上でネットワークを作成
OpenStack上でAdmin権限を持つユーザーにてネットワークを作成します。
※ここではGUIでの設定方法を記載します。
OpenStackへGUIでログイン後、左メニューの Admin -> Network -> Networks と辿り、「+Create Network」から新規ネットワークを作成します。設定内容は下図サンプルを参照ください。下図ではOpenStackマシンのNICがTrunkポートとなっていることが前提となりますが、Provider Network TypeとしてVLAN、Physical Networkとして物理NIC名(physnet1)、Segmentation IDとしてVLAN番号を指定しています。
OpenStackマシンのNICがAccessポートとなっている場合、Provider Network TypeとしてFLAT、Physical Networkとして物理NIC名(physnet1)が指定されていればよいはずです。
なお、External Networkのチェックボックスには必ずチェックを入れましょう。
最後に
公式の手順などを見ても、インスタンスを外部接続させるにはOpenStack内にRouterを作成するのがセオリーのようですが、インスタンスのネットワークパフォーマンスを高めたい場合は、今回のような方法を取るのがよいようです。ある程度ネットワークを知っている方の場合は、今回の設定の方がしっくりくるのではないかと思います。
この記事が、同じ悩みを持つ方の問題解消に役立てれば幸いです。