前回、HOL-SDC-1603 の Module 1 をもとに、論理スイッチの作成して VM を接続してみました。
NSX API で NW 構成変更を体験してみる。(HOL-SDC-1603 Module 1)
今回は同じラボの Module 2 のシナリオをもとに、NSX Edge を API で設定変更してみようと思います。
設定変更対象の NSX Edge
設定変更対象の NSX Edge は、下記の 2つです。
Perimeter-Gateway
- ルータや、FW などのネットワークサービスをを実現する VM。NSX Edge Service Gateway。※以下 ESG
- Web Client では、Type: NSX Edge
- 今回の環境での edge-id は「edge-2」
Distributed-Router
- 分散ルーティングをコントロールする。分散論理ルータ。※以下 DLR
- Web Client では、Type: Logical Router
- 今回の環境での edge-id は「edge-4」
手順の流れ。
- ESG からインターフェース削除。
- DLR に論理インターフェース(LIF)を構成。※App 層、DB 層の間の分散ルーティングを可能にします。
- DLR で OSPF を構成。
- ESG で OSPF の設定を修正。※DLR と動的ルーティングが構成される。
※今回も、VCSA(vcsa-01a)から NSX Manager(192.168.110.15)に curl コマンドを実行しています。
※NSX Edge の追加と ECMP の構成は、今回は省略しています。
1. ESG からインターフェース削除。
まず、ESG から Internal_App と Internal_DB というインターフェースを削除します。
この時点では、どちらも ESG に構成されています。
Web Client から見た、ESG のインターフェースの状態です。
まだ Internal_App と Internal_DB が構成されています。
この時点では、「3-Tier Web App」のテストページが表示できます。
API では、下記のコマンドラインでインターフェースの状態が確認できます。
ここで、論理スイッチの ID も表示されるので控えておきます。
- App_Tier_01 → virtualwire-3
- DB_Tier_01 → virtualwire-4
Internal_App インターフェースの確認
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges/edge-2/vnics/3 | xmllint --format -
Internal_DB インターフェースの確認
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges/edge-2/vnics/4 | xmllint --format -
ESG からインターフェースを削除します。
ちなみに、API からの設定変更は、Web Client とはことなり「Publish Changes」 ボタンををクリックするようなことなく、
即時反映されるようです。
Internal_App インターフェースの削除
curl -k -s -u admin:VMware1! -X DELETE https://192.168.110.15/api/4.0/edges/edge-2/vnics/3
Internal_DB インターフェースの削除
curl -k -s -u admin:VMware1! -X DELETE https://192.168.110.15/api/4.0/edges/edge-2/vnics/4
API をコマンドラインで実行している様子です。
HoL なので「テキストの送信」(テキストをコンソールに送信)を使用しています。
ESG からインターフェースが削除されました。
そして、「3-Tier Web App」のテストページはエラーになります。
2. DLR に論理インターフェース(LIF)を構成。
この時点での、DLR のインターフェースの状態です。
まだ App 層、DB 層のネットワークに接続するインターフェースは作成されていません。
API では、下記のコマンドラインで確認できます。
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges/edge-4/interfaces | xmllint --format -
DLR インターフェースを作成する API で指定する XML ファイル「dlr-if.txt」を作成します。
今回は、App_Interface、DB_Interface を同時に指定しています。
XML で指定している「virtualwire-3」と「virtualwire-4」は、それそれ App 層、DB 層のネットワークとして作成されている
論理スイッチの ID を指定しています。※先ほど ESG で確認したものを指定します。
cat <<EOF > dlr-if.txt
<interfaces>
<interface>
<name>App_Interface</name>
<addressGroups>
<addressGroup>
<primaryAddress>172.16.20.1</primaryAddress>
<subnetMask>255.255.255.0</subnetMask>
</addressGroup>
</addressGroups>
<mtu>1500</mtu>
<type>internal</type>
<isConnected>true</isConnected>
<connectedToId>virtualwire-3</connectedToId>
</interface>
<interface>
<name>DB_Interface</name>
<addressGroups>
<addressGroup>
<primaryAddress>172.16.30.1</primaryAddress>
<subnetMask>255.255.255.0</subnetMask>
</addressGroup>
</addressGroups>
<mtu>1500</mtu>
<type>internal</type>
<isConnected>true</isConnected>
<connectedToId>virtualwire-4</connectedToId>
</interface>
</interfaces>
EOF
DLR にインターフェースを追加します。
cat dlr-if.txt | curl -k -s -u admin:VMware1! -X POST -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/4.0/edges/edge-4/interfaces/?action=patch
インターフェースが追加されました。
ここまでで、App 層、DB 層での分散ルーティングが構成されます。
App 層の VM 「app-01a」 から DB 層の VM 「db-01a」 に Ping が飛ぶようになります。
※「DUP!」と出ることがあるのは HoL 特有の環境によるものです。
3. DLR で OSPF を構成。
ESG と DLR の間で動的ルーティングを構成するため、DLR に OSPF を有効化します。
まず、DLR に Router ID を設定します。
Router ID は、まだ未設定の状態です。
API での設定確認は、下記のコマンドラインで可能です。
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges/edge-4/routing/config | xmllint --format -
API で指定する XML ファイル「rt-id.txt」 を作成しておきます。
cat <<EOF > rt-id.txt
<routingGlobalConfig>
<routerId>192.168.5.2</routerId>
</routingGlobalConfig>
EOF
DLR に Router ID を設定します。
cat rt-id.txt | curl -k -s -u admin:VMware1! -X PUT -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/4.0/edges/edge-4/routing/config/global
Router ID が 設定されました。
この時点の、DLR の OSPF 設定状態です。
DLR に OSPF の設定を投入する XML ファイル「dlr-ospf.txt」を作成しておきます。
ちなみに、この環境での DLR の Edge_Uplink インターフェースは vnic 2 で、
そこに OSPF エリア ID 10 を設定しています。
cat <<EOF > dlr-ospf.txt
<ospf>
<enabled>true</enabled>
<protocolAddress>192.168.5.3</protocolAddress>
<forwardingAddress>192.168.5.2</forwardingAddress>
<ospfAreas>
<ospfArea>
<areaId>51</areaId>
<type>nssa</type>
<authentication>
<type>none</type>
</authentication>
</ospfArea>
<ospfArea>
<areaId>10</areaId>
<type>normal</type>
<authentication>
<type>none</type>
</authentication>
</ospfArea>
</ospfAreas>
<ospfInterfaces>
<ospfInterface>
<vnic>2</vnic>
<areaId>10</areaId>
<cost>1</cost>
<mtuIgnore>false</mtuIgnore>
</ospfInterface>
</ospfInterfaces>
<redistribution>
<enabled>true</enabled>
<rules>
<rule>
<id>0</id>
<from>
<isis>false</isis>
<ospf>false</ospf>
<bgp>false</bgp>
<static>false</static>
<connected>true</connected>
</from>
<action>permit</action>
</rule>
</rules>
</redistribution>
<gracefulRestart>true</gracefulRestart>
</ospf>
EOF
DLR に OSPF を設定します。
cat dlr-ospf.txt | curl -k -s -u admin:VMware1! -X PUT -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/4.0/edges/edge-4/routing/config/ospf
API 実行後の、DLR の OSPF 設定状態です。
4. ESG で OSPF の設定を修正。
この環境の ESG では、もともと OSPF が有効化されています。
この時点では、ESG が NSX 環境外部と接続する Uplink にだけ OSPF のエリア ID がマッピングされています。
ESG の DLR と通信するインターフェースに OSPF エリア ID を設定します。
HoL の環境で ESG むけの XML ファイル全体を作成するのは大変なので、
今回は ESG の現在の OSPF 設定を保存した XML ファイルに、(強引に)追加分の設定を追記します。
追加分の OSPF 設定の内容は下記で、OSPF の エリア ID 10 を、Transit_Network のインターフェースにマッピングしています。
<ospfInterface>
<vnic>1</vnic>
<areaId>10</areaId>
<cost>1</cost>
<mtuIgnore>false</mtuIgnore>
</ospfInterface>
コマンドラインで、ESG の OSPF 設定情報の XML を「esg-ospf_pre.txt」ファイルに保存して・・・
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges/edge-2/routing/config/ospf | xmllint --format - > esg-ospf_pre.txt
sed で、</ospfInterfaces> の前に今回設定したい XML 要素を追加して、「esg-ospf.txt」ファイルとして保存しています。
sed -e "s|</ospfInterfaces>|<ospfInterface><vnic>1</vnic><areaId>10</areaId><cost>1</cost><mtuIgnore>false</mtuIgnore></ospfInterface></ospfInterfaces>|" esg-ospf_pre.txt > esg-ospf.txt
そして、API で ESG に設定します。
cat esg-ospf.txt | curl -k -s -u admin:VMware1! -X PUT -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/4.0/edges/edge-2/routing/config/ospf
ESG に、設定が反映されました。
これにより、ESG と DLR との間で OSPF による動的ルーティングが構成されました。
ESG に接続されている Web 層のネットワークと App 層のネットワークとが接続できるようになり、
手順の途中でエラーになっていたテストページも正常に表示できるようになります。
このように GUI(Web Client)から実施できる設定は、API からも可能です。
設定内容のわりに XML が大げさになることもある気がしますが、
API を利用して手順を自動化することで作業ミスの抑止などもできそうです。
以上、NSX API で NSX Edge の設定変更をしてみる話でした。