作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化暨分散式安全防護技術方案的介紹與推廣。

首先,為什麼是寫給IT管理員看的Restful-API傻瓜手冊,而不是給開發人員看的呢?嗯,我個人的經驗是通常真的不需要與開發Team聊怎麼去進行API的呼叫,開發Team比我們懂這些超過一百倍。重點只要把API Guide趕緊交出去給他們,請點擊下面連結是NSX 6.2版的: http://pubs.vmware.com/NSX-62/topic/com.vmware.ICbase/PDF/nsx_62_api.pdf 。然後,他們就會自己看懂了。

那IT管理者又為什麼需要懂最基本的NSX Restful-API呼叫方式呢?首先,絕大部分的環境裡,你用vCenter內的NSX GUI plugin就好了。但有兩種情況下會使用到NSX的API:

• NSX的幾乎每一個操作都有對應的Restful-API,或應該說產品是先把API做出來,vCenter內的GUI plugin再把這個功能加上去。因此,有可能有一些不常使用,但需要用到的管理指令,是需要用API的。舉例來說,我們想要在NSX Controller上加上Syslog的設定。只需要做一次,但目前的版本還沒有支援GUI介面

• 在一些悲慘的狀況下,vCenter出問題連不到了,舉例來說,誤把vCenter放在NSX分散式防火牆 (Distributed FW, DFW) 啟動的Cluster內,也沒有把vCenter設在Exclusion List內,然後就直接把vCenter擋掉了。此時管理者根本連不到GUI介面,要怎麼回復呢…NSX Manager是不會被DFW阻擋的,此時可以用API的方法來回復環境

要怎麼去做NSX Restful-API呼叫呢?有兩個方法:

• 找個簡單的Restful-API Client,用Client的GUI介面來發送。我個人是用Firefox上的附加元件RESTClient,或是Chrome上也有Advanced REST Client很好用

• 寫個小程式比如說Python的script,直接執行這個script。如果大家用的是Mac或Linux的話Python應該都是內建的

下面示範一下相關的方法。比如說狀況是vCenter被DFW整個擋住了,我們要做的事情是連到NSX Manager,把所有的防火牆規則刪掉。在做NSX Restful-API呼叫時有幾個值是必須填入的:

• 與NSX Manager認證的方式:需要填入的包括認證方式是”Basic”,還有NSX Manager的帳戶與密碼

• 表頭(Header)的形式:需要填入Content-type為application/xml

• NSX Manager的IP位址或FQDN

• 要使用的API呼叫,包括呼叫的Method是Get / Delete / Post哪一種,以及要使用的API url。在這邊我們要刪掉防火牆規則,所使用的API是”/api/4.0/firewall/globalroot-0/config”

• 大部分的API需要填入Request Body,以XML形式把指令所需要的參數填入。以我們現在要做的是很單純的動作,就是把所有的分散式防火牆規則移除,所以不需要填。

好,當我們用RESTClient來發送這個需求時,要怎麼做呢?

紅色部分就是要填寫的內容。如上面所述,Authentication部分應該要選擇Basic Authentication,然後填入NSX Manager的帳號與密碼。Headers則應該選擇Custom Header,然後填入Name與Value,如下圖:

Method的地方選擇DELETE,而URL的部分則將NSX Manager的IP或FQDN填入以及我們要刪除防火牆規則的API。如下圖,確認資訊都沒有問題,按Send即可發送指令

那使用寫小程式的方法呢?下面是強者我同事Rick Chen拯救亞洲區不同NSX PoC發生vCenter被DFW鎖住災情時所用的Python Script。比如說如果大家用一台Mac,啟動Terminal,用nano或是vi寫一個下面的script,然後比如說取名叫做DFW-Delete.py

import httplib,base64

auth=base64.b64encode(“admin:vmware“)

header={“Authorization”:”Basic”+” “+auth,”Content-type“:”application/xml“}

conn=httplib.HTTPSConnection(“nsxmanager.vmware.lab“)

#reset dfw policy

url=”/api/4.0/firewall/globalroot-0/config

conn.request(“DELETE“,url,””,header)

resp=conn.getresponse()

print(resp)

print(resp.status)

conn.close()

粗體的部分就是前面我們提到的參數部分,但一般來說在這個Script裡面,大家僅需要去修改管理者帳戶名稱與密碼,以及連線位置的FQDN或是IP就好了。編輯完成後,把Mac連接在可以接取到NSX Manager的網路裡,終端機內打python DFW-Delete.py 就可以執行了。

希望上面對於Restful API的使用方式以及如何拯救被DFW擋住的vCenter的方式,會對大家有幫助。最後,這篇網誌是我們在VMware Taiwan臉書粉絲團發出的NSX相關文章第55篇,這段時間內,大部分希望和大家討論與分享的NSX課題應該都略微有帶到了。這邊要和大家報告的是我們會暫停每週一次的定期連載,但如果NSX產品有新的功能或不同的應用場景,或是有哪些大家還有興趣的課題,後續也希望用不定期刊登的方式繼續與大家分享。感謝大家一年多來的支持,也希望之前分享的不同NSX主題對大家都有幫助。