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 アドレスの表示はしません。
以上。
