■はじめに
こんにちは、パートナーSEの川崎です。本シリーズでは、前回に引き続きネットワーク仮想化をネットワークの基本から理解するという姿勢で、物理環境と比較しながら進めます。第3回となる今回はレイヤ3のルーティングに関して見ていきます。
■はじめに
データセンターにおけるネットワークでは、East-West トラフィックと呼ばれるサーバ間の水平方向の通信が、トラフィック量全体の約7 割を占めていると言われています。分散ルーティングは、ハイパーバイザ内でルーティングの処理を行うことで、この East-West トラフィックを最適化します。
分散ルーティングの設定は、VMware NSX の管理画面から行います。物理サーバや物理ネットワーク機器数十台にまたがるような分散ルーティング環境を構成する際も、個々の物理コンポーネントに設定を行う必要はありません。
分散ルーティング環境を構成するためには、論理ルータコントロールVMと呼ばれるコンポーネントを作成します。論理ルータコントロールVM は、 NSX Edge の構成ウィザードから、インストールタイプを「論理(分散)ルータ」として構成します。
論理ルータコントロールVM に設定したインターフェイスやルーティングの情報は、各 VMware ESXi ホストに展開されます。例えば論理ルータコントロールVM にルーティング設定を追加すると、その情報が各 ESXi ホスト内の論理ルータカーネルモジュールに展開されることになります。
上述の通り分散ルーティングに関する設定はGUI から簡単に行うことができますが、APIを介した設定も可能であり、CMP(クラウドマネジメントプラットフォーム)と連携することで設定作業を自動化できます。
■物理ネットワーク環境におけるルーティング
分散ルーティングの説明に入る前に、物理ネットワーク環境でのルーティングの説明を行います。
ネットワーク環境において、異なるネットワークセグメント内に存在する端末間で通信を行なう場合を考えます。端末A と端末C はそれぞれ、172.16.10.0/24, 172.16.20.0/24のネットワークに存在し、物理ルータ(L3SW)に接続されています。異なるネットワークセグメント間の通信では、ルータによるルーティング処理が行なわれます。
ルーティングを行うのは、ネットワーク機器だけではありません。端末A(172.16.10.11/24) が端末C(172.16.20.11/24) と通信を行うとき、最初に端末A は端末C が異なるサブネットにいることを認識します。端末A は、自身のルーティングテーブルを参照し、デフォルトGW であるルータにトラフィックを転送します。
ルータはそれぞれのネットワークセグメントにインターフェイスF0, F1 を持ち、受信した通信を、別のインターフェイスから送信します。送信するインターフェイスを決定する際にルーティングテーブルを参照します。実際にルータのルーティングテーブルを確かめてみましょう。
> show ip route
C 172.16.10.0/24 is directly connected, F0
C 172.16.20.0/24 is directly connected, F1
S 0.0.0.0/0 via <外部ルータIP>
端末C(172.16.20.11)の所属する172.16.20.0/24 は、ルータのインターフェイス F1 に直接接続していることが確認できます。ルータは、インターフェイス F1 から端末C にパケットを転送します。
物理ネットワーク環境では、物理ルータがルーティングテーブルを持ち、単一のポイントでルーティング処理を実施します。また、複数の物理デバイスがある場合は、個々のデバイスに対して設定作業を行うことになります。
ルーティングの考え方及び、端末側の動作はネットワーク仮想化環境になっても変わりませんが、ネットワーク仮想化環境では物理ルータの持つルーティング機能を、分散ルーティングとしてハイパーバイザに実装することができます。分散ルーティングのアーキテクチャについて、「ルーティングテーブル」に注目する形でこの後見ていきます。
■ネットワーク仮想化環境における分散ルーティング
ネットワーク仮想化環境でのルーティングを見ていきます。サーバ仮想化環境であっても通常の構成であれば、ルーティング処理は外部のルータで行われることになります。これに対し、分散ルーティングが有効な環境では、各 ESXi ホスト内に論理ルータカーネルモジュールが配置され、ホスト内でルーティング処理を行うことが可能になります。
上記は、2台の ESXi ホストが存在し、ネットワーク仮想化と分散ルーティングが有効となった環境を表しています。各 ESXi ホスト内に論理ルータカーネルモジュールが構成され、2つのネットワークが接続されています。論理ルータカーネルモジュールはルーティングテーブルを持ち、異なるL2ネットワーク間の通信が行なわれる際にルーティング処理を行ないます。
実際に分散ルーティングが行なわれる状況を見てみましょう。上記は同一の ESXi ホスト上に存在する2つの仮想マシン VM-A、VM-C が通信を行なう様子を示しています。VM-A は VXLAN 5001 (172.16.10.0/24) に接続、VM-C はVXLAN 5002 (172.16.20.0/24) に接続しているため、2つの仮想マシン間で通信するためにはルーティングが必要です。VM-A から送信されるパケットは ESXi ホスト内の論理インターフェイス(LIF)を宛先とする L2 ヘッダがつけられて送信され、論理ルータカーネルモジュールに届きます。論理ルータカーネルモジュールは受け取ったパケットをルーティング処理し VM-C に届けます。
では、実際に分散ルーティング環境のルーティングテーブルを確認しましょう。ここではテーブルの情報がどこから共有されてくるか、という点を確認するために、論理ルータコントロールVM、NSX コントローラ、各 ESXi ホスト内の論理ルータカーネルモジュールそれぞれについてルーティングテーブルを確認します。
論理ルータカーネルモジュールの持つルーティング情報は、論理ルータコントロールVM に設定した論理インターフェイス(LIF)情報、静的に設定されたルーティング情報、動的に得られたルーティング情報が基になっています。論理ルータコントロールVM の論理インターフェイスと静的なルーティングは vSphere Web Client から設定することができ、この情報は NSX Manager を介して論理ルータコントロールVM に伝えられます。動的ルーティングについては、論理ルータコントロールVM が外部のルータとダイナミックルーティングプロトコル(OSPF, BGP)を介して情報を交換します。
このようにして得られた論理ルータコントロールVM の持つルーティングテーブルを示します。
> show ip route
S 0.0.0.0/0 [1/1] via <外部ルータIP>
C 172.16.10.0/24 [0/0] via 172.16.10.254
C 172.16.20.0/24 [0/0] via 172.16.20.254
ルーティングテーブル(論理ルータコントロールVM)
論理ルータコントロールVM が得たルーティングテーブル情報は、NSX コントローラクラスタを介して各 ESXi ホストに伝えられます。コントローラクラスタは役割を分担しており、ある論理ルータコントロールVM のルーティングテーブルはその管理を担う NSX コントローラ のみが持ちます。該当 の NSX コントローラ から、ルーティングテーブル情報を確認できます。
# show control-cluster logical-routers routes 0x570d4554
LR -Id Destination Next-Hop[] Preference
0x570d4554 0.0.0.0/0 <外部ルータIP> 1
ルーティングテーブル(NSX コントローラ)
# show control-cluster logical-routers interface-summary 0x570d4554
Interface Type Id IP[]
570d455400000002 vxlan 0x1388 172.16.10.254/24
570d45540000000a vxlan 0x138d 172.16.20.254/24
論理インターフェイス(NSX コントローラ)
NSX コントローラが持つルーティング情報が各 ESXi ホスト内に存在する論理ルータカーネルモジュールに配信されます。
# net-vdr --route default+edge-2 -l
Destination GenMask Gateway Flags Ref Origin Uptime Interface
----------- ------- ------- ----- --- ------ ------ ---------
0.0.0.0 0.0.0.0 外部ルータIP UG 1 AUTO 1960358 570d455400000002
172.16.10.0 255.255.255.0 0.0.0.0 UCI 9 MANUAL 1971591 570d45540000000a
172.16.20.0 255.255.255.0 0.0.0.0 UCI 1 MANUAL 1971560 570d45540000000b
ルーティングテーブル(ESXi ホスト)
(補足)上図「分散ルーティング環境でのルーティング情報の伝達」の構成では、論理ルータコントロールVM が、外部ルータに対し、OSPF 経由で内部ネットワーク情報(172.16.10.0/24 及び172.16.20.0/24)を通知しています。これにより、外部ネットワークと内部ネットワーク間の通信が可能になります。
■物理ネットワーク環境とネットワーク仮想化環境の比較
物理ネットワーク環境とネットワーク仮想化環境について、ルーティングの面で比較します。
物理ネットワーク環境では、ルーティングテーブルは物理ルータが持ち、単一のポイントでルーティング処理を実施していました(集中処理)。また、複数の物理ルータがあるような構成では個々のハードウェアに対して設定作業を行うことになります(分散管理)。
一方でネットワーク仮想化環の分散ルーティングは、ハイパーバイザ内でルーティングテーブルを分散して持つことで、複数のポイントでルーティング処理を実施します。
ポイント1 ハイパーバイザでルーティング情報を持ち、同一 ESXi ホスト上の仮想マシン間のルーティングはホスト内で処理することができるため、East-West トラフィックを最適化できる(データプレーンにおける分散処理)
各ハイパーバイザの持つルーティングテーブルの制御は、論理ルータコントロールVM 及び NSX コントローラクラスタで集約して行います。
ポイント2 論理ルータコントロールVM 及び NSX コントローラクラスタでルーティング情報を集中して制御することにより、複数のハイパーバイザ間でルーティングテーブルを共有することができる(コントロールプレーンにおける集中制御)
分散ルーティング環境のセットアップは、NSX Manager を介して、GUI もしくはAPI 経由で簡単に行うことが出来ます。
ポイント3 NSX Manager から一括して設定管理を行うことで、運用管理性を損なうことなく容易に実装できる(マネジメントプレーンにおける集中管理)
ネットワーク仮想化環境における分散ルーティングは、分散処理、集中制御、集中管理のアプローチをとることで、運用管理性を維持しつつ、効率よく East-West トラフィックを処理することを可能にしています。
■ 補足情報 分散ルーティングを提供する VMware NSX のコンポーネント
分散ルーティング環境で、NSX を構成する各コンポーネントがどういった役割を果たしているのか解説を行います。
・NSX Manager(マネジメントプレーン)
NSX を構築する際に最初に展開するコンポーネントで、仮想アプライアンスとして提供されています。NSX Manager は初期構築時の ESXi ホストへのカーネルモジュールのインストールや、論理ルータコントロールVM やNSX Edge といった仮想アプライアンスの払い出しを担います。また、NSX Manager はAPI のエントリポイントとなり、GUI だけでなくAPI 経由でNSX 環境の設定を可能にします。
・NSX コントローラクラスタ(コントロールプレーン)
NSX コントローラクラスタは、現時点で3台の仮想アプライアンスで構成することを推奨しており、分散ルーティング環境において、各種情報(論理インターフェイス、ルーティングテーブル)を集中管理するポイントになります。後述の論理ルータコントロールVM 毎に担当するコントローラが決められ、例えば2つのテナントがある場合、論理ルータコントロールVM (テナントA)はコントローラ1番、(テナントB)はコントローラ2番というように役割が割り当てられます。テーブル情報は、担当するコントローラのみが保持します。
3台のコントローラ(192.168.110.201,192.168.110.202,192.168.110.203)で構成されている環境で、論理ルータの情報を確認する手順は下記のとおりです。
# show control-cluster logical-routers instance all
LR-Id LR-Name Hosts[] Edge-Connection Service-Controller
0x570d4554 default+edge-2 192.168.210.51 192.168.110.201
192.168.110.52
192.168.110.51
192.168.210.52
192.168.210.56
0x570d4553 default+edge-3 192.168.110.202
この出力結果から、論理ルータコントロールVM のインスタンスが2つあることが分かります。default+edge-2(0x0x570d4554)は、192.168.110.201 が管理し、default+edge-3(0x570d4553)は、192.168.110.202 のコントローラが管理していることが分かります。論理ルータの情報を見るためには該当のコントローラにログインする必要があります。(192.168.110.201 のコントローラで情報を出力しているため、自身の担当しているインスタンス default+edge-2 に関連する ESXi ホストの IP 情報が出力されています)
論理ルータ default+edge-2(0x0x570d4554)の管理するルーティングテーブルの確認
# show control-cluster logical-routers routes 0x570d4554
LR-Id Destination Next-Hop[] Preference
0x570d4554 0.0.0.0/0 192.168.10.1 1
論理ルータdefault+edge-2(0x0x570d4554)の管理する論理インターフェイスの確認
# show control-cluster logical-routers interface-summary 0x570d4554
Interface Type Id IP[]
570d455400000002 vxlan 0x1388 192.168.10.5/29
570d45540000000a vxlan 0x138d 1.1.1.254/24
・論理ルータコントロールVM(コントロールプレーン)
論理ルータコントロールVMは分散ルーティング環境において、ルーティングの処理を集中して行うための仮想アプライアンスです。設定したスタティックルーティング情報や、ダイナミックルーティングプロトコル(OSPF, BGP)経由で外部のネットワーク機器から学習したルーティング情報を、コントローラクラスタ経由でESXi ホストに配信します。
論理ルータdefault+edge-2(0x0x570d4554)の管理するルーティングテーブルの確認
> show ip route
S 0.0.0.0/0 [1/1] via 192.168.10.1
C 192.168.10.0/29 [0/0] via 192.168.10.5
C 1.1.1.0/24 [0/0] via 1.1.1.254
論理ルータコントロールVM はテナント単位(ルーティングテーブルの管理単位)で複数たてることができます。
・論理ルータカーネルモジュール(データプレーン)
NSX 環境を構築する際、ホストの準備のステップで各 ESXi にインストールされるカーネルモジュールとなります。VIB(vSphere Installation Bundle)ファイルとしてインストールされ、カーネルモジュール(vdrb)としてロードされます。カーネルモジュールは、ハイパーバイザ内で論理ルータのテーブルの管理とルーティング処理を行います。
論理ルータ default+edge-2(0x0x570d4554)の管理するルーティングテーブルの確認
# net-vdr -l --route default+edge-2
VDR default+edge-2 Route Table
Legend: [U: Up], [G: Gateway], [C: Connected], [I: Interface]
Legend: [H: Host], [F: Soft Flush] [!: Reject] [E: ECMP]
Destination GenMask Gateway Flags Ref Origin UpTime Interface
----------- ------- ------- ----- --- ------ ------ ---------
0.0.0.0 0.0.0.0 192.168.10.1 UG 1 AUTO 1724 570d455400000002
1.1.1.0 255.255.255.0 0.0.0.0 UCI 1 MANUAL 1832038 570d45540000000a
192.168.10.0 255.255.255.248 0.0.0.0 UCI 1 MANUAL 2701981 570d455400000002
ハイパーバイザからは、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
上記出力より、ESXi ホストの管理用 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
上記出力より、ESXi ホストの管理用IP アドレスから NSX Manager に、vsfwd を介して接続していることが確認できます。NSX Manager からはコントローラのIP アドレス情報を取得します。
なお、論理ルータコントロールVM をホストしているESXi は、VMCI (Virtual Machine Communication Interface) と呼ばれる仮想マシン-ハイパーバイザ間専用のパスを使用し、ルーティング情報を論理ルータコントロールVM から取得、ESXi が取得した情報をコントローラに netcpa 経由で通知します。コントロールプレーンの通信に論理ルータコントロールVM の管理インターフェイスは使用しません。
・NSX Edge (データプレーン)
仮想アプライアンスとして提供され、単体で各種ネットワークサービス機能(ロードバランサ、ルーティング、NAT、ファイアウォール、VPN、 DHCP 等)を提供する「スイスのアーミーナイフ」のようなコンポーネントです。従来の物理のネットワーク機器が仮想アプライアンスとして置き換わったイメージです。外部ネットワーク機器として論理ルータコントロールVM とダイナミックルーティングプロトコルを使用しルーティング情報を交換する場合がありますが、論理ルータの提供する分散ルーティングの機能そのものには直接関与しません。
■コラム
新卒から見たネットワーク仮想化
当初ネットワーク仮想化と聞いて非常に難しそうに感じました。サーバ仮想化もまだ勉強中であり、ネットワークについてはさらに知っていることが少ない状態です。しかしながら、いざ勉強を進めていくと、中心となる L2、L3 の通信はテーブルを参照してパケットが流れていくという点では物理環境とほとんど変わりませんでした。実際、物理ネットワークと比較して抑えていくことで、ネットワーク仮想化が物理ネットワークの再現であり、仮想マシンや流れるパケットからすれば同様に動作できる環境が作られていることがわかってきました。NSX には Manager やコントローラ、論理ルータコントロールVM など複数のコンポーネントがありますが、それぞれの持つ役割を把握することで、スムーズに理解していけるように感じます。皆様もぜひご一緒にネットワーク仮想化を学んでいきましょう。
■関連リンク
今回ご紹介した内容をオンラインのハンズオン環境上で確認することができます。コマンドラインの出力はハンズオン環境をベースに作成しています。
http://labs.hol.vmware.com/HOL/
VMware HOL Online
HOL-SDC-1403 – VMware NSX Introduction
NSX の機能全般及び、ネットワーク仮想化環境の設計に興味のあるかたは下記テックペーパーを参照ください。
http://www.vmware.com/files/pdf/products/nsx/vmw-nsx-network-virtualization-design-guide.pdf
VMware® NSX for vSphere (NSX-V) Network Virtualization Design Guide
ネットワーク仮想化をネットワークの基本から理解する
第1回:理解するために必要なことを整理する
第2回:論理スイッチ(VXLAN)–Layer2 の世界
第3回:分散ルーティング –Layer3 の世界(本稿)
第4回:分散ファイアウォール -Layer4 の世界