NSX-T を REST API で操作してみます。
今回は、ラボで構成したルーティング/SNAT設定について API で追加設定してみます。
新規作成した Tier-1 論理ルータでのアドバタイズメント設定変更、
そして、Tier-0 論理ルータへのデフォルトルートと SNAT ルールの追加をします。
前回はこちら。
NSX-T 2.4 を REST API で操作してみる。Part.4
一連の投稿の前提/想定環境などは下記をどうぞ。
NSX-T 2.4 を REST API で操作してみる。Part.1
この投稿は、以前の下記投稿の API 版です。
自宅ラボで NSX-T 2.4 環境を構築する。Part.11
論理ルータ ID の取得。
今回の設定追加では、Tier-0/Tier-1 論理ルータ ID が必要になります。
論理ルータ ID の取得例はこれまでの投稿でも紹介しましたが、
下記のように NSX Manater の Web UI での表示名(display_name)と ID を一覧することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/logical-routers | jq -r '.results[] | {"LR_Name": .display_name, "ID": .id}'
{
"LR_Name": "t0-router-01",
"ID": "64f51cf0-bdf8-49d2-8a51-309b97b6ab40"
}
{
"LR_Name": "t1-router-001",
"ID": "b8c1e482-a6d0-47eb-aca3-315abf738c8f"
}
今回は、URI の一部としてルータ ID を指定したいので、変数に格納しておきます。
たとえば、下記のようなコマンドラインでもルータ ID を取得できます。
Tier-0 論理ルータの ID です。
$ T0_LR_ID=`curl -ks -u $CRED -X GET https://$MGR/api/v1/logical-routers | jq -r '.results[] | select(.router_type=="TIER0" and .display_name=="t0-router-01") | .id'`
$ echo $T0_LR_ID
64f51cf0-bdf8-49d2-8a51-309b97b6ab40
Tier-1 論理ルータの ID です。
$ T1_LR_ID=`curl -ks -u $CRED -X GET https://$MGR/api/v1/logical-routers | jq -r '.results[] | select(.router_type=="TIER1" and .display_name=="t1-router-001") | .id'`
$ echo $T1_LR_ID
b8c1e482-a6d0-47eb-aca3-315abf738c8f
Tier-1 論理ルータのアドバタイズメント設定変更。
API で新規作成した Tier-1 論理ルータの、ルート アドバタイズメントの有効化と、
念のため、現在のアドバタイズメント設定の _revision を確認しておきます。
「$T1_LR_ID」には、前の手順で取得した論理ルータ ID が含まれています。
数値がゼロ以外の場合は、JSON ファイルでもその値にあわせます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/logical-routers/$T1_LR_ID/routing/advertisement | jq -r '._revision'
0
JSON ファイルを作成します。
今回は、アドバタイズの状態と、「すべての接続ルートをアドバタイズ」にあたる
advertise_nsx_connected_routes を有効にします。
t1-adv-rule.json
{
"resource_type" : "AdvertisementConfig",
"enabled" : true,
"advertise_nsx_connected_routes" : true,
"_revision" : 0
}
そして、アドバタイズを設定変更します。
$ curl -ks -u $CRED -X PUT -H "Content-type: application/json" -d @./t1-adv-rule.json https://$MGR/api/v1/logical-routers/$T1_LR_ID/routing/advertisement
Tier-0 論理ルータへのスタティック ルート追加。
NSX-T のラボ環境で必須というわけではありませんが、Tier-0 ルータへのスタティック ルートを追加します。
下記のような、ルーティング情報の JSON ファイルを作成します。
デフォルト ルートとして、「"network": "0.0.0.0/0"」宛のネクスト ホップとして、192.168.1.46 を指定しています。
※宛先の IP アドレスは、前提環境としてNSX-T ネットワークの外部に用意してあるゲートウェイです。
t0-default-route-01.json
{
"display_name": "t0-default-route-01",
"network": "0.0.0.0/0",
"next_hops": [
{
"ip_address": "192.168.1.1",
"administrative_distance": 1
}
]
}
下記のようなコマンドラインで、スタティックルートを追加できます。
「$T0_LR_ID」には、前の手順で取得した論理ルータ ID が含まれています。
$ curl -ks -u $CRED -X POST -H "Content-type: application/json" -d @./t0-default-route-01.json https://$MGR/api/v1/logical-routers/$T0_LR_ID/routing/static-routes
Tier-0 ルータへの SNAT ルール追加。
これも必須ではありませんが、Tier-0 論理ルータへの SNAT ルールを追加しておきます。
SNAT ルールは Tier-0/Tier-1 どちらでも設定できますが、
今回はこの環境のネットワーク構成にあわせて Tier-0 ルータで設定します。
今回は、172.16.1.0/24 からのソース アドレスを 192.168.1.46 に変換します。
ルール適用するポートは、論理ルータ ポート ID で指定します。
Tier-0 論理ルータ ポートは、下記のように情報取得することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/logical-router-ports?logical_router_id=$T0_LR_ID
下記のような JSON ファイルを用意します。
applied_tos には、適用先の Tier-0 論理ルータ ポートの情報を指定しています。
t0-nat-rule-01.json
{
"action": "SNAT",
"match_source_network": "172.16.1.0/24",
"translated_network": "192.168.1.46",
"enabled": true,
"applied_tos": [
{
"target_id": "ルール適用先の Tier-0 論理ルータ ポート ID",
"target_display_name": "t0-uplink-port",
"target_type": "LogicalRouterPort",
"is_valid": true
}
]
}
そして、下記のようなコマンドラインで SNAT ルールを追加します。
$ curl -ks -u $CRED -X POST -H "Content-type: application/json" -d @./t0-nat-rule-01.json https://$MGR/api/v1/logical-routers/$T0_LR_ID/nat/rules
これで API を利用して、以前に構築した NSX-T のテナントネットワークと同様のラボ環境ができました。
ID の取得や JSON ファイルの生成なども含めて、一連の手順をスクリプトにしておくと、
複数環境の構成を自動化したりできるかなと思います。
以上、NSX-T 2.4 を API で操作してみる話でした。