自宅で検証できそうなスペックに合わせたNSX-Tのインストール手順を紹介します。NSX Manager 3台, NSX Edge 2台, ESXi 2台, vCenter 1台の構成で、このページではT1ゲートウェイとセグメントの作成をまとめます。
構築範囲
このページでは、セグメントを作成し仮想マシン間の疎通可能な状態まで構築します。構築範囲を図示すると以下の範囲です。
NSX-T ネットワーク関連の設定
Tier-1ゲートウェイの作成
「ネットワーク」「Tier-1ゲートウェイ」「Tier-1ゲートウェイの追加」の順に押下します。
「Tier-0ゲートウェイ」を入力し、「リンクされたTier-0ゲートウェイ」は前述の操作で作成したTier-0ゲートウェイを指定します。Edgeクラスタも前述の操作で作成したクラスタを指定します。
Tier-0ゲートウェイとTier-1ゲートウェイをリンクさせないと、Tier-1ゲートウェイ間の疎通が不能になります。
「ルートアドバタイズ」を押下し、プルダウンを開きます。
「接続されているすべてのセグメントおよびサービスポート」を有効にします。
これを有効にしないと異なるTier-1ゲートウェイ間の疎通が不能になります。
「保存」を押下します。
同様の操作を繰り返し、もう1つTier-1ゲートウェイを作成します。
セグメントの作成
「ネットワーク」「セグメント」「セグメント」「セグメントの追加」の順に押下します。
「セグメント名」は何か分かりやすい名前を、「接続せれたゲートウェイ」は「Tier-0ゲートウェイ」を、「トランスポートゾーン」はオーバーレイのトランスポートゾーンを、「サブネット」はサーバのデフォルトゲートウェイとなるIPアドレスとサブネットマスクを指定します。
「保存」を押下します。
同様の操作を繰り返し、以下のセグメントを作成します。
疎通確認
仮想マシン作成
以上のセグメント作成を完了すると、仮想マシンを構築するときにNSX-Tのセグメントをポートグループとして指定することができます。動作確認のために仮想マシンを作成します。
ポートグループ指定のプルダウンメニューを開きます。
NSX-Tで作成したセグメントの指定が可能になっていることを確認します。
NSX-Tで作成したセグメントを仮想マシンへ設定できたことを確認します。
pingなどの疎通確認
異なるセグメントへ疎通可能になったことを確認します。
この時点では仮想マシンはNSX-T外の物理ルータなどを疎通できる状態ではありません。コンソール経由でログインし疎通確認してください。以下のテキストベースのログは後述の「NSX-T 3.1.2 最小限構成のインストール方法 (7/7)」が完了してから採取したものです。
[root@centos50 ~]# ping 192.168.51.51 -c 3 PING 192.168.51.51 (192.168.51.51) 56(84) bytes of data. 64 bytes from 192.168.51.51: icmp_seq=1 ttl=63 time=3.75 ms 64 bytes from 192.168.51.51: icmp_seq=2 ttl=63 time=0.763 ms 64 bytes from 192.168.51.51: icmp_seq=3 ttl=63 time=0.696 ms --- 192.168.51.51 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 15ms rtt min/avg/max/mdev = 0.696/1.735/3.746/1.422 ms [root@centos50 ~]# [root@centos50 ~]# [root@centos50 ~]# ping 192.168.60.60 -c 3 PING 192.168.60.60 (192.168.60.60) 56(84) bytes of data. 64 bytes from 192.168.60.60: icmp_seq=1 ttl=61 time=1.37 ms 64 bytes from 192.168.60.60: icmp_seq=2 ttl=61 time=0.996 ms 64 bytes from 192.168.60.60: icmp_seq=3 ttl=61 time=0.820 ms --- 192.168.60.60 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 0.820/1.060/1.366/0.230 ms [root@centos50 ~]# [root@centos50 ~]# [root@centos50 ~]# tracepath 192.168.51.51 1?: [LOCALHOST] pmtu 1500 1: _gateway 0.250ms asymm 64 1: _gateway 0.205ms asymm 64 2: 192.168.51.51 1.254ms !H Resume: pmtu 1500 [root@centos50 ~]# [root@centos50 ~]# [root@centos50 ~]# tracepath 192.168.60.60 1?: [LOCALHOST] pmtu 1500 1: _gateway 0.315ms asymm 64 1: _gateway 0.236ms asymm 64 2: 100.64.128.0 0.622ms 3: 100.64.128.3 0.368ms 4: 192.168.60.60 1.236ms !H Resume: pmtu 1500 [root@centos50 ~]#
補足説明
トラブル調査
トンネルの確立異常
以下ログのような同一筐体内の仮想マシンは疎通可能であるものの別筐体の仮想マシンが疎通不能となる場合は、ホストトランスポートノード(ESXi)のトンネル設定に誤りがある可能性を疑います。
[root@centos50 ~]# ping -c 3 192.168.60.60 PING 192.168.60.60 (192.168.60.60) 56(84) bytes of data. 64 bytes from 192.168.60.60: icmp_seq=1 ttl=61 time=2.73 ms 64 bytes from 192.168.60.60: icmp_seq=2 ttl=61 time=0.845 ms 64 bytes from 192.168.60.60: icmp_seq=3 ttl=61 time=0.874 ms --- 192.168.60.60 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 0.845/1.481/2.725/0.880 ms [root@centos50 ~]# [root@centos50 ~]# [root@centos50 ~]# ping -c 3 192.168.51.51 PING 192.168.51.51 (192.168.51.51) 56(84) bytes of data. --- 192.168.51.51 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 109ms [root@centos50 ~]# [root@centos50 ~]# [root@centos50 ~]# ping -c 3 192.168.61.61 PING 192.168.61.61 (192.168.61.61) 56(84) bytes of data. --- 192.168.61.61 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 70ms [root@centos50 ~]#
トンネルに異常があるかどうかは「システム」「ファブリック」「ノード」「ホストトランスポートノード」の順に押下して現れるホストトランスポートノード一覧の画面を確認します。「トンネル」欄で正常に確立されたトンネルが緑で表示され、異常があるトンネルが赤で表示されます。
以下スクリーンショットの例ならば、「192.168.1.141」は正常に確立されたトンネルがあるものの、「192.168.1.142」は全てのトンネルが異常であることが読み取れます。このような場合ならば、「192.168.1.142」の設定誤りである可能性を考えます。
ここでホストトランスポートノード名をクリックすると、より詳細な画面へ遷移できます。
以下スクリーンショットの場合ならば、「192.168.2.141」と「192.168.2.142」の間が疎通不能になっていることが読み取れます。
設定誤りを修正する場合はESXiの再インストールからやり直す必要はありません。ホストトランスポートノードの一覧画面にて、修正対象のホストトランスポートノードにチェックを入れ「NSXの設定」を押下します。
設定誤りのある部分を修正し、「終了」を押下します。
疎通は比較的早く回復しますが、表示が「正常(緑色)」に変わるには5分, 10分の時間を要します。表示が変わらなくても正常な設定の可能性がありますので、気長に待ちましょう。
GUIルーティングテーブル確認
「ネットワーク」「ネットワーク トポロジ」の順に押下すると、機械的に生成されたネットワークの俯瞰図を見ることができます。
ここでTier-0ゲートウェイやTier-1ゲートウェイを押下すると、「フォワーディングテーブル(ルーティングテーブル)ダウンロード」などの解析メニューが現れます。「フォワーディングテーブル ダウンロード」を押下します。
どの機器のフォワーディングテーブルをダウンロードするかを指定し、「ダウンロード」を押下します。
厳密に言えば、Tier-0ゲートウェイやTier-1ゲートウェイはSR(サービスルータ)とDR(分散ルータ)の2つのアーキテクチャで構成されます。NSX Edgeに配置されるのがSRで、各ホストトランスポートノードに分散されて配置されるのがDRです。
ダウンロードされたルーティングテーブルはcsv形式になっています。
CLIルーティングテーブル確認
NSX Edgeにadminユーザでログインすれば、CLI操作でルーティングテーブルを確認することもできます。
まずは「get logical-router」コマンドで調査対象のUUIDを調べます。
nsxt-manager121> get logical-router Mon May 03 2021 UTC 01:57:50.952 LR-ID LR-Name Router-Type ClusterId UUID 0x6 DR-t1-router6X DISTRIBUTED_ROUTER_TIER1 ad6ce737-b388-403f-ae1a-ab7d9c975ebd 0x1 DR-t0-router DISTRIBUTED_ROUTER_TIER0 bb48d269-9fb6-472d-8b35-d008c3b6d457 0x5 SR-t1-router5X SERVICE_ROUTER_TIER1 00002000-0000-0000-0000-000000000004 867f79b4-44b2-4819-8d59-0013c0d60394 0x3 SR-t0-router SERVICE_ROUTER_TIER0 00002000-0000-0000-0000-000000000001 85841971-4f5b-4404-8150-10a1553cda9d 0x4 DR-t1-router5X DISTRIBUTED_ROUTER_TIER1 112a9659-8c91-433a-8788-f804716fdfa1 0x2 SR-t0-router SERVICE_ROUTER_TIER0 00002000-0000-0000-0000-000000000001 8933db2c-671a-43df-b300-262ac8fd7b30 0x7 SR-t1-router6X SERVICE_ROUTER_TIER1 00002000-0000-0000-0000-000000000006 38830c7f-4914-4a3a-b90d-74f4f97ba59f
引数にUUIDを指定すると、以下のようにルーティングテーブルを閲覧することができます。
nsxt-manager121> get logical-router ad6ce737-b388-403f-ae1a-ab7d9c975ebd route Mon May 03 2021 UTC 01:59:06.320 Router/Cluster-UUID Destination Next-Hop LR-Port-Id Blackhole Blackhole-Action Route-Type Admin-Distance Admin-State-Up Route-UUID ad6ce737-b388-403f-ae1a-ab7d9c975ebd 192.168.60.0/24 N/A da47d72a-9c59-439d-bead-f83293c97b48 false N/A CONNECTED 0 true fc906c1a-e9da-4b00-93d0-52a8786fe6b7 ad6ce737-b388-403f-ae1a-ab7d9c975ebd ::/0 fe80::50:56ff:fe56:5300 8bfcc44f-f41f-443b-a5c8-6ddfea77102e false N/A NSX_CONNECTED 250 true f706ef35-b246-4aa8-b12d-8b54d665f404 ad6ce737-b388-403f-ae1a-ab7d9c975ebd 169.254.0.0/28 N/A 8bfcc44f-f41f-443b-a5c8-6ddfea77102e false N/A CONNECTED 0 true b268c4a8-52a6-437c-a5fa-2d9b3d895dc4 ad6ce737-b388-403f-ae1a-ab7d9c975ebd fe80::/64 N/A 8bfcc44f-f41f-443b-a5c8-6ddfea77102e false N/A CONNECTED 0 true fa2ed313-a673-4db4-b046-21b278d04846 ad6ce737-b388-403f-ae1a-ab7d9c975ebd 192.168.61.0/24 N/A d2d2b132-496b-4e49-acc8-b56989b77050 false N/A CONNECTED 0 true c255a10b-dcd4-41cb-9e92-8480aba097ae ad6ce737-b388-403f-ae1a-ab7d9c975ebd 0.0.0.0/0 169.254.0.2 8bfcc44f-f41f-443b-a5c8-6ddfea77102e false N/A NSX_CONNECTED 250 true 2aed6d61-15ab-41dd-929b-d5293eb908df
補足説明
自動化
Tier-1ゲートウェイの作成
Tier-1ゲートウェイを作成するRest API操作は以下の通りです。
CLUSTER_NAME="cluster01" CLUSTER_ID=$(curl --request GET \ -u admin:P@ssw0rdP@ssw0rd \ --header "Content-Type:application/json" \ -k https://192.168.1.121/api/v1/edge-clusters \ | jq -r --arg arg ${CLUSTER_NAME} ' .results[] | select ( .display_name == $arg ) | .id ' ) curl --request PUT -d @- \ -u admin:P@ssw0rdP@ssw0rd \ --header "Content-Type:application/json" \ -k https://192.168.1.121/policy/api/v1/infra/tier-1s/t1-router5X << EOF { "tier0_path" : "/infra/tier-0s/t0-router", "resource_type" : "Tier1", "display_name" : "t1-router5X", "route_advertisement_types" : [ "TIER1_CONNECTED" ] } EOF curl --request PUT -d @- \ -u admin:P@ssw0rdP@ssw0rd \ --header "Content-Type:application/json" \ -k https://192.168.1.121/policy/api/v1/infra/tier-1s/t1-router5X/locale-services/default << EOF { "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/${CLUSTER_ID}", "resource_type" : "LocaleServices", "display_name" : "default" } EOF
セグメントの作成
セグメントを作成するRest API操作は以下の通りです。
TZ_OVERLAY_NAME="tz-overlay-01" TZ_OVERLAY_ID=$(curl --request GET \ -u admin:P@ssw0rdP@ssw0rd \ --header "Content-Type:application/json" \ -k https://192.168.1.121/api/v1/transport-zones \ | jq -r --arg arg ${TZ_OVERLAY_NAME} ' .results[] | select ( .display_name == $arg ) | .id ' ) curl --request PUT -d @- \ -u admin:P@ssw0rdP@ssw0rd \ --header "Content-Type:application/json" \ -k https://192.168.1.121/policy/api/v1/infra/segments/seg50 << EOF { "type" : "ROUTED", "subnets" : [ { "gateway_address" : "192.168.50.1/24" } ], "vlan_ids" : [ "0" ], "connectivity_path" : "/infra/tier-1s/t1-router5X", "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/${TZ_OVERLAY_ID}", "resource_type" : "Segment", "display_name" : "seg50" } EOF