本人從18年下旬,開始從事F5負載均衡的自動化開發工作,主要使用python程式語言,開發的F5功能模組為LTM和GTM。
F5開發簡介
1、F5管理模式
F5的管理模式主要有4種(不包含snmp),分別為web頁面,tmsh命令列,restful api,以及soap api。這其中,web頁面和tmsh命令列大多數F5管理員都用過,也是傳統運維模式,而restful api和soap api需要開發第三方程式去呼叫,有一定使用門檻。這兩者的區別為
- soap api比較老,資料交換格式為http + xml。介面風格為soap,包含很多一次性拉取全部配置的介面,資源消耗量小,有些地方比rest實用。
- restful api比較新,資料交換格式使用http + json。標準restful風格,呼叫結構清晰,但部分介面華而不實,資源消耗量大,甚至現網配置太多會出現介面呼叫失敗。
本文件將大部分使用restful api進行介紹,對需要使用soap的部分也會做一定介紹。這兩種api都有python已封裝好的第三方庫。
2、 關於F5版本和api支援情況
- soap:支援v10以及以上所有版本,但v11與v10相比改動較大,其中改動部分soap可能會不支援。
- rest:不支援v10,支援v11以上所有版本,v12和v11相比又有比較大的修改,導致部分功能v12和v11的介面形式有變化。
以上2種api都有F5官方資料,全英文,連結如下:https://clouddocs.f5.com/api/
3、 使用python的第三方庫進行開發
可以使用python的requests包直接與F5進行互動,但F5有對介面進行封裝的第三方庫,可以避免重複造輪子。本人使用的python版本為3.7.5,restful的第三方庫為f5-sdk,soap的第三方庫為bigsuds。其中rest的封裝庫有文件,連結如下:https://f5-sdk.readthedocs.io/en/latest/。
基本使用方式為使用ip地址、使用者名稱、密碼進行認證,使用web頁面登陸的使用者名稱和密碼。
安裝第三方庫:
pip install f5-sdk
pip install bigsuds
rest介面認證方式:
import f5.bigip
bigipRest = f5.bigip.ManagementRoot('192.168.1.45', 'admin', '123456')
soap認證方式:
import bigsuds
bigipSoap = bigsuds.BIGIP('192.168.1.45', 'admin', '123456')
上述獲取到的bigipRest
和bigipSoap
是一個可執行物件,對其進行各種操作即可控制此F5。
4、 F5介面的rest風格簡介
什麼是rest風格?百度出來的結果是“表述性狀態轉移”,是一組架構約束條件和原則,一種介面風格和實現。F5上全部的rest設計原則可以寫一大本厚厚的教材,因此在此我不做詳細描述,只舉例說幾個常用的,不求大而全只求日常用到的能瞭解。
以下幾個名詞需要理解:
- Resource:資源,可以理解為F5上的某個配置項,比如某個pool就是一個Resource,某個vs也是一個Resource。
- Collection:集合,Collection是一組Resource的抽象展示,比如某臺ltm上全部的pool就是一個Collection。
- Subcollection:子集合,Subcollection是在某個Resource下的一種配置項,比如pool下面有members,那麼某個pool下的所有members就是一組Subcollection。
- Subcollection Resource:子資源,顧名思義,在Subcollection下的資源就是SR,比如某個pool下的某個member。
- Organizing Collection:組織集合,這是最大的一層概念,簡單理解的話,ltm就是一個OC,gtm又是一個OC,他是一組全部功能的總體實現。
- Unnamed Resource:未命名資源,一般是F5上自帶的資源項,不可以被刪除或者新增,很少用到。
F5上對某個資源進行配置操作時,就是以上述名詞的組合定位的,比如
http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/members/~Common~1.1.1.1:80
|----|--|---|----|--------------|-------|-------------|
|root|OC|OC |Coll| Resource | SC |SubColl Resrc|
比如上述url就代表了這臺F5 192.168.1.1上的ltm(OC),在pool這個配置大類(Collection)中的這個/Common/mypool(Resource),下面的members中(Subcollection),存在一個/Common/1.1.1.1:80(Subcollection Resource)的配置。這時候通過http的方法(get、post、delete等),就可以對它進行查詢/變更/刪除等操作了。(Common前後使用~代替/的原因是因為url中用/代表路徑分隔,因此只好用~替代了)
上面的表述結構雖然清晰,但還是有點複雜,python的第三方庫對其進行了良好的封裝。封裝後的使用方法更容易理解和使用,將在後面幾篇文章中介紹。