使用F5 BIG-IP和Puppet自动部署应用
简介
企业推行数字化转型战略,以开拓新的收入来源或保持竞争力时,一项主要驱动力是对速度的需求,也就是快速提供卓越客户体验的能力。随着组织采用DevOps方法,他们发现现有网络架构已成为制约因素。传统网络架构较为静态,容易受到人为错误的影响,并且需要投入大量运营资源进行管理。因此,必须将支持应用部署的网络基础设施以及DNS和负载均衡等网络服务纳入扩展的持续集成和持续交付(CI/CD)流水线,实现自动化。
通过网络自动化,组织可以提高敏捷性,从而构建更具动态性和可靠性的网络,提高运营效率,缩短部署时间,并提升应用部署的一致性。
F5可编程能力提升IT和DevOps生产力
可编程性是实现运维自动化的关键推动因素。多年来,F5一直践行这一理念,并在所有F5® BIG-IP® 应用交付控制器(ADC)中支持可编程性,从而提升应用网络服务架构的敏捷性和可扩展性。BIG-IP ADC的物理版和虚拟版均提供灵活且可编程的管理平面、控制平面和数据平面:
管理平面
- F5 iControl®:利用SOAP/XML/REST确保异构系统之间的开放通信,并实现BIG-IP功能自动化。此外,还支持F5-iControl gem,可通过Web服务连接到F5设备。
- F5 iApps®:模板化功能集有助于在F5设备上自动完成配置和应用部署。
控制平面
- F5 iCall™:这一基于Tcl的脚本框架支持执行TMSH(TMOS Shell命令行界面)命令和所需的Tcl命令,从而配置正在运行的F5设备。
数据平面
- F5 iRules®:iRules是一种基于Tcl的脚本语言,具有高度可定制性并支持编程,可用于实时检查、分析、修改、路由、重定向或处理流量。其下一代技术iRules Language eXtensions(LX)可在BIG-IP平台(v12.1)上提供node.js功能。
全面的网络可编程性方法有助于运营团队按需响应运营和业务事件或机遇。提供网络可编程性的F5产品组合可帮助组织高效实现自动化和编排。
F5与Puppet联合解决方案
F5与Puppet携手推出综合解决方案,满足现代企业对敏捷性的需求,为持续集成和持续部署(CI/CD)提供支持。Puppet提供商业支持的配置管理工具Puppet Enterprise,以统一的软件定义方式自动管理计算、网络和存储资源,帮助组织更顺畅地交付应用。
Puppet Enterprise采用基于模型的声明式IT自动化方法,支持从自动执行简单的重复性任务到部署大规模公有云、私有云和混合云等各种功能。通过在这些云环境中对配置变更进行建模和测试,然后再部署,可以确保高效利用基础设施资源;借助Puppet通过模块提供的可扩展性,组织可以在现有框架的基础上进行扩展,以支持其BIG-IP设备。
典型的Puppet基础设施会在每个受管系统上安装软件代理。这些代理会定期将有关系统的多项信息(称为“事实”)发送到Puppet主服务器。Puppet主服务器收到后,会结合这些事实和清单(由Puppet代码组成的Puppet程序)编译出定义最终配置的目录,然后将该目录发回代理。代理随后可强制系统保持目录中定义的状态。
与软件代理直接在节点中运行的服务器场景不同,Puppet基础设施支持设置代理,由该代理为BIG-IP设备运行软件代理。这样,便可使用Puppet管理BIG-IP设备,并获得该解决方案带来的优势。Puppet代理可以与Puppet主服务器分别部署在不同的服务器上,也可以与其运行在同一台服务器上。
Puppet语言文件称为清单(manifest),使用 .pp 文件扩展名。Puppet语言的核心是声明资源。该语言的其他部分旨在提高资源声明方式的灵活性和便利性。Puppet主服务器始终使用当前节点环境所设置的主清单,可在其中以声明式方式描述资源。
图1展示了F5与Puppet联合解决方案的数据流。
- 运行Puppet代理的代理服务器会定期通过远程Shell访问、API或其他方式检索BIG-IP设备的相关信息,然后将其作为事实数据传递给Puppet主服务器。
- Puppet master 编译目录,并将其返回给代理程序或代理服务器。
- Puppet代理将从Puppet主服务器接收的目录转换为iControl gem代码片段,以在BIG-IP设备上创建最终配置。
- iControl gem文件用于将节点配置参数转换为iControl消息,并通过API强制实施所述状态。

此联合实施的两项关键功能是iControl API和Puppet Network Device Management。F5 iControl API支持Puppet代理与F5 BIG-IP设备之间的通信,而Puppet Network Device Management可帮助组织配置网络设备。借助Puppet Network Device和F5 iControl API,可以部署Puppet F5模块,并使用Puppet管理BIG-IP设备。Puppet F5模块提供用于管理BIG-IP对象的资源,包括部署和管理虚拟服务器,以及配置和管理池与池成员。Puppet使用F5模块查找为BIG-IP设备定义的资源,并自动加载存储在F5模块中的任何自定义类或已定义类型。
主要优势
F5与Puppet联合解决方案可帮助您:
- 使用同一工具管理计算和网络基础设施,提高效率。
- 消除系统团队与网络团队之间耗时的工作交接。
- 确保BIG-IP设备的配置保持一致(每当配置偏离所需状态时,Puppet都会自动将其恢复为已配置状态)。
- 实现可扩展性和服务弹性,只需编写一次配置,即可大规模应用于多个系统。
- 支持快速复现。需要将应用从预生产环境推进到生产环境时,只需运行Puppet,Puppet便会按照测试环境中的相同方式完成所有配置。
- 加快应用交付速度。
Puppet F5模块可以创建和配置典型应用部署所需的BIG-IP对象,包括服务器节点、池和虚拟服务器。部署多台BIG-IP设备时,组织可以使用Puppet模块自动执行所有初始BIG-IP接入任务,例如设备许可、DNS和NTP设置、内部和外部VLAN、自身IP以及路由域。
用例:在BIG-IP平台上部署HTTP应用
要在BIG-IP设备上配置典型的HTTP应用,必须设置节点、监视器和配置文件,部署虚拟IP地址,并完成其他配置。在单台BIG-IP设备上,即使不使用自动化,这些工作似乎也可以应对;但要配置可能分布在多个数据中心的多台F5设备,以交付大型企业应用,则过程复杂、耗时且容易出错。借助基于模型的声明式Puppet清单,组织可以管理并自动执行跨数据中心多台BIG-IP设备上的应用部署。
要开始部署,请安装Puppet master,并创建一个能够运行Puppet agent的代理系统。此外,必须在代理主机(Puppet agent)的Puppet Ruby环境中安装所有依赖项,包括iControl gem和Faraday gem。部署架构如图2所示。

创建设备.conf文件
使用F5模块之前,必须在Puppet代理的Puppet配置目录(device.conf 文件/etc/puppet 或 /etc/puppetlabs/puppet)中创建该文件:
[bigip1]
type f5
url https://admin:admin@10.192.74.111
在上述示例中,admin:admin@10.192.74.111 表示Puppet用于登录F5设备的凭据:<USERNAME>:<PASSWORD>@<IP ADDRESS OF BIGIP>。
在Puppet Master上对节点进行分类
接下来,在site.pp中的相关class语句或node声明、<devicecertname>.pp节点清单或某个profiles::<profile_name>清单文件中输入配置。以下是用于在BIG-IP平台上配置HTTP应用的Puppet清单文件(site.pp)示例:
node bigip1 {
f5_node { '/Common/web_server_1':
ensure => 'present',
address => '10.1.20.11',
description => 'Web Server Node 1',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_node { '/Common/web_server_2':
ensure => 'present',
address => '10.1.20.12',
description => 'Web Server Node 2',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_node { '/Common/web_server_3':
ensure => 'present',
address => '10.1.20.13',
description => 'Web Server Node 3',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_pool { '/Common/web_pool':
ensure => 'present',
members => [
{ name => '/Common/web_server_1', port => '80', },
{ name => '/Common/web_server_2', port => '80', },
{ name => '/Common/web_server_3', port => '80', },
],
availability_requirement => 'all',
health_monitors => ['/Common/http_head_f5'],
}->
f5_virtualserver { '/Common/http_vs':
ensure => 'present',
provider => 'standard',
default_pool => '/Common/web_pool',
destination_address => '10.1.10.240',
destination_mask => '255.255.255.255',
http_profile => '/Common/http',
service_port => '80',
protocol => 'tcp',
source => '0.0.0.0/0',
source_address_translation => 'automap'
}
}
此示例包含三项任务:
- 必须先设置Web服务器。名为“f5_node”的F5模块会添加3台Web服务器:web_server_1、web_server_2和web_server_3。每台服务器均采用尽可能少的参数,并配置运行状况监控器,通过直接ping服务器来确认其仍能响应。
- 接下来,创建服务器池。“f5_pool”模块会创建一个名为web_pool的池,并将上面创建的节点添加为池成员。
- “f5_virtualserver”模块创建虚拟服务器 http-vs,该服务器使用 http 配置文件和上文创建的 web_pool。
运行 puppet device
运行 puppet device (Puppet Network Device 的命令)之前,BIG-IP设备上未配置任何虚拟服务器、池或节点。运行 puppet device -v --user=root 命令后,设备代理节点将生成证书,并将您的分类应用于F5设备。
如下所示,所有任务均已成功完成,未出现任何失败。
$ sudo puppet device -v --user=root –trace
信息:开始将配置应用到位于 https://10.192.74.111:443 的 bigip1
信息:正在检索 pluginfacts
信息:正在检索插件
信息:正在缓存 bigip1 的目录
信息:正在应用配置版本“1498175426”
通知:/Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_1]/ensure:已创建
通知:/Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_2]/ensure:已创建
通知:/Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_3]/ensure:已创建
通知:/Stage[main]/Main/Node[bigip1]/F5_pool[/Common/web_pool]/ensure:已创建
通知:/Stage[main]/Main/Node[bigip1]/F5_virtualserver[/Common/http_vs]/ensure:已创建
信息:Node[bigip1]:正在取消调度 Node[bigip1] 上的所有事件
通知:已在 0.50 秒内应用目录
Puppet现已创建一个完成全部配置的新虚拟服务器(图3)。该服务器通过新创建的池对HTTP应用进行负载均衡(图4)。该池包含3台新创建的Web服务器(图5)。



所有Puppet F5模块都具有幂等性,这意味着仅当节点状态与配置状态或所需状态不匹配时,才会执行任务。换言之,如果再次运行同一清单,Puppet不会重新配置这些对象。
信息:开始向位于 https://10.192.74.111:443 的 bigip1 应用配置
信息:正在检索 pluginfacts
信息:正在检索插件
信息:正在缓存 bigip1 的目录
信息:正在应用配置版本“1498522983”
通知:已在 1.51 秒内应用目录
结论
自动化是DevOps和CI/CD的关键组成部分,通常从配置管理入手。F5与Puppet联合解决方案支持运维团队部署整个应用基础设施堆栈,并实现配置自动化和管理。借助该解决方案,应用开发人员可以弹性扩缩基础设施资源、自动执行应用测试并缩短应用开发周期。因此,组织可以显著提升敏捷性和可扩展性。
要进一步了解F5与Puppet联合解决方案如何助力业务发展,请访问forge.puppet.com/f5/f5
发布于2017年10月5日
