Nutanix AHV では、Open vSwitch で多段のブリッジ チェーンが構成されています。ぱっと見ると様子がわかりにくいので、bash スクリプトでチェーンの確認しやすいように、ブリッジとポートを並び替えてみます。
ちょっと古い投稿ですが、AHV のブリッジ チェーンの様子は下記のような感じです。
今回の内容です。
スクリプトの用意
今回は、下記のようなスクリプトを作成してみました。あまりちゃんとしたスクリプトではないので、自宅 Nutanix での様子見などでご利用いただければと思います。
スクリプトの実行
CVM などから、AHV にログインします。
CVM$ ssh root@192.168.5.1
今回の AHV です。
AHV# cat /etc/nutanix-release el7.nutanix.20191030.415
/tmp など、ファイルを作成できるディレクトリに移動しておきます。
# cd /tmp
スクリプトを、curl や scp などで AHV に配置しておきます。
# curl -O -L -s https://gist.githubusercontent.com/gowatana/d4ab2df0a4b41f45623d320c2c5c555b/raw/format_ahv_open-vswitch.sh
スクリプト ファイルが配置されました。
# ls -l format_ahv_open-vswitch.sh -rw-------. 1 root root 6781 Jul 31 13:12 format_ahv_open-vswitch.sh
実行すると、下記のような感じで ovs-vsctl show を整形して表示できます。
- 最初の「bond」行は、ovs-appctl bond/list を表示していますが、この環境では bond ポートを構成していないので空欄になっています。ちなみにこのマシンの物理 NIC ポートは br0 の eno1 で、普通はこの代わりにボンド ポートになります。
- デフォルトで作成される br0 ブリッジからブリッジ順で表示します。
- 各ブリッジでは、ポートを下記の順で表示しています。
- 前ブリッジからのダウンリンク(~.d)
- ブリッジと同名のローカル ポート
- それ以外のポート(.d、.u、LOCAL 以外のポート)
- 次ブリッジのアップリンク(~.u)
- ついでに、ポート番号と MAC アドレスを表示してあります。(ovs-ofctl show から)
- チェーンが分岐する追加仮想スイッチ(br1)に対応するブリッジは、br0 関連チェーンのあとで表示します。
- 追加機能系のブリッジは、br1 のあとに表示します。とりあえず下記のみを識別しますが、この環境にはないので表示されていません。
- brSpan: ポート ミラーリング(SPAN)のためのブリッジ
- brAtlas: Flow Virtual Networking のオーバーレイ ネットワークなどで利用されるブリッジ
- 出力結果は、カレント ディレクトリの ovs-vsctl_show_formatted.txt ファイルにも保存されます。
[root@NTNX-624676c4-A tmp]# bash ./format_ahv_open-vswitch.sh AHV Host: NTNX-624676c4-A DateTime: 2022 07/31 13:07:38 ============================================================ bond type recircID slaves ============================================================ Bridge br0 Port br0 tag: 20 Interface br0 type: internal Port eno1 Interface eno1 Port vnet1 tag: 20 Interface vnet1 Port vnet2 Interface vnet2 Port br0-dhcp Interface br0-dhcp type: vxlan options: {key=1, remote_ip=192.168.20.52} Port br0-arp Interface br0-arp type: vxlan options: {key=1, remote_ip=192.168.5.2} Port br0.u Interface br0.u type: patch options: {peer=br.dmx.d.br0} 1(eno1): addr:1c:69:7a:63:0d:37 2(vnet1): addr:fe:6b:8d:45:9a:90 3(vnet2): addr:fe:6b:8d:fd:8f:16 4(br0-arp): addr:96:61:fd:59:32:d5 5(br0-dhcp): addr:2a:cf:83:d9:39:3c 6(br0.u): addr:7a:74:6e:15:eb:48 LOCAL(br0): addr:1c:69:7a:63:0d:37 ============================================================ Bridge br.dmx Port br.dmx.d.br0 Interface br.dmx.d.br0 type: patch options: {peer=br0.u} Port br.dmx Interface br.dmx type: internal Port br.dmx.u Interface br.dmx.u type: patch options: {peer=br.nf.d} 1(br.dmx.u): addr:f2:4f:63:11:1d:64 2(br.dmx.d.br0): addr:a6:ef:3d:6c:23:8f LOCAL(br.dmx): addr:e2:6b:2b:41:81:4e ============================================================ Bridge br.nf Port br.nf.d Interface br.nf.d type: patch options: {peer=br.dmx.u} Port br.nf Interface br.nf type: internal Port br.nf.u Interface br.nf.u type: patch options: {peer=br.microseg.d} 1(br.nf.u): addr:26:5c:25:70:55:af 2(br.nf.d): addr:52:b1:8b:44:63:c8 LOCAL(br.nf): addr:e2:01:5e:21:72:4a ============================================================ Bridge br.microseg Port br.microseg.d Interface br.microseg.d type: patch options: {peer=br.nf.u} Port br.microseg Interface br.microseg type: internal Port br.microseg.u Interface br.microseg.u type: patch options: {peer=br.mx.d} 1(br.microseg.u): addr:5e:59:8b:9f:8c:c2 2(br.microseg.d): addr:1e:db:45:6b:ce:72 LOCAL(br.microseg): addr:de:9f:b5:c4:5b:45 ============================================================ Bridge br.mx Port br.mx.d Interface br.mx.d type: patch options: {peer=br.microseg.u} Port br.mx Interface br.mx type: internal Port br.mx.u.br0 Interface br.mx.u.br0 type: patch options: {peer=br0.local.d} 1(br.mx.d): addr:76:24:87:5c:51:d6 2(br.mx.u.br0): addr:0a:e9:de:b1:d5:71 LOCAL(br.mx): addr:d2:64:6f:99:86:42 ============================================================ Bridge br0.local Port br0.local.d Interface br0.local.d type: patch options: {peer=br.mx.u.br0} Port br0.local Interface br0.local type: internal Port tap0 tag: 11 Interface tap0 Port tap1 tag: 20 Interface tap1 1(br0.local.d): addr:fa:6a:b5:ff:6f:72 2(tap0): addr:fe:6b:8d:e9:2b:09 6(tap1): addr:fe:6b:8d:ed:4e:81 LOCAL(br0.local): addr:8a:7e:b4:6a:03:4b ============================================================
通常の ovs-vsctl show の出力結果は、下記のようにブリッジやポートがチェーンの順序で並びません。
[root@NTNX-624676c4-A tmp]# ovs-vsctl show | grep -e Bridge -e Port | nl 1 Bridge br.nf 2 Port br.nf.u 3 Port br.nf 4 Port br.nf.d 5 Bridge br.dmx 6 Port "br.dmx.d.br0" 7 Port br.dmx.u 8 Port br.dmx 9 Bridge "br0.local" 10 Port "tap0" 11 Port "br0.local.d" 12 Port "tap1" 13 Port "br0.local" 14 Bridge br.mx 15 Port br.mx.d 16 Port br.mx 17 Port "br.mx.u.br0" 18 Bridge "br0" 19 Port "eno1" 20 Port "br0.u" 21 Port "vnet1" 22 Port "br0" 23 Port "vnet2" 24 Port "br0-dhcp" 25 Port "br0-arp" 26 Bridge br.microseg 27 Port br.microseg.d 28 Port br.microseg 29 Port br.microseg.u
今回のスクリプトでは、物理 NIC / Bond が接続される br0 ブリッジから、そこそこチェーン順で表示されるはずです。
[root@NTNX-624676c4-A tmp]# bash format_ahv_open-vswitch.sh | grep -e Bridge -e Port | nl 1 Bridge br0 2 Port br0 3 Port eno1 4 Port vnet1 5 Port vnet2 6 Port br0-dhcp 7 Port br0-arp 8 Port br0.u 9 Bridge br.dmx 10 Port br.dmx.d.br0 11 Port br.dmx 12 Port br.dmx.u 13 Bridge br.nf 14 Port br.nf.d 15 Port br.nf 16 Port br.nf.u 17 Bridge br.microseg 18 Port br.microseg.d 19 Port br.microseg 20 Port br.microseg.u 21 Bridge br.mx 22 Port br.mx.d 23 Port br.mx 24 Port br.mx.u.br0 25 Bridge br0.local 26 Port br0.local.d 27 Port br0.local 28 Port tap0 29 Port tap1
AHV 実機以外でのスクリプト実行
ovs-vsctl を実行できる AHV 実機以外でもスクリプトを実行したいことがあります。そこで、あらかじめ保存しておいた「ovs-vsctl show」の出力結果のファイルを指定できるようにしてみました。
たとえば、ovs-vsctl show の出力を output.txt ファイルにリダイレクトで保存しておきます。
AHV# ovs-vsctl show > output.txt
そして、スクリプトの1つめの引数として指定します。
AHV# bash ./format_ahv_open-vswitch.sh output.txt
この場合は、スクリプト実行環境では ovs-vsctl show と揃った ovs-ofctl コマンドが実行できないので、各ブリッジのポート番号と MAC アドレスの表示はしません。
以上。