NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix AHV の仮想スイッチ入門。(Meetup #33)

東京での Nutanix Community Meetup #33 で話した内容です。
AHV の仮想スイッチの実態は GUI で確認しにくいので、図示してみました。
ちなみに Nutanix の新機能には AHV の仮想スイッチに依存するものもあります。

Nutanix バイブルでは下記のあたりです。

https://nutanixbible.jp/#anchor-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF-112

AHV の仮想スイッチ構成

AHV でも他のハイパーバイザと同様に、VM の vNIC を接続する仮想スイッチが必要です。

f:id:gowatana:20181117181542p:plain

AHV では Open vSwitch を利用しています。
VM が接続する仮想スイッチとして、Open vSwitch による「br0」という名前のブリッジが作成されます。

f:id:gowatana:20181117182154p:plain

 br0 ブリッジには、アップリンクポートが「br0-up」という名前で作成され、AHV の物理ポート(名前は eth0 ~)が接続されます。br0-up は Bonding ポートで、複数の物理ポートによる冗長構成となります。

ちなみに、商用版 Nutanix のアプライアンスでは、10 Gbps NIC と 1Gbps NIC を両方もつモデルもあります。しかしスピードの異なるポートを同一の Bond ポートに含めるわけにはいかないので、10G のポートだけを br0 に接続した状態に Bonding 構成を変更するのが理想形です。

一方、ユーザ VM(UVM / もしくは単に VM)の vNIC は、tap デバイス(tap0 ~)として br0 に接続されます。

f:id:gowatana:20181117182221p:plain

AHV 自身には、br0 ブリッジに「br0」というポートが作成されていて、そのポートで物理マシン外部との通信をします。これが ESXi でいうところの VMkernel ポートにあたります。

f:id:gowatana:20181117182240p:plain

 CVM も、物理マシン外部と通信するために vNIC を br0 ブリッジに接続します。これは UVM とは異なる名前(vnet0 ~ vnet2)で作成されています。このポートは、CVM のゲスト OS 側では eth0 ~ eth2 と認識されます。

f:id:gowatana:20181117182250p:plain

CVM と AHV は、おもにストレージ接続のために、ローカルスイッチとして「virbr0」ブリッジを作成します。これは Open vSwitch ではなく、Native Linux Bridge によるものです。

このローカルスイッチには、AHV 側は virbr0-nic というポート、CVM 側は vnet1(CVM のゲスト OS では eth1 と認識)で接続します。

f:id:gowatana:20181117182323p:plain

AHV で物理ポートを物理的に分離して利用した場合は、追加のブリッジを作成する必要があります。これは 1Gbps の NIC を利用したり、10Gbps NIC が 4本ある場合に 2本ずつ Bond ポートを分割したり、といったケースで作成します。

追加ブリッジ / アップリンク Bond ポートの名前は、一般的にブリッジを「br1」、そのアップリンク Bond ポートを「br1-up」にします。

f:id:gowatana:20181117232523p:plain

VM / CVM の通信経路

ユーザ VM(にインストールされたゲスト OS)による通信は、Open vSwitch を経由します。物理マシン外部との通信でも、物理マシン内部の別の VM の通信でも、Open vSwitch を経由します。

f:id:gowatana:20181117182449p:plain

VM の vNIC には、Prism で作成した「ネットワーク」(Acropolis で管理されるネットワーク)を必ず指定することになります。 これは ESXi でのポートグループに近いものです。

「ネットワーク」作成時には VLAN ID を指定できます。そして、VM を起動したときに vNIC の tap に「ネットワーク」で指定してある VLAN ID のタグが付与されます。

f:id:gowatana:20181117182502p:plain

AHV の仮想スイッチは、ルーティング機能をもちません。そのため、vNIC にそれぞれ異なる VLAN ID のネットワークを付与した VM 同士で通信したい場合は、AHV より外部のネットワークにあるルータなどでルーティングをする必要があります。

f:id:gowatana:20181117182513p:plain

一方、VM から vDisk への I/O もネットワークを経由します。そのときの iSCSI による通信は、ローカルスイッチ経由となります。 この通信は、ユーザ VM の vNIC は経由せず(ゲスト OS から見ると、ネットワーク I/O ではなくディスクへの I/O)、AHV と CVM との通信となります。

f:id:gowatana:20181117182523p:plain

Nutanix では、データを 2つ以上に冗長化します。これは CVM 同士の通信になり、ローカル スイッチを通らず Open vSwitch を経由します。

たとえば CVM は、VM による vDisk への書き込みデータを受けた場合(ローカル スイッチ経由)も、他の CVM に複製(Open vSwitch 経由)します。

f:id:gowatana:20181117182548p:plain

最近の AOS では、CVM の管理通信(データ複製なども含む)を、Prism の Web アクセスや API アクセスなどから独立させる「Network Segmentation」ができるようになっています。

この機能を有効化した場合、管理通信(backplane)のために CVM と AHV に仮想ポートが追加されます。この通信では、AHV 側ポートとして「br0-backplane」、CVM 側ポートとして「vnet2」(CVM のゲスト OS では eth2 と認識)が利用されます。

ただし、この機能は CVM の通信を VLAN で論理分割するものです。分離した backplane 通信は、他の通信と同様に br0 を経由します。また、分離したネットワークで利用する IP アドレスは、ネットワークアドレスをもとにした自動付与になります。

個人的には、backplane 通信の物理分割ができるわけでもないわりにネットワーク構成が複雑化するので、特に分離要件がない場合は、デフォルトのままの Network Segmentation がないネットワーク構成がシンプルでよいかなと思います。

f:id:gowatana:20181117182558p:plain

新機能と AHV の仮想スイッチ

AOS 5.5 のあたりの AHV から、ブリッジがチェーン構成に(図の右側のように)なっています。

AHV では、Open vSwitch の操作で、CVM の manage_ovs という独自コマンドを利用しますが、このコマンドはブリッジチェーンの 有効 / 無効 を意識することなく操作できるようになっています。また、ブリッジ チェーンは、manage_ovs で無効にすることも可能で、その場合は従来のブリッジ構成に戻ります。(br0、br1・・・のみの構成)

Nutanix Flow マイクロセグメンテーションは AHV のみで利用可能ですが、チェーン途中のブリッジに OpenFlow ルールが設定されたりします。また、サード パーティ ベンダによる AHV 連携するネットワーク機能(NF)もこのあたりを利用します。(たとえば、IDS / IPS / ネットワーク監視 など)

f:id:gowatana:20181117182639p:plain

ブリッジのチェーン構成は、具体的には下記投稿のようになっています。
投稿は少し前のバージョンである AOS 5.5 相当の Nutanix CE によるものですが、最新のバージョンでも同様です。

おまけ

AHV / CVM のネットワーク構成確認で役立つコマンドについて。

  • ifconfig、ip addr show、ip link show などでIP や MAC を確認して紐づける。(AHV / CVM / Linux ゲストで実行する)
  • Open vSwitch のブリッジ、ポート確認は ovs-vsctl show など。(AHV で実行する)
  • ローカルスイッチの確認は brctl show。(AHV で実行する)

なお、ブリッジ設定変更では基本的に CVM 独自の manage_ovs コマンドを利用しますが、このコマンドでは詳細な構成情報は隠蔽されています。そこでトラブルシュートなどでは ovs-vsctl など Open vSwitch の管理コマンドを利用することになります。

スライドは下記。

https://1drv.ms/p/s!AnlE-3oEWaHsz35mTPK4hRB4x11k

以上。

 

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。