■はじめに
「ネットワーク仮想化」をセールスやマーケティングではなく、エンジニアとしてアーキテクチャを正しく理解することが、今回のブログシリーズ「ネットワーク仮想化をネットワークの基本から理解する」のテーマです。「第2回 論理スイッチ(VXLAN) –Layer2 の世界」では、ネットワーク仮想化環境のL2 ネットワークサービスを見ていきます。
論理スイッチは、VMware NSX の提供するL2 ネットワークサービスです。オリジナルのイーサネットフレームにハイパーバイザでVXLAN ヘッダを付加することで、物理ネットワーク上にオーバレイのL2 ネットワークサービスを提供します。論理スイッチを使用することで、物理ネットワークに手を加えることなくL2 ネットワークを追加できます。
論理スイッチの設定はNSX の管理画面から行います。物理サーバや物理ネットワーク機器数十台にまたがるようなL2 ネットワークを構成する際も、個々の物理コンポーネントに設定を行う必要はありません。
上記の通りGUI から簡単に設定を行うことができますが、APIを介した設定も可能となり、クラウドコントローラと連携することで設定作業を自動化できます。
■物理ネットワークにおけるL2スイッチのアーキテクチャ
論理スイッチのアーキテクチャの説明に入る前に、物理ネットワーク環境の説明を行います。物理ネットワーク環境において、端末間での通信を制御するテーブルは2種類あります。端末側で管理するARPテーブルと、物理スイッチ側で管理するMAC アドレステーブルです。
ARP テーブルは、IPアドレスとMAC アドレスを対応させたテーブルとなり、各エンドの端末が保持しています。端末は、ARP テーブルを参照し、通信を行いたい宛先IP アドレスに対応したMAC アドレス宛てにパケットを送信します。
> arp –a(端末Aで実施) インターネット アドレス 物理アドレス 種類 172.16.10.2(端末BのIP) BB-BB-BB-BB-BB-BB(端末BのMAC) 動的
MAC アドレステーブルは、端末のMAC アドレスと物理スイッチのポート番号を対応させたテーブルとなっており、物理スイッチが管理しています。物理スイッチは、受信したフレームの送信元MAC アドレス情報を学習することで、テーブルをダイナミックに作成していきます。MAC アドレステーブルはVLAN 毎に管理されており、物理スイッチは受信したパケットの宛先MAC アドレスに対応したポートにパケットを転送します。
> show mac address-table(物理スイッチ上で実施) Vlan Mac Address Type Ports ---- ----------- -------- ----- 10 AAAA.AAAA.AAAA (端末AのMAC) DYNAMIC Gi1(ポート1番) 10 BBBB.BBBB.BBBB (端末BのMAC) DYNAMIC Gi2(ポート2番)
このテーブルにエントリがない宛先MAC アドレスのフレームを受信した場合、物理スイッチは対応するVLAN に所属する全てのポートにフレームを転送します。MAC アドレステーブルのエントリを管理することで、トラフィックを抑制することが可能になります。物理スイッチが提供しているL2 ネットワークサービスを、ネットワーク仮想化環境では論理スイッチとして実装しています。論理スイッチのアーキテクチャについて、「テーブル」に注目する形でこの後見ていきます。
■ネットワーク仮想化環境における論理スイッチのアーキテクチャ
ネットワーク仮想化環境において、端末の送信したフレームをカプセル化(VXLAN ヘッダを付加すること)するポイントを、VTEP(VXLAN Tunnel Endpoint)と呼んでいます。VTEP の理解が論理スイッチ理解の第1歩です。
VTEP の実態は、vSphere の視点で見ると、ハイパーバイザの中にある仮想スイッチ(分散スイッチ VDS)上に作成されるVMkernel ポートになります。VMkernel ポートはIP アドレスを持ち、このIP アドレス間でVXLAN のオーバレイ通信を行います。VTEP は分散スイッチ上にVMkernel ポートとして展開されるため、論理スイッチの実装には分散スイッチが必須となります。
ポイント1:VTEPの実態は、ハイパーバイザ上に作成される仮想スイッチのVMkernel ポート
VTEP 間をVXLAN でオーバレイすることにより構成される論理スイッチの実態は、vSphere の視点で見ると、仮想スイッチ上に作成されるポートグループになります。サーバ仮想化環境では、物理ネットワークのVLAN ID に対応する形でポートグループ作成をするケースがありますが、ネットワーク仮想化環境では論理スイッチのVNI(VXLAN Network Identifier物理環境のVLAN IDに相当)に対応したポートグループが自動的に作成されます。
ポイント2:論理スイッチの実態は、ハイパーバイザ上に作成される仮想スイッチのポートグループ
仮想マシンから論理スイッチは単にポートグループとして見えています。仮想マシンを論理スイッチに対応したポートグループに接続することで、VXLAN でオーバレイしたネットワーク経由で通信を行うことが可能になります。
この後は、論理スイッチに接続された仮想マシン間で、通信がどのように成立するのかを見ていきます。ネットワーク仮想化環境で通信を成立させるために、3つのテーブルがでてきます。これらのテーブルがどのようなメカニズムで通信を成立させるか確認していきます。
VTEP テーブル:VNI(VXLAN Network Identifier)とVTEP を対応させたテーブル
MAC テーブル :VNI、VTEP、仮想マシンのMAC アドレスを対応させたテーブル
ARP テーブル :仮想マシンのIP アドレスとMAC アドレスを対応させたテーブル
補足情報:論理スイッチを構成する際、VTEP間の通信にマルチキャストを使用するモード(マルチキャストモード)と、使用しないモード(ユニキャストモード)、及び併用するモード(ハイブリッドモード)を選択できます。この後の説明は、ユニキャストモードを前提に進めています。ユニキャストモードでは、コントローラでVTEP テーブルを集約して管理することで、物理ネットワークでマルチキャストを運用する必要がありません。
———-
STEP0: ネットワーク仮想化環境は、ハイパーバイザとコントローラ間で各種テーブル情報を交換するコントロールプレーンと、VTEP 間で仮想マシントラフィックを転送するデータプレーンから構成されています。2台のESXi ホスト上でVNI(VXLAN Network Identifier 物理環境のVLAN IDに相当)5001 に接続している端末間の通信を確認してみます。端末A,B は、論理スイッチ VNI 5001 に対応するポートグループに接続し、電源がOFF の状態になっています。
補足情報:ハイパーバイザとコントローラ間のコネクション(コントロールプレーン)は、下記で確認できます。ハイパーバイザの管理用IP アドレスからコントローラ(192.168.110.201, 192.168.110.202, 192.168.110.203)に接続していることが確認できます。
コントローラクラスタとの接続確認 # esxcli network ip connection list | grep 1234 Proto Local Address Foreign Address State World Name ----- -------------------- -------------------- ----------- ---------- tcp 192.168.210.51:59453 192.168.110.201:1234 ESTABLISHED netcpa-worker tcp 192.168.210.51:61471 192.168.110.202:1234 ESTABLISHED netcpa-worker tcp 192.168.210.51:61397 192.168.110.203:1234 ESTABLISHED netcpa-worker
仮想マシン間のデータの転送は、データプレーンを使用します。データプレーンには VTEP(VMkernel ポート)が存在し、VXLAN のオーバレイ通信を行います。
補足情報:データプレーンのVTEP(VMkernel ポート)はESXi ホストにおいて他の管理系ネットワークから独立したTCP/IP スタック(メモリ領域、ルーティングテーブル、ARPテーブル)を持ちます。
ルーティングテーブル確認方法(VXLAN TCP/IP スタック) # esxcli network ip route ipv4 list -N vxlan Network Netmask Gateway Interface Source ------------- ------------- ------------- --------- ------ default 0.0.0.0 192.168.250.2 vmk3 MANUAL 192.168.250.0 255.255.255.0 0.0.0.0 vmk3 MANUAL
ARP テーブル確認方法(VXLAN TCP/IP スタック) # esxcli network ip neighbor list -N vxlan Neighbor Mac Address Vmknic Expiry State Type ------------- ----------------- ------ -------- ----- ----------- 192.168.250.2 00:50:56:01:1e:3d vmk3 1194 sec Autorefresh
VTEP 間の疎通確認方法(VXLAN TCP/IP スタック) # ping ++netstack=vxlan -I vmk3 -d -s 1572 192.168.150.51 PING 192.168.150.51 (192.168.150.51): 1572 data bytes 1580 bytes from 192.168.150.51: icmp_seq=0 ttl=63 time=1.745 ms
———-
STEP1: 仮想マシンの電源をON にすると、ハイパーバイザ内にVTEP テーブル情報が作成されます。VTEP テーブルは、VNI と、対応するVTEP のIP アドレスで構成され、VTEP テーブル情報はコントローラに送付されます。コントローラは、収集したVTEP テーブル情報を、各ハイパーバイザに通知します。この動作により、各ハイパーバイザでVNI に対応するVTEP のIP アドレスを学習することができます。
ポイント3:ハイパーバイザでVTEP テーブルを管理することにより、VNI に対応したブロードキャスト、宛先不明のユニキャスト、及びマルチキャストを転送するVTEP を把握できる
補足情報:ブロードキャスト、宛先不明のユニキャスト、マルチキャストを略してBUM トラフィックと呼びます。宛先不明のユニキャストとは、ハイパーバイザ内に後述のMAC テーブル情報のないトラフィックのことです。
コントローラでの確認方法 # show control-cluster logical-switches vtep-table 5001 VNI IP(VTEPのIP) Segment MAC(VTEPのMAC) 5001 192.168.250.51(ESXi01) 192.168.250.0 01:01:01:01:01:01 5001 192.168.250.52(ESXi02) 192.168.250.0 02:02:02:02:02:02
上記よりコントローラではESXi01、ESXi02 のVTEP を認識していることが分かります。
ハイパーバイザでの確認方法 ESXi01 # esxcli network vswitch dvs vmware vxlan network vtep list --vds-name=Compute_VDS --vxlan-id=5001 IP(VTEPのIP) Segmant ID Is MTEP -------------- ------------- ------- 192.168.250.52(ESXi02) 192.168.250.0 false
上記よりESXi01 が、VXLAN5001 の転送先としてESXi02のVTEP を認識していることが分かります。
———-
STEP2: 仮想マシンから通信が発生した際、カーネルモジュールが通信の送信元MAC アドレスから、仮想マシンのMAC アドレスを認識します。認識した仮想マシンのMAC アドレス情報をコントローラクラスタに通知します。
コントローラでの確認方法 # show control-cluster logical-switches mac-table 5001 VNI MAC(端末のMAC) VTEP-IP 5001 AA:AA:AA:AA:AA:AA(端末A) 172.16.250.51(ESXi01) 5001 BB:BB:BB:BB:BB:BB(端末B) 172.16.250.52(ESXi02)
上記よりコントローラでは端末A,BのMACアドレスと、対応するVTEP を認識していることが分かります。
———-
STEP3: 仮想マシンのIP アドレス情報を含む特定の通信(ARP Response Request, GARP もしくはDHCP ACK (2016/10/7 修正))から、カーネルモジュールが仮想マシンのIP アドレスとMAC アドレスを認識します。認識した情報をコントローラクラスタに通知します。ARP 抑制(ARP Suppression)が有効な場合、このステップが実施されます。
ARP 抑制はデフォルトで有効となり、論理スイッチの設定画面「IP検出の有効化」のチェックボックスで有効化、無効化を行います。以降の説明はARP 抑制が有効化されている前提で進めていきます。
コントローラでの確認方法 # show control-cluster logical-switches arp-table 5001 VNI IP(端末のIP) MAC(端末のMAC) 5001 172.16.10.11(端末A) AA:AA:AA:AA:AA:AA(端末A) 5001 172.16.10.12(端末B) BB:BB:BB:BB:BB:BB(端末B)
上記よりコントローラでは端末A,B のARP テーブル情報を認識していることが分かります。
———-
STEP4: 端末A が端末B に対しARP リクエストを送信します。端末A からのARP リクエストをESXi01 のカーネルモジュール が受け取ります。ESXi01 は、リクエストをコントローラに問合せ、端末B のARP テーブル情報をコントローラから受け取ります。ESXi01 は端末A にARP リプライを返します。
ポイント4:ハイパーバイザでARP テーブルを管理することにより、仮想マシンからのARP リクエストに代理応答し、物理ネットワークを流れるトラフィック(ARPブロードキャスト)を削減できる
ハイパーバイザでの確認方法 ESXi01 # esxcli network vswitch dvs vmware vxlan network arp list --vds-name=Compute_VDS --vxlan-id=5001 IP(端末のIP) MAC(端末のMAC) ------------ ----------------- 172.16.10.12(端末B) BB:BB:BB:BB:BB:BB(端末B)
上記よりESXi01 がARP テーブル情報(端末BのIP アドレスとMAC アドレスの対応)を認識していることが分かります。
補足情報:コントローラで端末B に対応するARP テーブルを保持していない場合、ESXi ホストはARP リクエストを通常のブロードキャストトラフィックとして処理します。VTEP テーブルを参照しVNI 5001 に対応するESXi ホストに送信します。
———-
STEP5: ESXi01 は、端末B に対応するMACテーブルをコントローラクラスタに問合せ、端末B のMAC テーブル情報を取得します。
ハイパーバイザでの確認方法 ESXi01 # esxcli network vswitch dvs vmware vxlan network mac list --vds-name=Compute_VDS --vxlan-id=5001 Inner MAC(端末のMAC) Outer MAC(VTEPのMAC) Outer IP(VTEPのIP) ----------------- ----------------- ------------- BB:BB:BB:BB:BB:BB(端末B) 02:02:02:02:02:02(ESXi02) 172.16.250.52(ESXi02)
上記よりESXi01 は、ESXi02 上に端末B が存在することを認識していることが分かります。
———-
STEP6: ESXi01 からのARP 応答(STEP4 で実施)により端末A は端末B のMAC アドレス情報を取得し、端末B に対する通信を開始します。ESXi01 はMAC テーブル(STEP5 で取得)を参照し、VXLAN でカプセル化したパケットを、ESXi02 のVTEP へ送信します。ESXi02 では、パケットを受信した際に端末A に対応するMAC テーブルを作成します。その後VXLAN ヘッダを取り除き、端末B にオリジナルのフレームを転送します。
ポイント5:ハイパーバイザでMAC テーブルを管理することにより、宛先の仮想マシンが動作しているホストのVTEP を把握し、物理ネットワークを流れるトラフィック(宛先不明のユニキャスト)を削減できる
補足情報:STEP5 において、コントローラで端末B に対応するMAC テーブルがなく、ハイパーバイザ内にもMAC テーブルがない場合、ESXi01 は端末B に対する通信を宛先不明のユニキャストとして処理します。VTEP テーブルを参照しVNI 5001 に対応するESXi ホストに送信します。
■物理ネットワーク環境とネットワーク仮想化環境の比較
ポイント1-5を再掲します。
ポイント1:VTEPの実態は、ハイパーバイザ上に作成される仮想スイッチのVMkernelポート
ポイント2:論理スイッチの実態は、ハイパーバイザ上に作成される仮想スイッチのポートグループ
上記2つのポイントはサーバ仮想化エンジニアの方はイメージしやすいのではないでしょうか。
ポイント3:ハイパーバイザでVTEP テーブルを管理することにより、VNI に対応したブロードキャスト、宛先不明のユニキャスト、及びマルチキャストを転送するVTEP を把握できる
ポイント4:ハイパーバイザでARP テーブルを管理することにより、仮想マシンからのARP リクエストに代理応答し、物理ネットワークを流れるトラフィック(ARPブロードキャスト)を削減できる
ポイント5:ハイパーバイザでMAC テーブルを管理することにより、宛先の仮想マシンが動作しているホストのVTEP を把握し、物理ネットワークを流れるトラフィック(宛先不明のユニキャスト)を削減できる
上記3つのポイントについて「テーブル」の観点から、物理ネットワーク環境とネットワーク仮想化環境を比較してみます。
ARP テーブルの役割は物理ネットワーク環境と全く同じです。テーブル情報を、端末だけではなく、コントローラで集約して管理を行い、端末からのARP リクエストにハイパーバイザが代理応答することで、物理ネットワークを流れるトラフィックを削減しているのがネットワーク仮想化環境の特徴となります。
MAC テーブルは、物理ネットワーク環境のMAC アドレステーブルと同等の役割を果たしています。ハイパーバイザは、MAC テーブルを参照することで、VTEPの先にある端末のMAC アドレスを把握し、物理ネットワークを流れるトラフィックを削減することができます。
VTEP テーブルは、物理スイッチにおけるポートのVLAN 設定に対応します。VTEP テーブルを参照することでブロードキャスト、宛先不明のユニキャスト、及びマルチキャスト(BUM トラフィック)を転送する先を判断することができます。ユニキャストモードではVTEP テーブルをコントローラが集約して管理することで、マルチキャストに依存しないVXLAN の運用を可能にしています。
論理スイッチの管理するVTEP テーブルとMAC テーブルを合わせ、VTEP を物理スイッチのポートに置き換えて考えると、論理スイッチはネットワーク仮想化環境において、物理スイッチと同等の機能を提供していることが分かります。
ネットワーク仮想化環境では、L2ネットワークを管理するための各種テーブルを物理ネットワーク機器から切り離し、ハイパーバイザで管理することにより、物理ネットワークと同等のサービスを、物理ネットワークに依存しない形で柔軟に展開することを可能にします。さらにコントロールプレーンを実装し、コントローラで各種テーブル情報を集約することで、マルチキャストに依存しない論理スイッチ(VXLAN)の展開や、物理ネットワークを流れるトラフィックを削減する運用を可能にしています。
■補足情報 論理スイッチ(VXLAN)を提供するVMware NSX のコンポーネント
・NSX Manager(マネジメントプレーン)
NSX を構築する際に最初に展開するコンポーネントで、仮想アプライアンスとして提供されています。NSX Manager は初期構築時の ESXi ホストへのカーネルモジュールのインストールや、論理ルータコントロールVM やNSX Edge といった仮想アプライアンスの払い出しを担います。また、NSX Manager はAPI のエントリポイントとなり、GUI だけでなくAPI 経由でNSX 環境の設定を可能にします。
・NSX コントローラクラスタ(コントロールプレーン)
NSX コントローラクラスタは、現時点で3台の仮想アプライアンスで構成することを推奨しており、論理スイッチにおいて、各種情報(VTEP テーブル、MAC テーブル、ARP テーブル)を集中管理するポイントになります。VXLAN のVNI 毎に担当するコントローラが決められ、例えばVNI 5000はコントローラ1番、VNI 5001 はコントローラ2番というように役割が割り当てられます。テーブル情報は、担当するコントローラのみが保持します。なお、論理スイッチ(VXLAN) をマルチキャストモードで実装する場合は、コントローラクラスタは必要ありません。
3台のコントローラ(192.168.110.201, 192.168.110.202, 192.168.110.203)で構成されている環境で、VNI 5001 の情報を確認する手順は下記のとおりです。
VXLAN VNI 5001 を管理するコントローラの確認 # show control-cluster logical-switches vni 5001 VNI Controller BUM-Replication ARP-Proxy 5001 192.168.110.202 Enabled Enabled
この出力結果から、192.168.110.202 のコントローラがVNI 5001 の情報を管理していることが分かります。VNI 5001 の各種テーブル情報を見るためには、該当のコントローラ(192.168.110.202)にログインする必要があります。
VXLAN VNI 5001 のVTEP テーブルの確認 # show control-cluster logical-switches vtep-table 5001 VNI IP(VTEPのIP) Segment MAC(VTEPのMAC) 5001 192.168.250.51(ESXi01) 192.168.250.0 01:01:01:01:01:01 5001 192.168.250.52(ESXi02) 192.168.250.0 02:02:02:02:02:02
VXLAN VNI 5001 のMAC テーブルの確認 # show control-cluster logical-switches mac-table 5001 VNI MAC(端末のMAC) VTEP-IP 5001 AA:AA:AA:AA:AA:AA(端末A) 172.16.250.51(ESXi01) 5001 BB:BB:BB:BB:BB:BB(端末B) 172.16.250.52(ESXi02)
VXLAN VNI 5001 のARP テーブルの確認 # show control-cluster logical-switches arp-table 5001 VNI IP(端末のIP) MAC(端末のMAC) 5001 172.16.10.11(端末A) AA:AA:AA:AA:AA:AA(端末A) 5001 172.16.10.12(端末B) BB:BB:BB:BB:BB:BB(端末B)
・論理ルータコントロールVM(コントロールプレーン)
論理ルータコントロールVM は論理スイッチに関与しません。(第3回分散ルーティングで解説を行います)
・ハイパーバイザ カーネルモジュール(データプレーン)
NSX 環境を構築する際、ホストの準備のステップで各ESXi にインストールされるカーネルモジュールとなります。VIB(vSphere Installation Bundle)ファイルとしてインストールされ、論理スイッチの機能はカーネルモジュール(vdl2)としてロードされます。 カーネルモジュールは、ハイパーバイザ内で論理スイッチ(VXLAN)のテーブル情報を管理します。
ハイパーバイザからは、NSX コントローラクラスタと、NSX Manager にコネクションを張り、各種情報のアップデートを行います。NSX コントローラクラスタへのコネクションはハイパーバイザ内のUWA(User World Agent)netcpa(TCP/1234)を介して確立し、NSX Manager へのコネクションはUWA vsfwd(TCP/5671)を介して確立します。
コントローラクラスタとの接続確認 # esxcli network ip connection list | grep 1234 Proto Local Address Foreign Address State World Name ----- -------------------- -------------------- ----------- ---------- tcp 192.168.210.51:59453 192.168.110.201:1234 ESTABLISHED netcpa-worker tcp 192.168.210.51:61471 192.168.110.202:1234 ESTABLISHED netcpa-worker tcp 192.168.210.51:61397 192.168.110.203:1234 ESTABLISHED netcpa-worker
上記出力より、ハイパーバイザの管理用IP アドレスから3台のコントローラ(192.168.110.201, 192.168.110.202, 192.168.110.203)に、netcpa を介して接続していることが確認できます。
NSX Manager との接続確認 # esxcli network ip connection list | grep 5671 Proto Local Address Foreign Address State World Name ----- -------------------- -------------------- ----------- ---------- tcp 192.168.210.51:23251 192.168.110.42:5671 ESTABLISHED vsfwd
上記出力より、ハイパーバイザの管理用IP アドレスからNSX Manager に、vsfwd を介して接続していることが確認できます。
論理スイッチのカーネルモジュールは、ハイパーバイザ内でVTEP, MAC, ARP テーブルを管理します。
VXLAN VNI 5001 のVTEP テーブルの確認 ESXi01 # esxcli network vswitch dvs vmware vxlan network vtep list --vds-name=Compute_VDS --vxlan-id=5001 IP(VTEPのIP) Segmant ID Is MTEP -------------- ------------- ------- 192.168.250.52(ESXi02) 192.168.250.0 false
VXLAN VNI 5001 のMAC テーブルの確認 ESXi01 # esxcli network vswitch dvs vmware vxlan network mac list --vds-name=Compute_VDS --vxlan-id=5001 Inner MAC(端末のMAC) Outer MAC(VTEPのMAC) Outer IP(VTEPのIP) ----------------- ----------------- ------------- BB:BB:BB:BB:BB:BB(端末B) 02:02:02:02:02:02(ESXi02) 172.16.250.52(ESXi02)
VXLAN VNI 5001 のARP テーブルの確認 ESXi01 # esxcli network vswitch dvs vmware vxlan network arp list --vds-name=Compute_VDS --vxlan-id=5001 IP(端末のIP) MAC(端末のMAC) ------------ ----------------- 172.16.10.12(端末B) BB:BB:BB:BB:BB:BB(端末B)
・NSX Edge(データプレーン)
NSX Edge のインターフェイスを、論理スイッチに接続することでNSX Edge の持つ各種ネットワークサービス(ロードバランサ、ルーティング、NAT、ファイアウォール、VPN、 DHCP 等)を論理スイッチに接続した仮想マシンに対して提供します。論理スイッチの提供するL2ネットワークサービスには直接関与しません。
■関連リンク
今回ご紹介した内容をオンラインのハンズオン環境上で確認いただくことができます。コマンドラインの出力はハンズオン環境をベースに作成しています。
VMware HOL Online
HOL-SDC-1403 – VMware NSX Introduction
NSX の機能全般及び、ネットワーク仮想化環境の設計に興味のあるかたは下記テックペーパーを参照ください。
VMware® NSX for vSphere (NSX-V) Network Virtualization Design Guide
ネットワーク仮想化をネットワークの基本から理解する
第1回:理解するために必要なことを整理する
第2回:論理スイッチ(VXLAN)–Layer2 の世界(本稿)
第3回:分散ルーティング –Layer3 の世界
第4回:分散ファイアウォール -Layer4 の世界