今回はNSX-Tを使用して、ESXiホストにルーティング機能を追加する方法と、その際の動作についてまとめました。
概要
vSphere環境での通信の問題点
データセンター内を流れるトラフィックには、仮想マシンやサーバ間のトラフィックであるEast-West Traffic、仮想マシンやサーバとデータセンター外部とのトラフィックであるNorth-South Trafficが存在します。
現状は、データセンター内のトラフィック量の約70~80%がEast-West Trafficになります。
従来のvSphereでは、ESXiホストはルーティング機能をサポートしてません。そのため、同じESXiホスト上にデプロイされている仮想マシン間の通信であっても、仮想マシンのvNICの接続先のポートグループのVLANが異なる場合、ESXiホスト内だけで通信は完結せず、物理ネットワーク側のルータでパケットをルーティングする必要があります。
そのため、ESXiホストと物理ネットワーク側のルータ間の経路を同じトラフィックが2回流れることになります。この結果、データセンター内の約70~80%のトラフィックが非効率に処理されていることになります。
NSX-Tのルーティング
vSphere環境にNSX-Tを導入することで、ESXiホストで異なるサブネット間のパケットをルーティングできるようになります。
これにより、同じESXiホストにデプロイされている仮想マシン間の通信は物理ネットワーク側には転送されず、ESXiホスト内で完結させることが可能です。
NSX-TではTier-1 GW、または、Tier-0 GWがルーティング機能を提供します。
一般的にTier-1 GWはテナント単位、Tier-0 GWはシステム単位で使用します。また、Tier-1 GWとTier-0 GWではサポートしている機能が異なっています。例えば、物理ネットワークとNSX-Tの仮想ネットワーク間を接続する機能はTier-0 GWのみサポートしております。
また、Tier-1 GW、Tier-0 GWはDR(Distributed Router)、SR(Service Router)と呼ばれる2種類のコンポーネントで構成されます。
DRはSegment間のルーティングを実施するためのルータで、各ESXiホストに存在しています。
一方、SRはDHCPやLB等のソフトウェアベースの処理が必要な機能を提供するためのルータで、Edgeと呼ばれるNSX-T専用の仮想マシン上で動作しています。ESXiホストと同様にEdgeもTransport Nodeとして動作しているため、ESXiホストとEdge間ではGeneveを使用したオーバレイネットワークが構成されています。仮想マシンから受信したトラフィックをSRで処理する必要がある場合、ESXiホストはトラフィックをGeneveでカプセル化し、Edgeに転送します。
今回はTier-1 GWのDRを使用したSegment間のルーティングについて解説します。Tier-0 GW、SR、Edgeに関しては、別の記事で解説します。
ESXiホストに跨るSegment間のルーティング
2台のESXiホストに跨る通信でSegment間のルーティングが発生する場合、行きと戻りで通信フローが異なります。
NSX-Tの実装をAsymmetric IRB(Integarate Route and Bridge)と呼びます。最初に、送信元の仮想マシンが存在するESXiホストのDRでパケットをルーティングます。その後、Geneveでパケットをカプセル化をして、対向のESXiホストに転送します。宛先の仮想マシンが存在するESXiホストでは、DRでパケットをルーティングしません。
以下はESXi1のSegment 1に存在する仮想マシンからESXi2のSegment 2に存在する仮想マシンへの通信フローになります。
最初、ESXi1のDRがSegment 1からSegment 2にパケットをルーティングします。その後、Geneveでパケットをカプセル化し、ESXi2にパケットを転送します。この際、Segment 2のパケットをGeneveでカプセル化したため、GeneveヘッダにはSegment 2のVNIが格納されます。
ESXi2では、DRでパケットをルーティングせず、そのまま宛先の仮想マシンにパケットを転送します。
一方、以下はESXi2のSegment 2に存在する仮想マシンからESXi1のSegment 1に存在する仮想マシンへの通信フローになります。
最初、ESXi2のDRがSegment 2からSegment 1にパケットをルーティングします。その後、Geneveでパケットをカプセル化し、ESXi1にパケットを転送します。この際、Segment 1のパケットをGeneveでカプセル化したため、GeneveヘッダにはSegment 1のVNIが格納されます。
ESXi1では、DRでパケットをルーティングせず、そのまま宛先の仮想マシンにパケットを転送します。
上記のように、NSX-Tでは、同一の仮想マシン間の通信であっても、行きと戻りで通信フローが異なります。
Asymmetric IRBとは異なり、行きと戻りで通信フローが等しいSymmetric IRBと呼ばれる方式も存在します。Symmetric IRBではオーバレイの通信の際は、専用のVNIを使用します。この専用のVNIをL3 VNIと、仮想マシンやサーバが収容されているセグメントのVNIをL2 VNIと呼びます。
Anycast Gatewayについて
複数のESXiホストに展開されるDRの各インタフェースは同じIPアドレスとMACアドレスを保持しております。このような機能をAnycast Gatewayと呼ぶこともあります。
これにより、vMotionによって、仮想マシンが移動した場合でも、ルーティングテーブルやARPテーブルの変更無しで、仮想マシンは通信を継続できます。
vDSとDR間の接続について
各ESXiホストにおいて、Tier-1 GWやTier-0 GWのDRはVDR(Virtual Distributed Router)カーネルモジュールとして実装されています。
特定のVDRインスタンスに複数のSegmentを接続している場合や複数のVDRインスタンスが存在する場合でも、VDRカーネルモジュールとvDS間は1つのリンクで接続されています。
VDRカーネルモジュールと接続しているvDS側のポートをvdrPortと呼び、VLANのTrunk Portとして動作しています。
検証結果
検証内容、構成
ESXi1とESXi2をTransport Zoneに参加させ、ESXi1とESXi2に跨るL2オーバレイネットワークを構築します。
ESXi1とESXi2にTier-1 GWのDRを配置し、ESXiホストが10.1.1.0/24と10.2.2.0/24間のトラフィックをルーティングできるようにします。
アンダーレイの物理スイッチでは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
!
ip route 0.0.0.0 0.0.0.0 10.1.1.254
interface GigabitEthernet2
ip address 10.2.2.2 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.2.2.254
interface GigabitEthernet2
ip address 10.2.2.3 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.2.2.254
Tier-1 GWの作成
最初にTier-1 GWを作成します。ただし、Tier-1 GWを作成しただけでは、ESXiホスト上でTier-1 GWのDRは生成されません。
今回は、Tier-1 GWの名前を指定するのみです。
Tier-1 GWとSegment間の接続
Tier-1 GWとSegmentを接続したタイミングで、そのSegmentが展開されているESXiホスト上にTier-1 GWのDRが生成されます。
Segmentにおいて、接続先のTier-1 GWとゲートウェイ用のアドレスを指定します。
状態確認
トポロジーの確認(NSX ManagerのGUI)
Tier-1 GWとSegmentが接続されていることが確認できます。
Tier-1 GWの状態確認(NSX ManagerのCLI)
作成されたTier-1 GWの一覧はget logical-routersコマンドで確認できます。
nsx-manager1> get logical-routers
LR-ID LR-Name Router-Type ClusterId UUID
0x1 DR-Tier-1_GW DISTRIBUTED_ROUTER_TIER1 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8
Tier-1 GWのDRのインタフェースはget logical-router <UUID> interfacesコマンドで確認できます。Segment向けのインタフェースとアドレスが確認できます。
nsx-manager1> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 interfaces
Interface IP Urpf-Mode Admin-State-Up UUID
bp-dr-port 169.254.0.1/28 PORT_CHECK false 81f45e40-691a-45fc-91e8-3fd9048c7bb5
fe80::50:56ff:fe56:4452/64
infra-Segment1-dlrp 10.1.1.254/24 STRICT_MODE true 910a1dca-4574-4c20-8b4f-c7bad6863ba2
infra-Segment2-dlrp 10.2.2.254/24 STRICT_MODE true 3d5bc8de-8b4b-438e-b73d-294fa24acc62
Segmentのポート一覧を見ると、Tier-1 GWのDR向けのインタフェースが追加されていることが確認出来ます。
#Segment 1のポート情報
nsx-manager1> get logical-switch f865bcfe-dfab-4cba-bf88-94e24e20b391 ports
LogSwitchPort-ID LogSwitch-ID Child-UUID Child-EntityType TransportNode-ID
2e07f458-4430-4174-a678-85ab48d7e202 f865bcfe-dfab-4cba-bf88-94e24e20b391 7218f920-b8be-4f63-86a7-5ee8721fa902 Vif 12eabcd6-77ee-4d25-a57c-32ec97c638ea
894eeadf-043b-4a6c-8025-6686e8dc7924 f865bcfe-dfab-4cba-bf88-94e24e20b391 910a1dca-4574-4c20-8b4f-c7bad6863ba2 LogicalRouterPort af6f1ca6-7d47-488d-a220-744bd83ffc72
12eabcd6-77ee-4d25-a57c-32ec97c638ea
#Segment 2のポート情報
nsx-manager1> get logical-switch e83dd12e-e419-4fb9-b1f6-62655a7a567f ports
LogSwitchPort-ID LogSwitch-ID Child-UUID Child-EntityType TransportNode-ID
78793dcf-0553-41c1-b4bd-921645228a7d e83dd12e-e419-4fb9-b1f6-62655a7a567f 59023c1e-4a87-4c9b-a515-54f0291aaa4a Vif af6f1ca6-7d47-488d-a220-744bd83ffc72
488f1d81-a064-40de-807f-56753598aa3e e83dd12e-e419-4fb9-b1f6-62655a7a567f d2adbaab-2532-4599-87c7-ef160c2afc19 Vif 12eabcd6-77ee-4d25-a57c-32ec97c638ea
19eef7b4-399a-4ebf-adcb-f01ae0825992 e83dd12e-e419-4fb9-b1f6-62655a7a567f 3d5bc8de-8b4b-438e-b73d-294fa24acc62 LogicalRouterPort af6f1ca6-7d47-488d-a220-744bd83ffc72
12eabcd6-77ee-4d25-a57c-32ec97c638ea
Tier-1 GWのDRのルーティングテーブルはget logical-router <UUID> routeコマンドで確認できます。
nsx-manager1> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 route
Router/Cluster-UUID Destination Next-Hop LR-Port-Id Blackhole Blackhole-Action Route-Type Admin-Distance Admin-State-Up Route-UUID
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 10.1.1.0/24 N/A 910a1dca-4574-4c20-8b4f-c7bad6863ba2 false N/A CONNECTED 0 true 72f12704-c0b9-499e-9d80-c4415878a318
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 fe80::/64 N/A 81f45e40-691a-45fc-91e8-3fd9048c7bb5 false N/A CONNECTED 0 false ad0e94fa-b8b2-4e26-819b-010e3084de24
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 10.2.2.0/24 N/A 3d5bc8de-8b4b-438e-b73d-294fa24acc62 false N/A CONNECTED 0 true cbd181b3-f971-4834-b7fc-90107b0ae05d
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 169.254.0.0/28 N/A 81f45e40-691a-45fc-91e8-3fd9048c7bb5 false N/A CONNECTED 0 false 728748bb-d029-4eb3-8fff-b3941a154806
ESXiホストのNSX-Tの状態確認(ESXiホストのNSX-T CLI)
ESXiホスト上に作成されたTier-1 GWのDRはget logical-routersコマンドで確認できます。
ESXi1とESXi2の両方にTier-1 GWのDRが作成されていることが確認できます。
esxi1.local.com> get logical-routers
Logical Routers Summary
------------------------------------------------------------
VDR UUID LIF num Route num
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 2 2
esxi1.local.com> get logical-routers
Logical Routers Summary
------------------------------------------------------------
VDR UUID LIF num Route num
76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 2 2
ESXiホスト上に作成されたTier-1 GWのDRのインタフェースの状態はget logical-router <UUID> interfacesコマンドで確認できます。
ESXi1とESXi2が同じIPアドレス、MACアドレスを使用していることが確認できます。
esxi1.local.com> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 interfaces
Logical Router Interfaces
---------------------------------------------------------------------------
LIF UUID : 3d5bc8de-8b4b-438e-b73d-294fa24acc62
Mode : [b'Routing']
Overlay VNI : 65537
IP/Mask : 10.2.2.254/24
Mac : 02:50:56:56:44:52
Connected DVS : NSX-vDS1
Control plane enable : True
Replication Mode : 0.0.0.1
State : [b'Enabled']
Flags : 0x388
DHCP relay : Not enable
DAD-mode : ['LOOSE']
RA-mode : ['UNKNOWN']
LIF UUID : 910a1dca-4574-4c20-8b4f-c7bad6863ba2
Mode : [b'Routing']
Overlay VNI : 65536
IP/Mask : 10.1.1.254/24
Mac : 02:50:56:56:44:52
Connected DVS : NSX-vDS1
Control plane enable : True
Replication Mode : 0.0.0.1
State : [b'Enabled']
Flags : 0x388
DHCP relay : Not enable
DAD-mode : ['LOOSE']
RA-mode : ['UNKNOWN']
esxi2.local.com> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 interfaces
Logical Router Interfaces
---------------------------------------------------------------------------
LIF UUID : 3d5bc8de-8b4b-438e-b73d-294fa24acc62
Mode : [b'Routing']
Overlay VNI : 65537
IP/Mask : 10.2.2.254/24
Mac : 02:50:56:56:44:52
Connected DVS : NSX-vDS1
Control plane enable : True
Replication Mode : 0.0.0.1
State : [b'Enabled']
Flags : 0x388
DHCP relay : Not enable
DAD-mode : ['LOOSE']
RA-mode : ['UNKNOWN']
LIF UUID : 910a1dca-4574-4c20-8b4f-c7bad6863ba2
Mode : [b'Routing']
Overlay VNI : 65536
IP/Mask : 10.1.1.254/24
Mac : 02:50:56:56:44:52
Connected DVS : NSX-vDS1
Control plane enable : True
Replication Mode : 0.0.0.1
State : [b'Enabled']
Flags : 0x388
DHCP relay : Not enable
DAD-mode : ['LOOSE']
RA-mode : ['UNKNOWN']
ESXiホスト上に作成されたTier-1 GWのDRのルーティングテーブルはget logical-router <UUID> forwardingコマンドで確認できます。
esxi1.local.com> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 forwarding
Logical Routers Forwarding Table
-----------------------------------------------------------------------------------
Flags Legend: [U: Up], [G: Gateway], [C: Connected], [I: Interface]
[H: Host], [R: Reject], [B: Blackhole], [F: Soft Flush], [E: ECMP]
Network Gateway Type Interface UUID
===================================================================================
10.1.1.0/24 0.0.0.0 UCI 910a1dca-4574-4c20-8b4f-c7bad6863ba2
10.2.2.0/24 0.0.0.0 UCI 3d5bc8de-8b4b-438e-b73d-294fa24acc62
esxi2.local.com> get logical-router 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 forwarding
Logical Routers Forwarding Table
-----------------------------------------------------------------------------------
Flags Legend: [U: Up], [G: Gateway], [C: Connected], [I: Interface]
[H: Host], [R: Reject], [B: Blackhole], [F: Soft Flush], [E: ECMP]
Network Gateway Type Interface UUID
===================================================================================
10.1.1.0/24 0.0.0.0 UCI 910a1dca-4574-4c20-8b4f-c7bad6863ba2
10.2.2.0/24 0.0.0.0 UCI 3d5bc8de-8b4b-438e-b73d-294fa24acc62
Segment 2に接続している仮想マシンのARPテーブルの確認
ESXi1にデプロイされているR3とESXi2にデプロイされているR2のARPテーブルを見ると、10.2.2.254に対応するMACアドレスが同じであることが確認できます。
この結果から、Tier-1 GWのDRがAnycast Gatewayとして動作していることが確認できます。
R2#show ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.2.2.2 - 0050.56b9.b98a ARPA GigabitEthernet2
Internet 10.2.2.254 14 0250.5656.4452 ARPA GigabitEthernet2
R3#show ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.2.2.3 - 0050.56b9.4e1b ARPA GigabitEthernet2
Internet 10.2.2.254 15 0250.5656.4452 ARPA GigabitEthernet2
ESXiホストのvDSとVDRインスタンスの状態確認(ESXiホストのCLI)
ESXiホストのvDSを見ると、VDRカーネルモジュール向けのvdrPortが追加されていることが確認出来ます。
[root@esxi1:~] esxcfg-vswitch --list
Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 8836 19 128 1500 vmnic3
PortGroup Name VLAN ID Used Ports Uplinks
VM Network 0 15 vmnic3
Management Network 0 1 vmnic3
DVS Name Num Ports Used Ports Configured Ports MTU Uplinks
NSX-vDS1 8836 8 64 1600 vmnic0
DVPort ID In Use Client
1 1 vmnic0
vdrPort 1 vdr-vdrPort
spfPort5039f694fd3c10e9 0
d452743c-7a3f-423e-b8ac-ebd4b019d6c4 1 vmk10
8e7abf1f-f706-4c70-9311-db8a49eb0028 1 vmk50
2e07f458-4430-4174-a678-85ab48d7e202 1 R1.eth1
488f1d81-a064-40de-807f-56753598aa3e 1 R3.eth1
ESXiホスト上に作成されたVDRインスタンスはnet-vdr –instance -lコマンドで確認できます。
[root@esxi1:~] net-vdr --instance -l
DR Instance Information :
---------------------------
DR UUID: 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8
DR Id: 0x00000001
Number of Lifs: 2
Number of Routes: 65528
Number of Hold Pkts: 0
State: Enabled
Num unique nexthops: 0
Generation Number: 0
Edge Active: No
Pmac: 00:00:00:00:00:00
Dynamic resource pool tag: 65535
Multicast Routing: Disabled
VDRインスタンスのインタフェースの情報はnet-vdr –lif -l <UUID>コマンドで確認できます。
[root@esxi1:~] net-vdr --lif -l 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8
DR 76b9e6f7-15e1-4d42-bc54-cf3d7ac040b8 LIF Information :
UUID: 3d5bc8de-8b4b-438e-b73d-294fa24acc62
Mode: Routing, Downlink
Id: Overlay:65537
Ipv4/Mask: 10.2.2.254/24
Ipv6/Mask:
Mac: 02:50:56:56:44:52
Connected Dvs: NSX-vDS1
VXLAN Control Plane: Enabled
Replication Mode: 0.0.0.1
Multicast Routing: Disabled, Oper Down
State: Enabled
Flags: 0x388
DHCP Relay: Not enabled
DAD Mode: LOOSE
RA Mode: UNKNOWN
UUID: 910a1dca-4574-4c20-8b4f-c7bad6863ba2
Mode: Routing, Downlink
Id: Overlay:65536
Ipv4/Mask: 10.1.1.254/24
Ipv6/Mask:
Mac: 02:50:56:56:44:52
Connected Dvs: NSX-vDS1
VXLAN Control Plane: Enabled
Replication Mode: 0.0.0.1
Multicast Routing: Disabled, Oper Down
State: Enabled
Flags: 0x388
DHCP Relay: Not enabled
DAD Mode: LOOSE
RA Mode: UNKNOWN
疎通確認
ESXiホスト内で完結する通信(R1-R3間の通信)
R1の10.1.1.1からR3の10.2.2.3へPingを実施します。
R1の10.1.1.1からR3の10.2.2.3へのPingが成功することが確認できます。これより、Tier-1 GWを設定することで、ESXiホストがSegment間のパケットをルーティングできることが確認できます。
R1#ping 10.2.2.3 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.2.3, 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
トレースフローの結果を見ると、Tier-1 GWがパケットをルーティングしていることが確認できます。
2台のESXiホストに跨る通信(R1-R2間)
R1の10.1.1.1からR2の10.2.2.2へPingを実施します。
R1の10.1.1.1からR2の10.2.2.2へのPingが成功することが確認できます。これより、2台のESXiホストに跨る通信もルーティング可能なことが確認できます。
R1#ping 10.2.2.3 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.2.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.2.2.2へのICMP Echoになります。GeneveヘッダにSegment 2のVNI 65537が格納されていることが確認できます。
トレースフローの結果を見ると、ESXi1でSegment 1からSegment 2にパケットをルーティングしてから、Geneveでパケットをカプセル化し、物理ネットワーク側にパケットを転送していることが確認できます。
Asymmetric IRBの動作を確認するために、R2の10.2.2.2からR1の10.1.1.1への戻りのトラフィックの状態を確認します。
以下は物理ネットワーク側でキャプチャしたR2の10.2.2.2からR1の10.1.1.1へのICMP Echo Replyになります。GeneveヘッダにSegment 1のVNI 65536が格納されていることが確認できます。
トレースフローの結果を見ると、ESXi2でSegment 2からSegment 1にパケットをルーティングしてから、Geneveでパケットをカプセル化し、物理ネットワーク側にパケットを転送していることが確認できます。
コメント