こんにちは、(株)日立製作所 研究開発グループ サービスコンピューティング研究部の木下です。
サーバーレスが進展している昨今ですが、機械学習やHPC(High Performance Computing)、さらにはSaaS/PaaS/IaaSを支える基盤として、物理サーバ等の物理リソースをオンデマンドで貸し出すベアメタルサービスを利用あるいは運用している方もいらっしゃるのではないかと思います。ベアメタルサービスはOpenStackのIronicやCanonicalのMaaS(Metal as a Service)、さらにはネットワーク的な実現方法など、様々な実現方法が存在します。今回はネットワーク的な実現方法の一つとして、ホワイトボックススイッチとVXLANを用いた実現方法[1][2]について、その実現例をご紹介します。IaaSにおいては仮想スイッチとVXLANを用いてVMを利用者に提供しますが、今回のベアメタルサービスにおいては物理スイッチとVXLANを用いて物理サーバを提供します。私の職場では実験環境を運用しており、今回ご紹介する方法で実際に簡易的なベアメタルサービスを構築して、SaaS/PaaS/IaaSを始めとするその他のサービスに物理リソースを提供しています。ベアメタルサービスを構築しておくと、たくさんある物理リソースの管理もラクになると思います。本投稿ではまず、全体像と基本的な仕組みを説明します。
免責事項:
本内容は(株)日立製作所 研究開発グループの研究内容とは無関係です。(株)日立製作所及び関連する会社の事業とも無関係です。(株)日立製作所及び関連する会社のいかなる組織の考えや意見を代表するものでもありません。あくまで投稿者の個人的且つオープンなプロジェクトであり、当該プロジェクトの成果を上述の通り実験環境において活用しています。
想定するベアメタルサービス
まず、提供するベアメタルサービスの仕様を整理します。利用者には複数の物理リソースを提供するので、物理リソースだけでなく、物理リソース間を接続するネットワークも提供します。ネットワークを提供することで、複数の利用者の間で物理リソースを分離し易くなるメリットもあります。そのネットワークと外のネットワークを接続する手段も必要です。まとめると、今回は以下の3種類を、利用者毎に、利用者毎に分離された形で、オンデマンドに提供します。サービスを分かり易くするために、これらをまとめた論理的なグループを定義します。この論理的なグループを今回はゾーンと呼びます。利用者がゾーンを作成して、ゾーン内に物理リソースを追加、あるいは、ゾーンから物理リソースを削除する形で利用してもらいます。
- 物理リソース
- 物理リソースを接続するためのネットワーク
- ネットワークを外部に接続するためのゲートウェイ
物理リソースは何でも構いませんが、ここでは物理サーバを想定します。
物理リソースを接続するためのネットワークとしては、利用者が物理リソースを管理するための管理ネットワークと、物理リソースを利用して目的の用途に用いるデータネットワークの2種類を考えます。前者は例えば裏LAN、後者は例えば表LANと呼ばれるものです。管理ネットワークとデータネットワークはレイヤ2とし、利用者間でIPアドレス空間の重複を認めることにします。また今回は簡易的なサービスを想定し冗長化は考えません。そのため、物理リソースには物理NICが2つ付いていてそれぞれが管理ネットワークとデータネットワークに接続されることになります。データネットワークについては、利用者自身が複数の用途で論理分離することも想定し、利用者がデータネットワークとしてVLANを利用出来るようにします。利用者がゾーンを作成すると、管理用ネットワークとデータネットワーク用VLAN(便宜上、初期VLANと呼びます)を一つずつ提供し、必要に応じてデータネットワーク用のVLANをオンデマンドで追加してもらいます。また、利用者毎にVLANのIDがかぶらないように、VLANのID空間を利用者毎に分けます。
ネットワークが2種類ですので、ゲートウェイも管理ゲートウェイとデータゲートウェイの2種類を用意します。管理ネットワーク、および、データネットワーク用の初期VLANのそれぞれに接続された管理ゲートウェイとデータゲートウェイを用意します。管理ネットワークとデータネットワークはそれぞれ、利用者間で分離し、IPアドレス空間も重複し得ますので、管理ゲートウェイとデータゲートウェイでNATします。
物理リソースのセットアップについては、利用者自身が実施することを想定します。管理ゲートウェイにおいて、利用者がIPMIを用いて物理サーバのBIOS設定を行い、PXEブート等で物理サーバに好みのOSをインストールしてもらいます。
ホワイトボックススイッチとVXLANを用いた実現方法
物理リソースには2つの物理NICがあるので、それぞれを管理ネットワーク用の物理スイッチの物理ポートとデータネットワーク用の物理スイッチの物理ポートに接続し、管理ネットワーク用の通信とデータネットワーク用のVLANが流れることになります。管理ネットワーク用の物理スイッチとデータネットワーク用の物理スイッチは実際には1つの物理スイッチでも構いませんが、今回は後述する制約事項のために2つに分けます。管理ネットワークの通信とデータネットワーク用のVLANを、物理スイッチにおいてVXLANでカプセル化します。IaaS基盤においては、VM間のVLANを物理サーバ上の仮想スイッチにおいてVXLANでカプセル化しますが、それを物理サーバと物理スイッチでやるだけです。カプセル化の方法はVXLANだけではありませんが、今回は物理スイッチでも比較的利用し易いVXLANを使います。
ちなみに、ベアメタルサービスでは利用者が物理サーバを用いてIaaS基盤等を構築するかもしれません。その際には物理サーバ内に仮想スイッチを設けてVXLANを使うかもしれません。その場合は、利用者のVXLANが流れるデータネットワークのVLANを物理スイッチのVXLANでカプセル化しますので、VXLANが二重にネストされることになります。
物理的な構成
ラック毎に、管理ネットワーク用の物理スイッチとデータネットワーク用の物理スイッチを一つずつ設置して、あとは入れられるだけの物理リソースを設置してそれら物理スイッチに接続します。ラックは複数あり、必要に応じて増えていきますので、物理スイッチ間でファブリック構成します。物理リソースを接続する物理スイッチがリーフスイッチで、それらを束ねるスパインスイッチを設けます。管理ネットワークとデータネットワークがありますので、管理ネットワーク用のリーフ・スパインのファブリックと、データネットワーク用のリーフ・スパインのファブリックを設けることになります。以降、管理ネットワーク用のリーフ側の物理スイッチを管理リーフスイッチ、スパイン側の物理スイッチを管理スパインスイッチと呼び、データネットワーク用のリーフ側の物理スイッチをデータリーフスイッチ、スパイン側の物理スイッチをデータスパインスイッチと呼びます。
管理ネットワークとデータネットワーク用にそれぞれファブリックがありますが、ToRスイッチをリーフスイッチとしてファブリックを構成する一般的なデータセンタネットワークに準じた構成です。
また、これらスイッチを管理するためのネットワークを別途設けます。以降、便宜上これを基盤管理ネットワークと呼びます。
今回は例として、ラックが10本あり、管理スパインスイッチとデータスパインスイッチがそれぞれ2つずつあるものとします。
使用する機器およびソフトウェア
今回は管理リーフスイッチおよびデータリーフスイッチとしてQuanta社のホワイトボックススイッチを、OSとしてCumulus Linuxの3.x系を使います。VXLANとして、Cumulus LinuxのLNV(Lightweight Network Virtualization)を用います。最新のCumulus Linux 4.x系ではLVNはdeprecatedとなり、VXLANはEVPN(Ethernet Virtual Private Network)を用いることになります。私達の環境は古いので今でもLNVを用いています。以降の設定例も古いLNVのものですので、あまり参考にならないと思いますが、イメージだけでも伝われば幸いです。すいません。今後4.x系のEVPNに乗り換えていきます。
LNVはコントローラが不要ですが、VTEP間の通信を確立するためにサービスノードと呼ばれるものが必要です。スパインスイッチでもCumulus Linuxを用いると、スパインスイッチのCumulus Linux上のサービスノードデーモン(vxsnd)がそのあたりをうまくやってくれます。私達の環境では、管理ネットワークについてはスパインスイッチでもCumulus Linuxを、一方でデータネットワークのスパインスイッチにおいてはQuanta社のスイッチに付属のQuanta OSを使いました。ではサービスノードをどうするのかというと、大変ありがたいことにCumulus LinuxはvxsndもOSSとして公開してくださってますので、別途用意したサーバ上でそれを動かしました。これはもちろん推奨される方法ではないと思います。
リーフとスパイン間のファブリックはOSPFで構成します。Cumulus LinuxもQuanta OSもOSPFを使うことが出来ます。
サービスノードの準備
今回はサービスノードデーモンを基盤管理ネットワーク上のサーバで動かします。サービスノードデーモンは上述のVXFLDに含まれてますので、指定の方法でインストールします。root権限は不要です。今回の例では、基盤管理ネットワークは192.168.31.0/24
で、サービスノードデーモンを動かすサーバのIPアドレスは192.168.31.234
とします。
pip install git+https://github.com/CumulusNetworks/vxfld.git
pipでインストールすると、環境によりますが、例えば~/.local/bin
あたりにvxsndがインストールされていると思います。次に適当なディレクトリにvxsnd.confを作成します。今回は~/vxsnd
というディレクトリを作成してその中にvxsnd.confを置きます。設定値は色々とありますが、最低限、以下があればOKのようです。
svcnode_ip = 192.168.31.234 # vxsndを動かしているサーバのIPアドレス
一般ユーザであれば以下を実行すればサービスノードデーモンが動いてくれます。
/path.to/python /home/hoge/.local/bin/vxsnd -d -p /home/hoge/vxsnd/vxsnd.pid -u /home/hoge/vxsnd/vxsnd.sock -c /home/hoge/vxsnd/vxsnd.conf
ちなみに、VXFLDをインストールするとvxsndだけでなく、vxsndctlコマンドもインストールされているはずです。vxsndctlコマンドを使うとvxsndが管理しているVNIとVTEPの対応関係を見れたりします。
/home/hoge/.local/bin/vxsndctl -u /home/hoge/vxsnd/vxsnd.sock fdb
スイッチの設定
LNVの設定は基本的にCumulus Linuxのサンプル通りです。個々のリーフスイッチとスパインスイッチにおいて、ファブリックのためのOSPFの設定を行います。リーフスイッチにはVXLANの設定も行います。リーフスイッチは10台ありますが、以降の例では省略して2台分(リーフスイッチ4、6)のみ掲載しています。
管理スパインスイッチ1の設定は以下の通りです。/etc/frr/frr.conf
にOSPFの設定を追加します。/etc/network/interfaces
にはインタフェースの設定を行います。ループバックインタフェースとスイッチポートはファブリックへの接続を、eth0インタフェースは基盤管理ネットワークへの接続を担います。
router ospf
ospf router-id 0.0.0.201
network 172.20.0.201/32 area 0.0.0.0 # 管理スパインスイッチ1自身用
network 172.21.104.0/30 area 0.0.0.0 # 管理リーフスイッチ4用
network 172.21.106.0/30 area 0.0.0.0 # 管理リーフスイッチ6用
auto lo
iface lo inet loopback
address 172.20.0.201/32
vxrd-src-ip 172.20.0.201
vxrd-svcnode-ip 192.168.31.234
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.201/24
gateway 192.168.31.1
auto swp4 # 管理リーフスイッチ4に接続
iface swp4
address 172.21.104.1/30
mtu 9216
auto swp6 # 管理リーフスイッチ6に接続
iface swp6
address 172.21.106.1/30
mtu 9216
管理スパインスイッチ2の設定は以下の通りです。
router ospf
ospf router-id 0.0.0.202
network 172.20.0.202/32 area 0.0.0.0 # 管理スパインスイッチ2自身用
network 172.22.104.0/30 area 0.0.0.0 # 管理リーフスイッチ4用
network 172.22.106.0/30 area 0.0.0.0 # 管理リーフスイッチ6用
auto lo
iface lo inet loopback
address 172.20.0.202/32
vxrd-src-ip 172.20.0.202
vxrd-svcnode-ip 192.168.31.234
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.202/24
gateway 192.168.31.1
auto swp4 # 管理リーフスイッチ4に接続
iface swp4
address 172.22.104.1/30
mtu 9216
auto swp6 # 管理リーフスイッチ6に接続
iface swp6
address 172.22.106.1/30
mtu 9216
管理リーフスイッチ4の設定は以下の通りです。
router ospf
ospf router-id 0.0.0.158
network 172.20.0.158/32 area 0.0.0.0 # 管理リーフスイッチ4自身用
network 172.21.104.0/30 area 0.0.0.0 # 管理スパインスイッチ1用
network 172.22.104.0/30 area 0.0.0.0 # 管理スパインスイッチ2用
auto lo
iface lo inet loopback
address 172.20.0.158/32
vxrd-src-ip 172.20.0.158
vxrd-svcnode-ip 192.168.31.234 # サービスノードのIPを指定
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.158/24
gateway 192.168.31.1
auto swp47 # 管理スパインスイッチ1に接続
iface swp47
address 172.21.104.2/30
mtu 9216
auto swp48 # 管理スパインスイッチ2に接続
iface swp48
address 172.22.104.2/30
mtu 9216
管理リーフスイッチ6の設定は以下の通りです。
router ospf
ospf router-id 0.0.0.162
network 172.20.0.162/32 area 0.0.0.0 # 管理リーフスイッチ6自身用
network 172.21.106.0/30 area 0.0.0.0 # 管理スパインスイッチ1用
network 172.22.106.0/30 area 0.0.0.0 # 管理スパインスイッチ2用
auto lo
iface lo inet loopback
address 172.20.0.162/32
vxrd-src-ip 172.20.0.162
vxrd-svcnode-ip 192.168.31.234 # サービスノードのIPを指定
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.162/24
gateway 192.168.31.1
auto swp47 # 管理スパインスイッチ1に接続
iface swp47
address 172.21.106.2/30
mtu 9216
auto swp48 # 管理スパインスイッチ2に接続
iface swp48
address 172.22.106.2/30
mtu 9216
データスパインスイッチ1の設定は以下の通りです。
router ospf
router-id 0.0.0.204
network 172.20.0.204 0.0.0.0 area 0.0.0.0 # データスパインスイッチ1自身用
network 172.21.4.0 0.0.0.255 area 0.0.0.0 # データリーフスイッチ4用
network 172.21.6.0 0.0.0.255 area 0.0.0.0 # データリーフスイッチ6用
default-metric 5
default-information originate
データスパインスイッチ2
router ospf
router-id 0.0.0.205
network 172.20.0.205 0.0.0.0 area 0.0.0.0 # データスパインスイッチ2自身用
network 172.22.4.0 0.0.0.255 area 0.0.0.0 # データリーフスイッチ4用
network 172.22.6.0 0.0.0.255 area 0.0.0.0 # データリーフスイッチ6用
default-metric 5
default-information originate
データリーフスイッチ4の設定は以下の通りです。
router ospf
ospf router-id 0.0.0.157
network 172.20.0.157/32 area 0.0.0.0 # データリーフスイッチ4自身用
network 172.21.4.0/30 area 0.0.0.0 # データスパインスイッチ1用
network 172.22.4.0/30 area 0.0.0.0 # データスパインスイッチ2用
auto lo
iface lo inet loopback
address 172.20.0.157/32
vxrd-src-ip 172.20.0.157
vxrd-svcnode-ip 192.168.31.234 # サービスノードのIPを指定
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.157/24
gateway 192.168.31.1
auto swp47 # データスパインスイッチ1に接続
iface swp47
address 172.21.4.2/30
mtu 9216
auto swp48 # データスパインスイッチ2に接続
iface swp48
address 172.22.4.2/30
mtu 9216
データリーフスイッチ6の設定は以下の通りです。
router ospf
ospf router-id 0.0.0.161
network 172.20.0.161/32 area 0.0.0.0 # データリーフスイッチ6自身用
network 172.21.6.0/30 area 0.0.0.0 # データスパインスイッチ1用
network 172.22.6.0/30 area 0.0.0.0 # データスパインスイッチ2用
auto lo
iface lo inet loopback
address 172.20.0.161/32
vxrd-src-ip 172.20.0.161
vxrd-svcnode-ip 192.168.31.234 # サービスノードのIPを指定
auto eth0 # 基盤管理ネットワークに接続
iface eth0 inet static
address 192.168.31.161/24
gateway 192.168.31.1
auto swp47 # データスパインスイッチ1に接続
iface swp47
address 172.21.6.2/30
mtu 9216
auto swp48 # データスパインスイッチ2に接続
iface swp48
address 172.22.6.2/30
mtu 9216
物理サーバの追加
前節の設定は運用中の変更はありません。ここからは、物理リソースを追加する時のVXLAN設定を説明します。以下の例ではゾーンが3つ存在し、ラック4とラック6の物理サーバが下表のように接続されています。
ゾーン | ラック | スイッチ | ポート | サーバ |
---|---|---|---|---|
1 | 4 | 管理/データリーフスイッチ4 | 01 | サーバ4-01 |
10 | サーバ4-10 | |||
12 | サーバ4-12 | |||
6 | 管理/データリーフスイッチ6 | 03 | サーバ6-03 | |
05 | サーバ6-05 | |||
08 | サーバ6-08 | |||
2 | 4 | 管理/データリーフスイッチ4 | 25 | サーバ4-25 |
27 | サーバ4-27 | |||
6 | 管理/データリーフスイッチ6 | 32 | サーバ6-32 | |
34 | サーバ6-34 | |||
37 | サーバ6-37 | |||
39 | サーバ6-39 | |||
3 | 4 | 管理/データリーフスイッチ4 | 41 | サーバ4-41 |
6 | 管理/データリーフスイッチ6 | 41 | サーバ6-41 |
また、ゾーン1にはデータネットワークVLANが2つ(VLAN番号3351、100)、ゾーン2にはデータネットワークVLANが3つ(VLAN番号3344、1000、1010)、ゾーン3にはデータネットワークVLANが1つ(VLAN番号3347)存在します。
この時の個々のスイッチの設定は以下の通りです。
まず管理リーフスイッチ4の設定は以下の通りです。
auto swp1
iface swp1
mtu 9216
auto swp10
iface swp10
mtu 9216
auto swp12
iface swp12
mtu 9216
auto swp25
iface swp25
mtu 9216
auto swp27
iface swp27
mtu 9216
auto swp41
iface swp41
mtu 9216
auto vni1555
iface vni1555
mtu 9166
vxlan-id 1555
vxlan-local-tunnelip 172.20.0.158
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1573
iface vni1573
mtu 9166
vxlan-id 1573
vxlan-local-tunnelip 172.20.0.158
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1898
iface vni1898
mtu 9166
vxlan-id 1898
vxlan-local-tunnelip 172.20.0.158
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1555
iface vtep1555
bridge-ports swp1 swp10 swp12 vni1555
bridge-stp off
auto vtep1573
iface vtep1573
bridge-ports swp25 swp27 vni1573
bridge-stp off
auto vtep1898
iface vtep1898
bridge-ports swp41 vni1898
bridge-stp off
データリーフスイッチ4の設定は以下の通りです。
auto swp1
iface swp1
mtu 9216
auto swp10
iface swp10
mtu 9216
auto swp12
iface swp12
mtu 9216
auto swp25
iface swp25
mtu 9216
auto swp27
iface swp27
mtu 9216
auto swp41
iface swp41
mtu 9216
auto vni1140
iface vni1140
mtu 9166
vxlan-id 1140
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1478
iface vni1478
mtu 9166
vxlan-id 1478
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1676
iface vni1676
mtu 9166
vxlan-id 1676
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1760
iface vni1760
mtu 9166
vxlan-id 1760
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1824
iface vni1824
mtu 9166
vxlan-id 1824
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1849
iface vni1849
mtu 9166
vxlan-id 1849
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1140
iface vtep1140
bridge-ports swp1.3351 swp10.3351 swp12.3351 vni1140
bridge-stp off
auto vtep1478
iface vtep1478
bridge-ports swp25.1010 swp27.1010 vni1478
bridge-stp off
auto vtep1676
iface vtep1676
bridge-ports swp41.3347 vni1676
bridge-stp off
auto vtep1760
iface vtep1760
bridge-ports swp25.1000 swp27.1000 vni1760
bridge-stp off
auto vtep1824
iface vtep1824
bridge-ports swp25.3344 swp27.3344 vni1824
bridge-stp off
auto vtep1849
iface vtep1849
bridge-ports swp1.100 swp10.100 swp12.100 vni1849
bridge-stp off
管理データスイッチ6の設定は以下の通りです。
auto swp3
iface swp3
mtu 9216
auto swp5
iface swp5
mtu 9216
auto swp8
iface swp8
mtu 9216
auto swp32
iface swp32
mtu 9216
auto swp34
iface swp34
mtu 9216
auto swp37
iface swp37
mtu 9216
auto swp39
iface swp39
mtu 9216
auto swp41
iface swp41
mtu 9216
auto vni1555
iface vni1555
mtu 9166
vxlan-id 1555
vxlan-local-tunnelip 172.20.0.162
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1573
iface vni1573
mtu 9166
vxlan-id 1573
vxlan-local-tunnelip 172.20.0.162
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1898
iface vni1898
mtu 9166
vxlan-id 1898
vxlan-local-tunnelip 172.20.0.162
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1555
iface vtep1555
bridge-ports swp3 swp5 swp8 vni1555
bridge-stp off
auto vtep1573
iface vtep1573
bridge-ports swp32 swp34 swp37 swp39 vni1573
bridge-stp off
auto vtep1898
iface vtep1898
bridge-ports swp41 vni1898
bridge-stp off
データリーフスイッチ6の設定は以下の通りです。
auto swp3
iface swp3
mtu 9216
auto swp5
iface swp5
mtu 9216
auto swp8
iface swp8
mtu 9216
auto swp32
iface swp32
mtu 9216
auto swp34
iface swp34
mtu 9216
auto swp37
iface swp37
mtu 9216
auto swp39
iface swp39
mtu 9216
auto swp41
iface swp41
mtu 9216
auto vni1140
iface vni1140
mtu 9166
vxlan-id 1140
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1478
iface vni1478
mtu 9166
vxlan-id 1478
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1676
iface vni1676
mtu 9166
vxlan-id 1676
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1760
iface vni1760
mtu 9166
vxlan-id 1760
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1824
iface vni1824
mtu 9166
vxlan-id 1824
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vni1849
iface vni1849
mtu 9166
vxlan-id 1849
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1140
iface vtep1140
bridge-ports swp3.3351 swp5.3351 swp8.3351 vni1140
bridge-stp off
auto vtep1478
iface vtep1478
bridge-ports swp32.1010 swp34.1010 swp37.1010 swp39.1010 vni1478
bridge-stp off
auto vtep1676
iface vtep1676
bridge-ports swp41.3347 vni1676
bridge-stp off
auto vtep1760
iface vtep1760
bridge-ports swp32.1000 swp34.1000 swp37.1000 swp39.1000 vni1760
bridge-stp off
auto vtep1824
iface vtep1824
bridge-ports swp32.3344 swp34.3344 swp37.3344 swp39.3344 vni1824
bridge-stp off
auto vtep1849
iface vtep1849
bridge-ports swp3.100 swp5.100 swp8.100 vni1849
bridge-stp off
ここで例えば、ラック4の管理/リーフスイッチ4のポート08に接続されているサーバ4-08をゾーン1に追加する場合、以下の設定を追加すれば良いです。追加する物理サーバが接続されているポートを、既存のVTEP設定に追加すれば良いです。削除も同様で、対応するポートを既存のVTEP設定から削除すれば良いです。
管理リーフスイッチ4の追加設定は以下の通りです。
auto swp8 # ポート08を追加
iface swp1
mtu 9216
auto vtep1555
iface vtep1555
bridge-ports swp1 swp8 swp10 swp12 vni1555 # ポート08を追加
bridge-stp off
データリーフスイッチ4の追加設定は以下の通りです。
auto swp8 # ポート08を追加
iface swp1
mtu 9216
auto vtep1140
iface vtep1140
bridge-ports swp1.3351 swp8.3351 swp10.3351 swp12.3351 vni1140 # ポート08を追加
bridge-stp off
auto vtep1849
iface vtep1849
bridge-ports swp1.100 swp8.100 swp10.100 swp12.100 vni1849 # ポート08を追加
bridge-stp off
また例えば、ゾーン1にVLAN200(対応するVNI1900)を追加する場合、以下の設定を追加すれば良いです。VLANに対応するVNIを決めてインタフェースを定義し、そのVNIに対応するVTEPを作成し、既存の物理サーバが接続されているポートを追加すれば良いです。削除も同様です。
データリーフスイッチ4の追加設定は以下の通りです。
auto vni1900
iface vni1900
mtu 9166
vxlan-id 1900
vxlan-local-tunnelip 172.20.0.157
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1900
iface vtep1900
bridge-ports swp1.200 swp8.200 swp10.200 swp12.200 vni1900
bridge-stp off
データリーフスイッチ6の追加設定は以下の通りです。
auto vni1900
iface vni1900
mtu 9166
vxlan-id 1900
vxlan-local-tunnelip 172.20.0.161
mstpctl-bpduguard yes
mstpctl-portbpdufilter yes
auto vtep1900
iface vtep1900
bridge-ports swp3.200 swp5.200 swp8.200 vni1900
bridge-stp off
制約事項
リーフスイッチにおいては、VLANタグの付いていない通信と付いている通信をそれぞれ異なるVXLANでカプセル化出来ると理想的です。しかし私の環境ではうまく出来ませんでした。同じスイッチ内で、VLANタグの付いていない通信のVXLANによるカプセルと、VLANタグの付いている通信のVXLANによるカプセル化を混在させることが出来ないようです。
そこで結局、管理ネットワーク側はVLAN無し、データネットワーク側はVLANのみ、という構成にしました。
まとめ
以上、全体像と基本的な仕組みをご紹介しました。もちろんこのままですと、まだ外のネットワークにも繋がりませんし、物理構成とゾーン構成を踏まえて所定の物理スイッチに所定の設定を手作業で行うのは大変です。VNIのリソース管理も必要です。利用者によるサービスの利用開始から利用廃止までのライフサイクルを属人的に対応するのも大変です。
そこで次回以降は、ゲートウェイや自動化、サービス化、応用についてご紹介します。
参考文献
[1] J. Kinoshita, K. Maeda, H. Yabusaki, K. Akune, M. Noumi, and N. Komoda, “Implementation and Evaluation of VXLAN Gateway-based Data Center Network Virtualization,” Studies in Informatics and Control Journal, Vol.25, No.3, pp.313-322, 2016.
[2] J. Kinoshita, K. Maeda, H. Yabusaki, K. Akune, and N. Komoda, “Virtualizing Service Infrastructure with Hardware Gateway in Data Center,” in Proc. 7th Int. Conf. on Data Communication Networking (DCNET 2016), pp.95-98, 2016.