NSX-T N-VDSを使用したL2オーバレイネットワークの構築

今回は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 Manager 1

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 Manager 1

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 Manager 2

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 Manager 3

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を使用していることが確認できます。

ESXi1

[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との連携で使用されます。)

ESXi1

[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が確認できます。

ESXi1

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になります。

R1のvmxファイル

.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"
            
R2のvmxファイル

.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 Manager 1

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 Manager 1

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

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

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

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のプランとトラブルシューティング > トラブルシューティングツール > トレースフローからトラフィックフローの詳細をシミュレート可能です。

コメント

タイトルとURLをコピーしました