F5应用服务自动化实用指南
简介
应用交付和安全设备的部署与配置管理自动化已成为几乎必不可少的实践。2017年IDG发布的《FutureScape》报告指出,自动化和多云管理是将在2021年前对企业产生影响的几项关键举措。1 自动化可让应用所需的关键安全、优化和可用性服务实现规模化、可靠且集成的部署,并将这些服务的交付纳入编排式构建、测试和部署工作流。这类工作流正逐渐成为应用部署的主流模式。
即使只是对添加新虚拟服务器或池成员等基本任务进行简单自动化,也能让运维团队为应用所有者或其他自动化系统提供自助服务功能,并腾出时间开展更具成效的工作,例如构建新一代自动化工具。
当组织开始采用多个云平台来交付IT服务时,自动化的必要性就更加凸显。在尝试将服务部署到平台特性各异的多个位置时,自动化有助于降低运营开销增加所带来的影响,并减少因不熟悉新平台而导致的错误。
但应该如何实现自动化,又该自动化哪些内容?由于运维模式、接口和语言各不相同,自动化软件既可以在单一设备层面运行,也可以作为更复杂的多系统工具使用。基础设施即服务(IaaS)云平台提供原生工具,用于部署虚拟基础设施和服务。此外,F5还提供多种接口和编排选项。丰富的工具和选项让您能够以最适合组织的方式实现自动化,但选择合适的工具可能并不容易,而且确实存在复杂性增加和工具泛滥的风险。
本文将概述如何实现F5 BIG-IP设备(包括物理设备和虚拟设备)的部署、管理和配置自动化,并就如何选择适合贵公司业务的方案提供一些建议。
自动化生命周期
在应用服务交付生命周期中,有多个关键环节可以实现自动化。根据基础设施模型和应用部署方法,可能需要开发全部或仅其中几个自动化环节。
如果将服务部署到高容量、多租户的物理或虚拟BIG-IP上,那么与部署、监控和更新应用服务配置相比,引导和接入活动的优先级不会太高,因为这些BIG-IP需要支持数百甚至数千个应用。
如果采用的部署模式是在多个环境中为每个应用配置专用BIG-IP实例,其中可能包括为测试和质量保证按需创建的临时实例,那么自动执行引导和接入流程与部署应用服务本身一样,都是关键路径的重要环节。

无论采用何种环境,也无论需要自动化多少流程,都需要考虑以下几个关键主题。
自动化:需要考虑的几个关键事项
自动化成熟度谱系
自动化涵盖一系列活动。自动化成熟度的一端是使用Bash、TMSH、Python或其他语言开发简单脚本。这些脚本可在本地运行,以加快手动配置。另一端则是完整的“基础设施即代码”系统,它结合源代码管理、工作流编排器以及(可能的)多种自动化工具,通过存储库中的文本文件定义和更改基础设施配置。在这两个极端之间,还有多种方案可帮助管理BIG-IP平台的部署和配置。

可变与不可变
目前大多数BIG-IP部署都可视为可变部署,这意味着其配置会随时间推移而发生变化。这是因为BIG-IP平台大多以多租户设备的形式部署,为多个应用提供服务。随着新应用的部署,或现有应用扩展规模或需要更多服务,BIG-IP的配置也会相应更新。通过这种部署方式,基础设施团队可以管理一套集中式基础设施,并通过通用平台为应用提供服务。
不过,有时BIG-IP平台会作为独立应用堆栈的一部分进行部署,其中,特定BIG-IP提供的服务与特定应用或服务绑定。在这种情况下,可以将BIG-IP配置视为不可变;也就是说,配置会在启动时安装或作为软件映像的一部分安装,并且在BIG-IP实例的生命周期内不会更改。如需更改配置,则修改软件映像或启动代理脚本的内容,然后重新部署。这种模式通常称为“推倒重来”。尽管总体而言并不常见,但随着支持单应用实例的新BIG-IP许可模式、增强型许可工具以及F5 cloud libs (https://github.com/F5Networks/f5-cloud-libs)等工具的推出,这种部署模式正成为可行的选择。F5 cloud libs是一组Node.js脚本和库,旨在帮助在云中载入BIG-IP。对于需要让应用与由代码和基础设施组成的紧密绑定且相互隔离的堆栈配套运行的组织而言,这种模式尤其适用。

命令式与声明式
向使用者提供自动化接口有两种概念模型。最常见的“第一波”自动化模式往往采用命令式模型。在命令式自动化模型中,自动化使用者通常不仅需要明确希望实现的目标,还需要了解实现该目标的具体步骤(通常通过API调用)。这往往意味着,使用者既要了解高级服务的配置细节,还要承担将这些服务与自动化工具集成所带来的额外复杂性和工作量。这就像点三明治时,不是直接提出需求并相信制作者知道制作所需的步骤(及其顺序),而是逐一说明制作三明治所需的每项操作。
相比之下,声明式接口允许使用者(人或机器)只需提出所需结果即可创建服务。由于自动化目标已预先配置工作流或服务模板,可根据所需结果生成配置,因此使用者无需详细了解所有必要步骤。虽然声明式接口的初始设置略为复杂,但构建合适的服务模板后,操作会更加简单,足以抵消这部分复杂性。因此,总体而言,声明式接口是构建自动化系统的首选机制。
直接操作或通过管理工具操作
还需要考虑另一个决策:自动化API调用应由第三方工具直接向需要更改的设备发出,还是通过额外的管理工具发出。与直接连接到受管实体相比,管理工具可以对操作进行抽象和简化,并可能提供额外的控制和日志记录层。不过,在必须快速进行更改的关键情况下,需要确保各管理层具备高可用性。

API、启动代理还是CLI?
BIG-IP设备最常通过REST API实现自动化。该API通过已记录的架构开放BIG-IP的大部分功能。F5为Ansible等自动化工具提供的模块广泛使用REST API。新增的iControl LX功能还支持创建用户定义的API端点,只需一次API调用即可执行多步骤操作。
另一种常见的BIG-IP配置自动化方式是使用启动代理。启动代理在系统启动时运行,并可获取外部信息来配置BIG-IP平台。启动代理通常用于执行初始配置,以便设备“上线”,还可从GitHub等第三方网站或您自己的存储库中获取其他脚本和配置文件。启动代理也可用于完整配置BIG-IP平台,尤其是在选择了固定的按应用配置时。
最常见的启动配置是cloud-init。除Microsoft Azure外,所有BIG-IP VE镜像均已启用该配置,但它更适合用于AWS和OpenStack部署。除cloud-init外,F5还提供了一系列云启动库,帮助在启动时配置BIG-IP。
如果选择使用启动代理在平台启动后进行配置,请特别注意故障管理。如果使用外部源,这一点尤为重要,尤其是在扩缩容事件中可能会启动实例的情况下。如果外部资源不可用,系统将如何运行?系统是否会创建更多“僵尸”设备来尝试满足需求?
在某些情况下,自动化系统可以模拟用户执行CLI命令。当API调用可能无法完整实现所需操作时,这种方法有时可以解决部分问题。但总体而言,由于支持难度较大且解决方案较为脆弱,只应将其作为最后手段。
模板和操作手册
模板和剧本可用于实现自动化部署,并构建具备一定标准化程度的基础设施。适当的标准化可提高基础设施的稳健性和可支持性。精心设计的模板可提供声明式接口,使请求实体(用户或机器)只需了解所需属性,无需了解实现细节。严格通过模板进行部署,并仅通过修正模板来解决问题,有助于提高服务质量,因为问题通常只需修复一次。使用新模板重新部署服务后,对模板所做的更新可防止同一问题再次发生。
平台集成
平台集成工具将BIG-IP服务的配置与私有云或容器管理系统等平台相集成。具体机制因平台和实施方式而异,但通常分为三种模式:
- 将F5服务集成到现有平台构造中
在此模式下,使用现有平台构造来集成F5服务,例如将F5用作OpenShift Container Platform Router,或将F5与OpenStack Load Balancing as a Service (LBaaS)系统配合使用。由于通过平台原生接口配置服务,而随附的驱动程序和其他软件可将平台配置指令无缝转换为F5配置,因此使用这些机制几乎不需要更改运维流程。但请注意,只有平台原生接口支持的功能才能轻松部署。 - 订阅平台事件
另一种常见的集成方法是使用软件模块(例如Container Connector for Kubernetes and for Mesos)订阅平台内的事件,然后根据事件修改配置。可以为需要提供服务的应用程序添加标记或标签,并将连接器软件配置为监控带有所需标记的事件,从而选择要部署的事件和服务。 - 与平台管理工具集成
许多私有云平台都配有专为自动化而设计的管理系统。例如,VMware提供多种管理和集成工具,包括vRealize Orchestrator (vRO),该工具有一个用于配置BIG-IP的第三方插件。其他示例包括用于OpenStack HEAT模板系统的插件。
服务发现
服务发现虽然不是完整的自动化解决方案,但可以通过简单而有效的方式,使BIG-IP配置适应环境变化。服务发现会通过API定期轮询云系统以获取资源列表,并相应修改BIG-IP配置。这对于将资源配置到自动扩缩容组的环境尤其有用,因为扩缩后端计算资源时,负载均衡器需要感知新增资源。F5面向AWS和Azure的云自动扩缩容解决方案中提供了服务发现组件。
那么,F5是否有推荐的自动化方案?答案既是肯定的,也是否定的。需要考虑的变量很多,因此完全照搬规定式建议并无帮助。不过,我们已将您可能需要的关键构建模块整合为一个协同产品系列。
F5自动化工具链
F5 Automation Toolchain 产品系列包含基础的自动化和编排构建模块,可用于将 F5 BIG-IP 平台集成到 CI/CD 工具链等常见自动化模式中。
F5 Automation Toolchain包含以下关键组件
- Application Services 3 Extension(AS3):声明式L4-L7 BIG-IP应用服务
- Declarative Onboarding Extension(DO):声明式L1-L3 BIG-IP初始配置
- 遥测流扩展(TS):将BIG-IP遥测数据自动流式传输至分析系统
- API Services Gateway (ASG):Custom iControl LX Extensions的容器运行时
Automation Toolchain系列旨在管理应用服务的交付生命周期,涵盖平台部署(通过云模板)、上线、服务配置,以及用于保障应用运行期间性能的高级遥测和日志记录。

这一不断扩展且受支持的工具系列代表了F5应用服务自动化的未来发展方向,但这并不意味着不存在或不支持其他集成方式。请参阅本文档中的“其他自动化工具”部分。
Application Services 3 Extension
F5 Applications Services 3 Extension(AS3)提供了一种简单且一致的方式,可通过声明式REST API在BIG-IP平台上自动部署第4至第7层应用服务。AS3采用定义明确的对象模型,并以JSON文档表示。借助声明式接口,可以轻松、可靠地管理F5应用服务部署。

示意图:AS3架构
AS3扩展会接收并分析声明,然后进行相应的iControl API调用,以在目标BIG-IP上创建所需的最终状态。该扩展既可在BIG-IP实例上运行,也可通过AS3 Container运行。AS3 Container是一个独立的容器或虚拟机,用于运行AS3扩展,然后向BIG-IP发出外部API调用。

也可以通过BIG-IQ发起AS3调用。BIG-IQ为BIG-IP平台提供许可、管理、可视化和访问控制功能,并为F5 Cloud Edition提供支持。F5 Cloud Edition可按需为每个应用提供BIG-IP实例,并结合强大的分析功能。

Declarative Onboarding Extension
The Declarative Onboarding扩展提供简洁的界面,可将刚完成初始启动的F5 BIG-IP平台配置为可为应用部署安全和流量管理的就绪状态。其中包括许可和资源配置等系统设置、VLAN和Self IP等网络设置,以及使用多个BIG-IP系统时所需的集群设置。
初始配置流程完成后,可以使用所选的自动化(或手动)流程部署应用服务。
Declarative Onboarding使用与AS3架构一致的JSON架构,并采用类似的体系结构。Declarative Onboarding以独立于TMOS的RPM形式提供,并在引导接入阶段的第一步安装到新启动的BIG-IP上。
遥测流式传输扩展
BIG-IP可生成丰富的应用、安全和网络遥测数据。Telemetry Streaming扩展提供声明式接口,用于配置将统计信息和事件流式传输至第三方使用方,例如:
- Splunk
- Azure Log Analytics
- AWS CloudWatch
- AWS S3
- Graphite
与Automation Toolchain系列的其他成员一样,配置通过声明式接口进行管理,并采用简单、一致的JSON架构。
API服务网关
The API服务网关是一种Docker容器镜像,支持自定义iControl LX扩展在独立于TMOS的平台上运行。通过将管理操作从各个BIG-IP平台中抽象出来,它可以帮助您扩展和管理F5部署。
Cloud Templates:属于解决方案,但(目前)尚未纳入产品系列
云模板利用公有云和私有云的部署自动化功能来预置并启动BIG-IP虚拟设备。
F5目前为以下云平台提供受支持的模板:
- AWS:CloudFormation 模板
- Azure:Azure Resource Manager 模板
- Google:Google Deployment Manager Templates
- VMware:vCenter模板
- OpenStack:Heat 编排模板
F5正在积极开发云模板,以覆盖更广泛的部署场景。如有问题或拉取请求,请通过相关github代码库提交。
编排和工作流工具及持续交付与部署
应用服务只是构建可运行应用的技术栈中的一层。要让应用从代码提交进入实际部署和监控阶段,需要集成、构建和部署所有组件,其中涉及大量相互依赖且必须按正确顺序执行的步骤。编排工具负责自动执行这项任务,并通过协调各项任务和工具来创建工作流管道。
大多数流水线都始于源代码存储库,其中存放应用程序代码、测试代码和基础设施配置。
借助AS3、云模板和Declarative Onboarding等工具,可以将构建和配置应用服务所需的全部配置信息存储为部署流水线的一部分。
在使用多租户、长期运行的BIG-IP硬件或软件平台的架构中,只需将AS3配置作为应用代码存储库的一部分进行管理。相比之下,如果需要在部署过程中按需启动专用实例,则应在应用存储库中管理模板和Declarative Onboarding声明。
其他自动化工具:资源指南
虽然无法涵盖所有可能的自动化或编排工具,但下面列出了F5客户最常用的工具、用例和功能。
---------------
语言集成
语言
状态
示例和来源
Python
F5 贡献
https://github.com/F5Networks/f5-common-python
Go
用户贡献
https://github.com/f5devcentral/go-bigip
PowerShell
F5 支持
https://devcentral.f5.com/wiki/icontrol.powershell.ashx
配置管理和基础设施自动化工具
工具
状态
示例和来源
Ansible
F5 贡献
https://github.com/F5Networks/f5-ansible
Terraform
F5 贡献
https://github.com/f5devcentral/terraform-provider-bigip
Puppet
F5 贡献
https://github.com/f5devcentral/f5-puppet
Chef
用户贡献
https://github.com/target/f5-bigip-cookbook
SaltStack
第三方
https://docs.saltstack.com/en/latest/ref/runners/all/salt.runners.f5.html
基础设施模板系统
平台
状态
示例和来源
AWS
F5 支持
https://github.com/F5Networks/f5-aws-cloudformation
Azure
F5 支持
https://github.com/F5Networks/f5-azure-arm-templates
F5 支持
https://github.com/F5Networks/f5-google-gdm-templates
OpenStack
F5 支持
https://github.com/F5Networks/f5-openstack-hot
------------------
启动代理和云脚本
Cloud-init
云库
https://github.com/F5Networks/f5-cloud-libs
--------------------
平台集成
容器管理平台
平台
状态
示例和来源
Kubernetes
F5 支持
https://github.com/F5Networks/k8s-bigip-ctlr
Pivotal Cloud Foundry
F5 支持
https://github.com/F5Networks/cf-bigip-ctlr
Marathon
F5支持
https://github.com/F5Networks/marathon-bigip-ctlr
Red Hat OpenShift
F5支持
https://hub.docker.com/r/f5networks/k8s-bigip-ctlr(https://hub.docker.com/r/f5networks/k8s-bigip-ctlr)或
https://access.redhat.com/containers/?tab=tags#/registry.connect.redhat.com/f5networks/k8s-bigip-ctlr (https://access.redhat.com/containers/?tab=tags#/registry.connect.redhat.com/f5networks/k8s-bigip-ctlr)
私有云平台
平台
状态
示例和来源
OpenStack (LBaaS)
F5 支持
https://github.com/F5Networks/f5-openstack-lbaasv2-driver
OpenStack(Heat)
F5 支持
https://github.com/F5Networks/f5-openstack-hot
VMWare (vRO)
第三方
https://bluemedora.com/products/f5/big-ip-for-vrealize-operations/
-----------------------
关于编排和工作流工具的说明
上述工具和集成提供了自动部署和配置BIG-IP平台的方法,可用于提供应用可用性、安全和扩展服务。这些服务虽然不可或缺,但只是全栈应用部署的一部分。要以协调且经过测试的方式,利用服务器、数据、已编译的应用代码和基础设施构建完整的应用堆栈,仅靠简单的自动化工具还不够。
您需要使用更高级的编排工具,并配合相关工作流以及与多个自动化系统的集成。这些工具最常用于持续集成和持续交付(CI/CD)实践;在实际实施中,自动化必不可少。编排工具有很多,其中Jenkins较为常用,并且有一些示例工作流可供参考,展示如何使用Jenkins、F5和Ansible,将F5基础设施即代码功能纳入CI/CD工作流。不过,一般而言,编排工具会通过某种配置自动化工具来实际执行更改和部署服务。
许可
BIG-IP平台需要获得许可才能运行,因此,将许可纳入自动化的关键路径会有所帮助。在高度动态的环境中,可能需要快速扩展或缩减BIG-IP虚拟设备,或创建此类设备用于测试和开发,因此应慎重考虑许可模式。
在公有云中,一种方式是使用BIG-IP的按用量计费版本(可通过云市场获取)。按用量计费实例会自动获得许可证,费用由云提供商按实际使用量或承诺使用时长收取。
另一种选择是将通过订阅(或永久授权)购买的可重复使用许可证池与F5 BIG-IQ License Manager配合使用,以便从许可证池中分配和撤销许可证。
可以通过启动代理和API调用自动执行许可步骤,但这需要通过出站Internet连接访问F5许可证服务器(即使使用云平台中的按用量计费许可证也是如此)。
何时使用哪种方式?
根据组织的具体情况,选择合适的自动化和编排工具可能非常简单,也可能颇具挑战。如果已为其他组件采用某种工具或方法,只需将BIG-IP集成到该系统中,选择过程就会比较简单。即使不与特定工具集成,借助功能丰富的iControl REST API、iControl LX功能和cloud-init,也可以相对轻松地将BIG-IP集成到现有自动化工具中(尤其是结合使用iApp模板时,只需一次API调用即可创建复杂配置)。
不过,如果从零开始,情况可能会更复杂。与选择其他任何解决方案一样,首先应明确自身需求。虽然本文无法代您制定需求清单,但以下问题和建议可帮助您进行评估。
自动化模型:声明式模型可让编排服务使用者更轻松地进行交互。使用者只需明确所需结果,无需了解实现该结果的所有流程步骤。今后,对于新建站点,F5 Automation Toolchain系列将作为“模型”部署。
潜在的平台和环境:容器和各种云平台必将成为应用基础设施的重要组成部分,请据此做好规划。
技能:贵组织是否已掌握部分底层技术?请注意,相关技能可能不在您所在的部门,而是分布在整个组织中。如果是这样,可以考虑选择使用贵组织已采用语言的工具。
可支持性: 只构建组织有能力支持的系统。这一点看似显而易见,但成功的关键在于选择组织能够实现的复杂程度,从而充分发挥自动化的优势,同时避免产生过多的运营开销。
结论
IT系统的自动化程度不断提高是必然趋势。以战略性方式规划关键的应用交付和安全服务,可确保贵组织部署的应用保持安全且可用。自动化还有助于降低运营开销,尤其是在使用多个平台和公有云时。
选择合适的自动化系统并非易事。理想情况下,应通过全面协作来完成选择,同时考虑现有技能组合以及支持所构建系统的能力。无论选择哪种解决方案,BIG-IP平台和F5的专业能力都能为您提供支持,帮助交付应用所依赖的企业级服务,无论这些应用部署在何处。
关于F5支持的说明。F5为部分模板和工具提供支持,但并非全部。对于GitHub上提供的软件,只有F5代码库中“supported”文件夹内的代码受支持。其他软件的支持政策将在相关readme文件中说明。
发布于2019年5月13日
