今回はNSX-TのL2オーバレイネットワークの概要と検証証跡をまとめました。
概要
NSX-TのL2オーバレイネットワークについて
従来のvSphereでは、分散スイッチに分散ポートグループを追加した際、分散スイッチが展開されているESXiホストを収容している物理スイッチ側にも設定変更が必要になります。
もし、ESXiホストはサーバチーム、物理スイッチはネットワークチームが管理している場合、サーバチーム側のESXiホストの設定変更が完了しても、ネットワークチーム側の作業が完了するまで、新規追加した仮想マシンは外部と通信できません。
また、従来のvSphereでは、VLANしかサポートしていないため、離れたESXi間に跨るL2ネットワークを構築できません。
NSX-Tを使用することで、物理ネットワークの設定変更無し、かつ、物理ネットワークの構成を意識せずに、離れたESXiホスト間に跨るL2オーバレイネットワークを構築可能です。
NSX-VではL2オーバレイネットワークの構築にVXLANを使用していましたが、NSX-TではVXLANの機能を拡張したGeneve(Generic Network Virtualization Encapsulation)と呼ばれるプロトコルを使用します。
仮想マシンが送信したフレームの宛先MACアドレスが別のESXiホストに存在する仮想マシンのものである場合、ESXiホストはフレームをGeneveでカプセル化します。そして、宛先の仮想マシンが存在するESXiホストに対して転送します。(もしかしたら、N-VDSの場合、下の画像のポートグループは存在してないかもしれませんが、私はこのようなイメージで理解しています。)
NSX-Tのバージョン 2.5以前では、オーバレイネットワークを構築するには、NSX-Tの機能を保持した専用の仮想スイッチであるN-VDS(NSX-T Virtual Distributed Switch)が必要でした。一方、バージョン 3.0からは従来の分散スイッチをNSX-T用の仮想スイッチとしても使用可能です(NSX-Vと同じパターン)。
N-VDSには、Geneveによるパケットのカプセル化を実施するTEP(Tunnel End Point)が生成されます。TEPの実体はVMKernel Portになります。
仮想マシンが接続するN-VDSのポートグループの事を、Logical Switch、または、Segmentと呼びます(以降はSegmentと表記)。このSegmentに対して、L2オーバレイネットワークの識別子であるVNI(VXLAN Network Identifier)が割り当てられています。
また、N-VDSやvDSに接続する仮想マシンのvNICのことをVIF(Virtual Interface)、VIFの接続先のN-VDSやvDSのポートのことをLIF(Logical Interface)と呼びます。
NSX-TのGeneveを使用したオーバレイネットワークでは複雑な通信が発生しているように感じる方をいると思います。しかし、物理ネットワーク側の観点から見ると、NSX-Tのオーバレイの通信は、従来のESXiホストのVMKerne間の通信と同じです。そのため、物理ネットワーク側ではTEP用のVMKernel Portの収容しているポートグループに対応するVLANを作成し、MTUを調整し、TEP間で通信できるようにルーティングを設定するのみです。
Transport ZoneとTransport Nodeについて
NSX-TにはTransport Zoneと呼ばれるものが存在します。(Transport ZoneにはGeneveとVLANの2種類のタイプが存在しますが、ここではGeneveタイプのTransport Zoneを基に解説します。)
Transport ZoneはL2オーバレイネットワークを展開する範囲を制限するためのコンポーネントで、SegmentやESXiホスト等に関連付けられます。
ESXiホストは自身が所属しているTransport Zoneと同じものが割り当てられたSegmentのみ認識可能です。つまり、ESXiホストは自身が所属いしてるTransport Zoneと同じものが割り当てられたSegmentに対してのみ、仮想マシンのvNICを接続可能です。
ESXiホストはTransport Zoneに参加することで、NSX-Tのオーバレイネットワークを構築可能で、Transport Zoneに参加しているESXiホスト等のノードのことをTransport Nodeと呼びます。
NSX-VではCluster単位でTransport Zoneを割り当てる必要がありました。一方、NSX-TではESXiホスト単位、Cluster単位でTransport Zoneを割り当て可能です。
Cluster単位でTransport Zoneを割り当てる場合、最初にTransport Node Profileを使用して各ESXiホストに適用する共通の設定を定義します。その後、Clusterに対してTransport Node Profileを割り当てることで、Clusterに属する全ESXiホストがTransport Zoneに参加します。
Uplink Profileについて
Uplink Profileでは、ESXiホスト内に生成されるN-VDSのUplink Portの数やチーミング方式(Active-Standby、Active-Active、LAG)を定義するためのコンポーネントです。
N-VDSのUplink PortとESXiホストのvmnicのマッピングはTransport Node Profile等で設定します。
検証結果
検証内容、構成
ESXi1とESXi2をTransport Zoneに参加させ、ESXi1とESXi2に跨るL2オーバレイネットワークを構築し、仮想マシンのR1とR2間で通信できるようにします。
アンダーレイの物理スイッチではGeneveの通信をVLAN 100に収容します。
ネットワーク機器のCLIの設定
vlan 100
!
interface GigabitEthernet1/0/1
switchport access vlan 100
switchport mode access
!
interface GigabitEthernet1/0/2
switchport access vlan 100
switchport mode access
interface GigabitEthernet2
ip address 10.1.1.1 255.255.255.0
interface GigabitEthernet2
ip address 10.1.1.2 255.255.255.0
IP Address Poolの作成
最初にIP Address Poolを作成し、ESXiホストのTEP用のアドレスを定義します。IP Address Poolはネットワーク > IP管理 > IPアドレスプールから作成します。
Uplink Profileの作成
Uplink ProfileでN-VDSのUplink Portを定義します。Uplink Profileはシステム > ファブリック > プロファイル > アップリンクプロファイルから作成します。
下図のアクティブアップリンクに表示されているtep-uplink0がN-VDSのUplink Portになります。
Transport Zoneの作成
ESXiホストが参加するTransport Zoneはシステム > ファブリック > トランスポートゾーンから作成します。
Geneveを使用する場合は、トラフィックタイプにオーバレイを指定します。
Transport Node Profileの作成
ESXiホストのClusterに割り当てるTransport Node Profileはシステム > ファブリック > プロファイル > トランスポートノードプロファイルから作成します。
N-VDSのUplink PortとESXiホストのvmnicのマッピングを定義します。
ESXiホストにTransport Node Profileを割り当て
ESXiホストのClusterに対するTransport Node Profileの割り当てはシステム > ファブリック > ノード > トランスポートノードから実施します。
割り当てるTransport Node Profileを指定します。
Transport Node Profile割り当て後、ESXiホストの状態が緑であることを確認します。
Transport Node Profileを割り当て後の状態確認
NSX ManagerとESXiホスト間のコネクションの状態確認
最初にget nodesコマンドを使用して、ESXiホストのUUIDを確認します。
nsx-manager1> get nodes
UUID Type Display Name
17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c esx 192.168.1.101
7f0ea72d-02a1-455c-aa24-9a1f0d181be9 esx 192.168.1.102
16c13942-a612-2ed7-390d-337a9c6bba70 mgr nsx-manager2
94fe3942-0a81-563e-a720-49b161498cf4 mgr nsx-manager3
f84a3942-dd41-cf11-f1c8-f25201f67c33 mgr nsx-manager1
NSX ManagerとESXiホスト間のコネクションの状態はget transport-nodes statusコマンドで確認できます。
nsx-manager1> get transport-nodes status
TransportNode-ID Remote-Address Controller SSL-Enabled Connection-State Supported-Versions
7f0ea72d-02a1-455c-aa24-9a1f0d181be9 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true CLOSED []
17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true CLOSED []
nsx-manager2> get transport-nodes status
TransportNode-ID Remote-Address Controller SSL-Enabled Connection-State Supported-Versions
7f0ea72d-02a1-455c-aa24-9a1f0d181be9 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true CLOSED []
17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true CLOSED []
nsx-manager2> get transport-nodes status
TransportNode-ID Remote-Address Controller SSL-Enabled Connection-State Supported-Versions
7f0ea72d-02a1-455c-aa24-9a1f0d181be9 192.168.1.102:34006 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true OPENED []
17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c 192.168.1.101:41706 2907f2d8-ae0a-4f61-b900-9d6b873f2d46 true OPENED []
上記より、Transport Zoneに参加しているESXiホストはClusterに属するNSX Managerのうちの1台とのみコネクションを確立していることが確認できます。
Transport Zoneの状態確認
Transport Nodeが2台存在することが確認できます。
Transport ZoneにESXi1とESXi2が参加していることが確認できます。
ESXiホストの状態確認(NSX ManagerのGUI)
システム > ファブリック > ノード > トランスポートノード > 確認対象のESXiホスト > 表示の切り替えからESXiホストに作成作成されたN-VDS、TEP用のVMKernel Port、N-VDSのUplink PortとESXiホストのvmnicのマッピング情報が視覚的に確認可能です。
ESXiホストの状態確認(vCenterのGUI)
ESXiホストにN-VDSが追加されていることが確認できます。
vCenterのGUIからでは、TEP用のVMKernel Portは確認できませんでした。
vmnic0がN-VDSのアップリンクと接続していることが確認できます。
ESXiホストの状態確認(ESXiホストのCLI)
ESXiホストのvSwitchはesxcfg-vswitch -lコマンドで確認できます。N-VDSが追加されており、かつ、vmnic0を使用していることが確認できます。
[root@esxi1:~] esxcfg-vswitch -l
Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 8836 16 128 1500 vmnic3
PortGroup Name VLAN ID Used Ports Uplinks
VM Network 0 12 vmnic3
Management Network 0 1 vmnic3
Switch Name Num Ports Used Ports Uplinks
N-VDS1 8836 6 vmnic0
ESXiホストのVMKernel Portはesxcfg-vmknic -lコマンドで確認できます。TEP用のVMKernel Portが追加されていることが確認できます。(vmk50はk8sとの連携で使用されます。)
[root@esxi1:~] esxcfg-vmknic -l
Interface Port Group/DVPort/Opaque Network IP Family IP Address Netmask Broadcast MAC Address MTU TSO MSS Enabled Type NetStack
vmk0 Management Network IPv4 192.168.1.101 255.255.255.0 192.168.1.255 b8:2a:72:dc:52:2f 1500 65535 true STATIC defaultTcpipStack
vmk0 Management Network IPv6 fe80::ba2a:72ff:fedc:522f 64 b8:2a:72:dc:52:2f 1500 65535 true STATIC, PREFERRED defaultTcpipStack
vmk10 2e112a78-ee44-4d55-b345-f9740035d9ca IPv4 172.16.1.101 255.255.255.0 172.16.1.255 00:50:56:6e:f8:94 1600 65535 true STATIC vxlan
vmk10 2e112a78-ee44-4d55-b345-f9740035d9ca IPv6 fe80::250:56ff:fe6e:f894 64 00:50:56:6e:f8:94 1600 65535 true STATIC, PREFERRED vxlan
vmk50 2e2b31e9-81a0-40d3-977d-de6ae3a9bc59 IPv4 169.254.1.1 255.255.0.0 169.254.255.255 00:50:56:62:8e:60 1500 65535 true STATIC hyperbus
vmk50 2e2b31e9-81a0-40d3-977d-de6ae3a9bc59 IPv6 fe80::250:56ff:fe62:8e60 64 00:50:56:62:8e:60 1500 65535 true STATIC, PREFERRED hyperbus
Segmentの作成
N-VDSのポートグループであるSegmentを作成します。
Segmentはネットワーク > 接続 > セグメントから作成可能で、Transport Zoneを割り当てる必要があります。
Segment作成後の状態確認
Segmentの状態確認(NSX ManagerのGUI)
Segmentが作成されたことが確認できます。
Segmentの状態確認(NSX ManagerのCLI)
Segmentはget logical-switchコマンドで確認できます。SegmentのUUIDとVNIが確認できます。
nsx-manager1> get logical-switch
VNI UUID Name Type
65536 85898808-47e5-450f-9459-ce10c0de1f5b Segment1 DEFAULT
vESXiホストの状態確認(vCenterのGUI)
ポートグループであるSegmentが作成されたことが確認できます。
Segmentへの仮想マシンの接続
仮想マシンのトラフィックをNSX-Tのオーバレイネットワーク経由で転送するには、Segmentに対して仮想マシンのvNICを接続する必要があります。
Segmentに対する仮想マシンのvNICの接続はvCenter側で実施します。
Segmentへの仮想マシン接続後の状態確認
仮想マシンのVIFの確認
仮想マシンのvNICをSegmentに接続すると、仮想マシンのvNICにVIF用のUUIDが割り当てられれます。vmxファイル内のexternalIdがVIFのUUID、opaqueNetwork.idがVIFの接続先のSegmentのUUIDになります。
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "13"
nvram = "R1.nvram"
.
<一部省略>
.
ethernet1.opaqueNetwork.id = "85898808-47e5-450f-9459-ce10c0de1f5b"
ethernet1.opaqueNetwork.type = "nsx.LogicalSwitch"
ethernet1.externalId = "53262bc3-cfc1-47ac-ab0a-ecca0bb4a976"
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "13"
nvram = "R2.nvram"
.
<一部省略>
.
ethernet1.opaqueNetwork.id = "85898808-47e5-450f-9459-ce10c0de1f5b"
ethernet1.opaqueNetwork.type = "nsx.LogicalSwitch"
ethernet1.externalId = "1b64c8af-ac92-41d5-a11c-e469e249bbb9"
Segmentのポート情報の確認
仮想マシンのVIFと接続しているSegmentのポート情報はget logical-switch <SegmentのUUID> portsコマンドで確認できます。vmxファイルに記載されていたVIFのUUIDが確認できます。
nsx-manager1> get logical-switch 85898808-47e5-450f-9459-ce10c0de1f5b ports
LogSwitchPort-ID LogSwitch-ID Child-UUID Child-EntityType TransportNode-ID
16b2a0e3-5fd1-45c6-a4c9-37a8c55804d7 85898808-47e5-450f-9459-ce10c0de1f5b 53262bc3-cfc1-47ac-ab0a-ecca0bb4a976 Vif 17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c
809adf1b-c0fc-4fe7-a119-de56872bf76d 85898808-47e5-450f-9459-ce10c0de1f5b 1b64c8af-ac92-41d5-a11c-e469e249bbb9 Vif 7f0ea72d-02a1-455c-aa24-9a1f0d181be9
MACアドレステーブルの確認
NSX-Tのオーバレイネットワークに接続している仮想マシンのMACアドレスと、その仮想マシンが存在するESXiホストのTEP用のアドレスのマッピング情報はget logical-switch <SegmentのUUID> mac-tableコマンドで確認できます。
nsx-manager1> get logical-switch 85898808-47e5-450f-9459-ce10c0de1f5b mac-table
VNI MAC VTEP-IP TransportNode-ID
65536 00:50:56:b9:98:2c 172.16.1.101 17ce2a86-2d3f-4d73-9130-9eb2fd3fff7c
65536 00:50:56:b9:b9:8a 172.16.1.102 7f0ea72d-02a1-455c-aa24-9a1f0d181be9
R1#show interfaces GigabitEthernet2
GigabitEthernet2 is up, line protocol is up
Hardware is CSR vNIC, address is 0050.56b9.982c (bia 0050.56b9.982c)
Internet address is 10.1.1.1/24
.
<一部省略>
R2#show interfaces GigabitEthernet2
GigabitEthernet2 is up, line protocol is up
Hardware is CSR vNIC, address is 0050.56b9.b98a (bia 0050.56b9.b98a)
Internet address is 10.1.1.2/24
.
<一部省略>
疎通確認
R1の10.1.1.1からR2の10.1.1.2へPingを実施します。
R1の10.1.1.1からR2の10.1.1.2へのPingが成功することが確認できます。
R1#ping 10.1.1.2 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
以下は物理ネットワーク側でキャプチャしたR1の10.1.1.1からR2の10.1.1.2へのICMP Echoになります。Geneveでカプセル化されていることが確認できます。
補足として、NSX Managerのプランとトラブルシューティング > トラブルシューティングツール > トレースフローからトラフィックフローの詳細をシミュレート可能です。
コメント