以前に、NSX-T の新しい UI でのラボ環境構築を紹介しました。
この UI は、新しい Policy API にもとづくもので、Simplified UI や Policy UI と呼ばれています。
自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1
ここまでに Simplified UI で作成した NSX-T 環境のオブジェクト情報を、Policy API で取得してみます。
ラボのイメージは下記です。
※Policy API の操作対象外となる Edge クラスタやトランスポート ゾーンなどは省略しています。
※NSX Manager も図からは省略しています。
API へのアクセスには、Linux の curl コマンドを利用します。
$ cat /etc/oracle-release
Oracle Linux Server release 7.7
API エンドポイントは NSX Manager です。
そして情報取得だけなので、ひたすら GET メソッドを利用します。
なお、curl のコマンドラインが長くなるので、一部の情報を変数に格納して利用しています。
- MGR: NSX Manager のアドレス
- CRED: NSX Manager のユーザ:パスワード
$ MGR=lab-nsxt-mgr-01.go-lab.jp
$ CRED='admin:VMware1!VMware1!'
セグメント。
セグメントは、VLAN/オーバレイのどちらも、次の URL で取得できます。
GET /policy/api/v1/infra/segments
curl コマンドでは、次のように実行します。
いくつかオプションを指定しています。
- -k: SSL 証明書エラーの無視。(ラボ環境なので)
- -s: サイレント モード。進捗表示などを抑止。
- -u: ログイン 情報を指定。
- -X: メソッド指定。今回は GET のみ。(じつは省略可)
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments
実際にセグメントの情報を取得すると、次のようになります。
セグメントは 3つ(seg-vlan-0200、seg-overlay-01、seg-overlay-02)作成されています。
従来の NSX の API とは異なり、Simplified UI によるオブジェクト作成では、ID と表示名(display_name)が揃えられています。
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments
{
"results" : [ {
"type" : "ROUTED",
"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",
"advanced_config" : {
"address_pool_paths" : [ ],
"hybrid" : false,
"local_egress" : false,
"connectivity" : "ON"
},
"resource_type" : "Segment",
"id" : "seg-overlay-01",
"display_name" : "seg-overlay-01",
"path" : "/infra/segments/seg-overlay-01",
"relative_path" : "seg-overlay-01",
"parent_path" : "/infra/segments/seg-overlay-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572769486202,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572770491070,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 1
}, {
"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",
"advanced_config" : {
"address_pool_paths" : [ ],
"hybrid" : false,
"local_egress" : false,
"connectivity" : "ON"
},
"resource_type" : "Segment",
"id" : "seg-overlay-02",
"display_name" : "seg-overlay-02",
"path" : "/infra/segments/seg-overlay-02",
"relative_path" : "seg-overlay-02",
"parent_path" : "/infra/segments/seg-overlay-02",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572771593680,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572771593680,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
}, {
"type" : "DISCONNECTED",
"vlan_ids" : [ "200" ],
"transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",
"advanced_config" : {
"address_pool_paths" : [ ],
"hybrid" : false,
"local_egress" : false,
"connectivity" : "ON"
},
"resource_type" : "Segment",
"id" : "seg-vlan-0200",
"display_name" : "seg-vlan-0200",
"path" : "/infra/segments/seg-vlan-0200",
"relative_path" : "seg-vlan-0200",
"parent_path" : "/infra/segments/seg-vlan-0200",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572768517065,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572768517065,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 3,
"sort_by" : "display_name",
"sort_ascending" : true
}
個別でセグメント情報を取得するには、URL にセグメントの ID を指定します。
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments/seg-overlay-01
{
"type" : "ROUTED",
"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",
"advanced_config" : {
"address_pool_paths" : [ ],
"hybrid" : false,
"local_egress" : false,
"connectivity" : "ON"
},
"resource_type" : "Segment",
"id" : "seg-overlay-01",
"display_name" : "seg-overlay-01",
"path" : "/infra/segments/seg-overlay-01",
"relative_path" : "seg-overlay-01",
"parent_path" : "/infra/segments/seg-overlay-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572769486202,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572770491070,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 1
}
オーバーレイ セグメント「seg-overlay-01」は、VM の vNIC にポートグループとして割り当ててあります。
そのため、論理ポートも作成されています。
display_name から、接続先 VM が予想できます。
GET /policy/api/v1/infra/segments/セグメント ID/ports
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments/seg-overlay-01/ports
{
"results" : [ {
"resource_type" : "SegmentPort",
"id" : "default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",
"display_name" : "vm01/vm01.vmx@3c436657-571b-4bb3-b617-2dcfdcf2ba59",
"tags" : [ ],
"path" : "/infra/segments/seg-overlay-01/ports/default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",
"relative_path" : "default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",
"parent_path" : "/infra/segments/seg-overlay-01",
"marked_for_delete" : false,
"_create_user" : "system",
"_create_time" : 1572779101569,
"_last_modified_user" : "system",
"_last_modified_time" : 1572779101569,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
}, {
"resource_type" : "SegmentPort",
"id" : "default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",
"display_name" : "vm02/vm02.vmx@92e5beee-20a2-4ba7-8372-ce49aace34fc",
"tags" : [ ],
"path" : "/infra/segments/seg-overlay-01/ports/default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",
"relative_path" : "default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",
"parent_path" : "/infra/segments/seg-overlay-01",
"marked_for_delete" : false,
"_create_user" : "system",
"_create_time" : 1572779101405,
"_last_modified_user" : "system",
"_last_modified_time" : 1572779101405,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 2,
"sort_by" : "display_name",
"sort_ascending" : true
}
Tier-0 ゲートウェイ。
Tier-0 ゲートウェイの情報を取得してみます。
UI では特に指定していませんでしたが、トランジット セグメントのネットワーク アドレスなどもわかります。
GET /policy/api/v1/infra/tier-0s
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s
{
"results" : [ {
"transit_subnets" : [ "100.64.0.0/16" ],
"internal_transit_subnets" : [ "169.254.0.0/28" ],
"ha_mode" : "ACTIVE_STANDBY",
"failover_mode" : "NON_PREEMPTIVE",
"ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],
"force_whitelisting" : false,
"default_rule_logging" : false,
"disable_firewall" : false,
"resource_type" : "Tier0",
"id" : "t0-gw-01",
"display_name" : "t0-gw-01",
"path" : "/infra/tier-0s/t0-gw-01",
"relative_path" : "t0-gw-01",
"parent_path" : "/infra/tier-0s/t0-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572768576390,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572768576448,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 1
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
Tier-0 / Tier-1 ゲートウェイには、じつは LocaleServices というオブジェクトがあります。
UI での ゲートウェイ追加時に指定した Edge クラスタや、インターフェースは、
LocaleServices で定義されています。
まず LocaleServices の id を確認し、それをもとにインターフェース情報を取得します。
GET /policy/api/v1/infra/tier-0s/Tier-0ゲートウェイのID/locale-services
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services
{
"results" : [ {
"edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",
"resource_type" : "LocaleServices",
"id" : "470f1260-fe11-11e9-be6c-bdb62d557eed",
"display_name" : "470f1260-fe11-11e9-be6c-bdb62d557eed",
"path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed",
"relative_path" : "470f1260-fe11-11e9-be6c-bdb62d557eed",
"parent_path" : "/infra/tier-0s/t0-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572768576438,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572768576438,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
確認した LocaleServices の ID をもとに、インターフェースの情報を確認してみます。
Tier-0 ゲートウェイに、VLAN セグメント「seg-vlan-0200」に接続された
インターフェース「t0-uplink-01」が作成されています。
GET /policy/api/v1/infra/tier-0s/Tier-0ゲートウェイのID/locale-services/LocaleServicesのID/interfaces
$ ID=470f1260-fe11-11e9-be6c-bdb62d557eed
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$ID/interfaces
{
"results" : [ {
"edge_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900",
"segment_path" : "/infra/segments/seg-vlan-0200",
"type" : "EXTERNAL",
"resource_type" : "Tier0Interface",
"id" : "t0-uplink-01",
"display_name" : "t0-uplink-01",
"path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed/interfaces/t0-uplink-01",
"relative_path" : "t0-uplink-01",
"parent_path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed",
"marked_for_delete" : false,
"subnets" : [ {
"ip_addresses" : [ "192.168.200.2" ],
"prefix_len" : 24
} ],
"_create_user" : "admin",
"_create_time" : 1572768811102,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572768811102,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
Tier-0 ゲートウェイに設定したスタティック ルートも確認できます。
GET /policy/api/v1/infra/tier-0s/Tier-0ゲートウェイのID/static-routes/ルートのID
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/static-routes/t0-route-01
{
"network" : "0.0.0.0/0",
"next_hops" : [ {
"ip_address" : "192.168.200.1",
"admin_distance" : 1,
"scope" : [ "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed/interfaces/t0-uplink-01" ]
} ],
"resource_type" : "StaticRoutes",
"id" : "t0-route-01",
"display_name" : "t0-route-01",
"path" : "/infra/tier-0s/t0-gw-01/static-routes/t0-route-01",
"relative_path" : "t0-route-01",
"parent_path" : "/infra/tier-0s/t0-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572769868322,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572769868322,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
}
そして、Tier-0 ゲートウェイ に設定した SNAT ルールも確認できます。
手動追加した NAT ルールの種類は「USER」です。
NAT ルールは、ほかのオブジェクトと異なり、Simplified UI で作成しても
ID と display_name が別(ID が UUID)になっています。
GET /policy/api/v1/infra/tier-0s/Tier-0ゲートウェイのID/nat/USER/nat-rules
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules
{
"results" : [ {
"sequence_number" : 100,
"action" : "SNAT",
"source_network" : "172.16.0.0/16",
"service" : "",
"translated_network" : "192.168.200.2",
"scope" : [ ],
"enabled" : true,
"logging" : false,
"resource_type" : "PolicyNatRule",
"id" : "c149a1a0-fe14-11e9-be6c-bdb62d557eed",
"display_name" : "t0-snat-01",
"path" : "/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/c149a1a0-fe14-11e9-be6c-bdb62d557eed",
"relative_path" : "c149a1a0-fe14-11e9-be6c-bdb62d557eed",
"parent_path" : "/infra/tier-0s/t0-gw-01/nat/USER",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572770124388,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572770124388,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
Tier-1 ゲートウェイ。
Tier-1 ゲートウェイの情報を取得してみます。
(以前に NSX-T ラボ環境構築したとおり)DHCP サーバの接続や、
ルート アドバタイズの設定が表示されていることがわかります。
GET /policy/api/v1/infra/tier-1s
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s
{
"results" : [ {
"tier0_path" : "/infra/tier-0s/t0-gw-01",
"failover_mode" : "NON_PREEMPTIVE",
"enable_standby_relocation" : false,
"dhcp_config_paths" : [ "/infra/dhcp-server-configs/dhcp-sv-01" ],
"route_advertisement_types" : [ "TIER1_IPSEC_LOCAL_ENDPOINT", "TIER1_DNS_FORWARDER_IP", "TIER1_CONNECTED" ],
"force_whitelisting" : false,
"default_rule_logging" : false,
"disable_firewall" : false,
"ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],
"resource_type" : "Tier1",
"id" : "t1-gw-01",
"display_name" : "t1-gw-01",
"path" : "/infra/tier-1s/t1-gw-01",
"relative_path" : "t1-gw-01",
"parent_path" : "/infra/tier-1s/t1-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572769273590,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572771267403,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 7
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
Tier-1 ゲートウェイにも、Tier-0 と同様に、
Edge クラスタの割り当てなどを定義する LocaleServices が作成されています。
GET /policy/api/v1/infra/tier-1s/Tier-1ゲートウェイのID/locale-services
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services
{
"results" : [ {
"edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",
"preferred_edge_paths" : [ ],
"resource_type" : "LocaleServices",
"id" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",
"display_name" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",
"path" : "/infra/tier-1s/t1-gw-01/locale-services/e69e20e0-fe12-11e9-be6c-bdb62d557eed",
"relative_path" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",
"parent_path" : "/infra/tier-1s/t1-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572769273616,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572769273616,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
DHCP サーバ。
DHCP サーバの情報を取得します。
Tier-1 ゲートウェイに接続されていた DHCP サーバの情報は、ここで取得できます。
GET /policy/api/v1/infra/dhcp-server-configs
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/dhcp-server-configs
{
"results" : [ {
"server_address" : "172.16.254.254/24",
"lease_time" : 86400,
"edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",
"resource_type" : "DhcpServerConfig",
"id" : "dhcp-sv-01",
"display_name" : "dhcp-sv-01",
"path" : "/infra/dhcp-server-configs/dhcp-sv-01",
"relative_path" : "dhcp-sv-01",
"parent_path" : "/infra/dhcp-server-configs/dhcp-sv-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572770383565,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572770383565,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
DNS フォワーダ。
DNS ゾーンの設定を確認してみます。
API の URL は、UI での表現よりわかりやすく「dns-forwarder-zones」となっています。
GET /policy/api/v1/infra/dns-forwarder-zones
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/dns-forwarder-zones
{
"results" : [ {
"dns_domain_names" : [ ],
"upstream_servers" : [ "192.168.1.101", "192.168.1.102" ],
"resource_type" : "PolicyDnsForwarderZone",
"id" : "dns-zone-01",
"display_name" : "dns-zone-01",
"path" : "/infra/dns-forwarder-zones/dns-zone-01",
"relative_path" : "dns-zone-01",
"parent_path" : "/infra/dns-forwarder-zones/dns-zone-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572771005094,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572771005094,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
} ],
"result_count" : 1,
"sort_by" : "display_name",
"sort_ascending" : true
}
DNS フォワーダは、ラボ環境では Tier-1 ゲートウェイに割り当てているので
URL のパスにも Tier-1 ゲートウェイの ID が含まれます。
※Tier-1 ゲートウェイの情報取得の一部とも思いますが、わかりやすさからここで紹介しています。
GET /policy/api/v1/infra/tier-1s/Tier-1ゲートウェイのID/dns-forwarder
$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/dns-forwarder
{
"listener_ip" : "172.16.253.254",
"default_forwarder_zone_path" : "/infra/dns-forwarder-zones/dns-zone-01",
"log_level" : "INFO",
"enabled" : true,
"resource_type" : "PolicyDnsForwarder",
"id" : "dns-forwarder",
"display_name" : "dns-sv-01",
"path" : "/infra/tier-1s/t1-gw-01/dns-forwarder",
"relative_path" : "dns-forwarder",
"parent_path" : "/infra/tier-1s/t1-gw-01",
"marked_for_delete" : false,
"_create_user" : "admin",
"_create_time" : 1572771146293,
"_last_modified_user" : "admin",
"_last_modified_time" : 1572771146293,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
}
ここで取得した情報をもとに、今後の投稿で Policy API での環境構築を紹介しようと思います。
以上、Policy API での情報取得でした。