今回は、NSX-T のオブジェクトを、ひとつずつ Policy API で作成してみます。
作成する環境は、この投稿で紹介した状態に近いものです。
自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1(Web UI から作成)
NSX-T の Policy API をためす。Part.1(GET 編)
今回も、Linux の curl コマンドと、jq コマンドをインストールして利用しています。
$ cat /etc/oracle-release
Oracle Linux Server release 7.7
$ jq -V
jq-1.5
前回までと同様の変数も設定しています。
- MGR: NSX Manager のアドレス
- CRED: NSX Manager の「ユーザ:パスワード」 ※例はよくあるデモ用パスワード。
$ MGR=lab-nsxt-mgr-01.go-lab.jp
$ CRED='admin:VMware1!VMware1!'
curl コマンドでは、次のように API の URL を指定して実行します。
いくつかオプションも指定しています。
- -k: SSL 証明書エラーの無視。(ラボ環境なので)
- -s: サイレント モード。進捗表示などを抑止。
- -u: ログイン 情報を指定。
- -H: ヘッダーで JSON データを扱うことを指定。"Content-Type: application/json"
- -X: メソッド指定。今回は GET のみ。(じつは省略可)
VLAN セグメントの作成。
NSX-T の Policy API でオブジェクト作成/更新では、PATCH メソッド、もしくは PUT メソッドです。
今回は、PATCH メソッドを実行していきます。
あらかじめ JSON 形式のデータで、オブジェクトのパラメータを用意しておきます。
VLAN セグメントではトランスポート ゾーンを指定する必要があります。
あらためて API でオブジェクトごとの情報を取得することもできますが、
ここでは以前の投稿で GET した情報(一度 UI で作成したオブジェクトの情報)をもとに Path や ID などを特定しておきます。
NSX-T の Policy API をためす。Part.1(GET 編)
seg-vlan-0200.json
{
"transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",
"vlan_ids": [
"200"
]
}
JSON ファイルを指定して PATCH メソッドを実行すると、オブジェクトが作成されます。
オブジェクトの表示名(display_name)は省略しているので、URL で指定した ID と同じものになります。
PATCH /policy/api/v1/infra/segments/セグメントの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./seg-vlan-0200.json https://$MGR/policy/api/v1/infra/segments/seg-vlan-0200
Tier-0 ゲートウェイの作成。
Tier-0 ゲートウェイの作成。
「アクティブ/スタンバイ」モードにするパラメータだけ指定した JSON ファイルを用意しました。
t0-gw-01.json
{
"ha_mode" : "ACTIVE_STANDBY"
}
Tier-0 ゲートウェイを作成します。
PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01
Tier-0 ゲートウェイへの LocaleServices の追加。
Tier-0 ゲートウェイに、Edge クラスタを割り当てる LocaleServices を追加します。
Edge クラスタのパスは、以前の投稿での GET メソッドで確認したものです。
Edge トランスポート ノードの指定は、1つしかないので省略しています。
t0-gw-01_locale-services.json
{
"edge_cluster_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae"
}
LocaleServices では ID が UUID 形式だったので、
今回は Linux の uuidgen コマンドで生成したものを指定します。
UUID は、変数 T0_LOC_ID に格納しました。
$ T0_LOC_ID=$(uuidgen)
JSON ファイルを指定して、LocaleServices を追加します。
PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_locale-services.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID
Tier-0 ゲートウェイへのインターフェース追加。
LocaleServices に、VLAN セグメントに接続するインタフェースを追加します。
Policy API では、インターフェースは LocaleServices の一部として扱われています。
Edge トランスポート ノードのパスは、以前の投稿での GET メソッドで確認したものです。
t0-gw-01_t0-uplink-01.json
{
"segment_path" : "/infra/segments/seg-vlan-0200",
"type" : "EXTERNAL",
"subnets" : [ {
"ip_addresses" : [ "192.168.200.2" ],
"prefix_len" : 24
} ],
"edge_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900"
}
インターフェースを追加します。
PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID/interfaces/インターフェースの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_t0-uplink-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID/interfaces/t0-uplink-01
Tier-0 ゲートウェイへの SNAT ルールの追加。
ここでも、JSON ファイルを用意します。
t0-snat-01.json
{
"action": "SNAT",
"display_name": "t0-snat-01",
"enabled": true,
"sequence_number": 100,
"source_network": "172.16.0.0/16",
"translated_network": "192.168.200.2",
"logging": false
}
UI で NAT ルールを作成すると UUID 形式になるため、それに合わせます。
ここでも、さきほどと同様に uuidgen コマンドで UUID を生成します。
$ NAT_ID=$(uuidgen)
NAT ルールを追加します。
PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/nat/USER/nat-rules/NAT ルールの ID
$ curl -ks -u $CRED -X PATCH -H "Content-type: application/json" -d @./t0-snat-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/$NAT_ID
Tier-0 ゲートウェイへのスタティックルートの追加。
JSON ファイルを作成します。
t0-gw-01_static-route.json
{
"network": "0.0.0.0/0",
"next_hops": [
{
"ip_address": "192.168.200.1",
"admin_distance": 1
}
]
}
PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/static-routes/ルートの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_static-route.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/static-routes/t0-route-01
Tier-1 ゲートウェイの作成。
Tier-1 ゲートウェイの作成。
JSON ファイルを作成します。
今回は後から DHCP サーバを接続するため、この時点の JSON はシンプルです。
t1-gw-01.json
{
"tier0_path": "/infra/tier-0s/t0-gw-01",
"route_advertisement_types": [
"TIER1_CONNECTED"
]
}
Tier-1 ゲートウェイを作成します。
PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t1-gw-01.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01
Tier-1 ゲートウェイへの LocaleServices の追加。
Tier-1 ゲートウェイの Edge 割り当てをする LocaleServices を追加します。
Edge 関連のパスは、以前の投稿での GET メソッドで確認したものを指定しています。
t1-gw-01_locale-services.json
{
"edge_cluster_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",
"preferred_edge_paths": [
"/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900"
]
}
Tier-0 の LocaleServices と同様に、UUID を生成しておきます。
$ T1_LOC_ID=$(uuidgen)
LocaleServices を追加します。
PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/locale-services/LocaleServices の ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t1-gw-01_locale-services.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services/$T1_LOC_ID
DHCP サーバの追加。
JSON ファイルを用意します。
dhcp-sv-01.json
{
"display_name" : "dhcp-sv-01",
"server_address" : "172.16.254.254/24",
"lease_time" : 86400
}
DHCP サーバを追加します。
これは、あとで Tier-1 ゲートウェイに接続します。
PATCH /policy/api/v1/infra/dhcp-server-configs/DHCP サーバの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./dhcp-sv-01.json https://$MGR/policy/api/v1/infra/dhcp-server-configs/dhcp-sv-01
DNS フォワーダ ゾーンの追加。
DNS フォワーダ ゾーンの追加。
JSON ファイルを用意します。
dns-zone-01.json
{
"display_name" : "dns-zone-01",
"upstream_servers" : [ "192.168.1.101", "192.168.1.102" ]
}
DNS フォワーダのゾーン(UI での デフォルト ゾーン)を追加します。
PATCH /policy/api/v1/infra/dns-forwarder-zones/DNS フォワーダ ゾーンの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./dns-zone-01.json https://$MGR/policy/api/v1/infra/dns-forwarder-zones/dns-zone-01
DNS フォワーダの追加。
JSON ファイルを用意します。
直前に作成したデフォルト ゾーンのパスも指定します。
dns-forwarder.json
{
"display_name" : "dns-sv-01",
"listener_ip" : "172.16.253.254",
"default_forwarder_zone_path" : "/infra/dns-forwarder-zones/dns-zone-01",
"enabled" : true
}
DNS フォワーダを追加します。
PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/dns-forwarder
$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./dns-forwarder.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/dns-forwarder
Tier-1 ゲートウェイへの DHCP サーバ接続。
前の手順で作成した DHCP サーバを、Tier-1 ゲートウェイに接続します。
ここだけは、オブジェクト更新なので PUT メソッドを利用しています。
PUT では _revision の数値をチェックするので、Tier-1 ゲートウェイの現在の _revision を直前に確認する必要があります。
ここでは、作成直後なので「"_revision" : 1」です。
(作成したばかりのオブジェクトはまず 1 になります)
Tier-1 ゲートウェイの _revision は、次のように GET メソッドで確認することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01 | jq -r ._revision
1
あわせて、DNS フォワーダのために
route_advertisement_types に TIER1_DNS_FORWARDER_IP を追記しています。
t1-gw-01_full.json
{
"tier0_path": "/infra/tier-0s/t0-gw-01",
"route_advertisement_types": [
"TIER1_DNS_FORWARDER_IP",
"TIER1_CONNECTED"
],
"dhcp_config_paths": [
"/infra/dhcp-server-configs/dhcp-sv-01"
],
"_revision": 1
}
ここだけは、作成ずみオブジェクトの更新なので、PUT メソッドです。
PUT /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID
$ curl -ks -u $CRED -H "Content-Type: application/json" -X PUT -d @./t1-gw-01_full.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01
オーバーレイ セグメントの作成。(2つ)
最後に、オーバーレイ セグメントを作成します。
API の URL は、最初に作成した VLAN セグメントと同じものです。
JSON ファイルは、それぞれ DHCP での IP アドレス範囲も指定しています。
seg-overlay-01.json
{
"subnets" : [ {
"gateway_address" : "172.16.1.1/24",
"dhcp_ranges" : [ "172.16.1.10-172.16.1.250" ],
"network" : "172.16.1.0/24"
} ],
"connectivity_path" : "/infra/tier-1s/t1-gw-01",
"transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8"
}
1つめのオーバーレイ セグメントを作成します。
$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./seg-overlay-01.json https://$MGR/policy/api/v1/infra/segments/seg-overlay-01
seg-overlay-02.json
{
"type" : "ROUTED",
"subnets" : [ {
"gateway_address" : "172.16.2.1/24",
"dhcp_ranges" : [ "172.16.2.10-172.16.2.250" ],
"network" : "172.16.2.0/24"
} ],
"connectivity_path" : "/infra/tier-1s/t1-gw-01",
"transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8"
}
2つめのオーバーレイ セグメントを作成します。
$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./seg-overlay-02.json https://$MGR/policy/api/v1/infra/segments/seg-overlay-02
ここまでに作成したオブジェクトは、NSX Manager の UI、もしくは
Part.1 の投稿で紹介した GET メソッドで確認できるはずです。
NSX-T の Policy API をためす。Part.1(GET 編)
以上、Policy API で NSX-T のオブジェクトを作成してみる話でした。