本人从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的第三方库对其进行了良好的封装。封装后的使用方法更容易理解和使用,将在后面几篇文章中介绍。