F5与AWS:云端高级应用交付服务
简介
Amazon Web Services (AWS)已成为广泛采用的大型公有云基础设施即服务(IaaS)提供商。组织无需购买或重新配置本地基础设施,即可构建、测试和部署完整的应用堆栈。生产应用可受益于Web应用防火墙(WAF)、SSL加速、基于内容的路由、负载均衡、DDoS缓解、身份和访问管理以及协议适配等高级应用交付服务,从而让这些关键应用运行得更快、更智能、更安全。对于AWS云原生部署,F5解决方案可帮助将这些应用服务轻松交付到AWS云环境。
什么是Amazon Web Services?
作为IaaS提供商,Amazon Web Services(AWS)提供可租用的计算基础设施,足以支持应用开发。无需投入任何资本支出或维护费用,即可开发和部署完整的应用套件。除了提供类似本地部署环境的计算基础设施外,AWS还提供应用服务、自动扩展基础设施,并在多个地点托管应用。由于具备这些额外功能,AWS的最佳实践与传统数据中心有所不同。要更好地理解AWS与传统数据中心之间的差异,务必要了解AWS如何交付服务。
基础设施服务
为了充分发挥AWS的优势,下面介绍其IaaS产品的几个重要属性,包括地理分布、计算实例、网络和存储概念。
地理分布
要了解AWS,首先需要从物理层面了解其资源的分布方式。从最高层级来看,AWS设有多个区域,每个区域覆盖较大的地理范围,例如美国东部。每个地理区域包含多个可用区。之所以称为可用区,是因为这些区域在设计上相互隔离,避免故障相互影响。一个可用区(AZ)发生故障时,不会级联影响同一区域内的其他AZ。虽然各AZ相互隔离,但同一区域内的AZ通过低延迟网络链路互连。为确保可用性,可采用相应的设计模式,在同一区域的多个AZ之间实现冗余能力。
计算
计算实例最初是一个软件磁盘映像,称为Amazon Machine Image(AMI)。每个AMI均不可变,也就是说,使用该AMI的计算机只能读取它。使用AMI启动计算实例后,会在云中创建一台运行中的虚拟机。计算实例的虚拟硬件配置可以有所不同,例如实例可用的CPU数量和RAM容量。
网络
每个计算实例都位于一个虚拟私有云(VPC)中,VPC大致相当于物理环境中的局域网。各VPC在逻辑上相互隔离。一个VPC可包含多个子网,子网之间具有隐式路由。公有子网可从互联网路由访问,而私有子网仅供内部访问。要部署完整的应用,需要在VPC中部署一个或多个计算实例。当计算实例或负载均衡器分配有DNS条目时,即可实现跨VPC通信。
存储
如上所述,使用AMI的实例无法对其进行修改。对于持久性存储,AWS提供多种解决方案,主要包括简单存储服务(S3)和弹性块存储(EBS)。S3是一种对象存储服务,可按名称存储和访问对象。对象大小可以从0字节到5 TB。实际上,每个AMI本质上都是一个S3对象。对象无法修改,只能创建和删除,因此非常适合存储照片或虚拟机映像等相对静态的内容。
EBS提供更接近传统存储的存储方式。连接到EBS的计算实例会将其视为传统硬盘。同一时间只能有一个正在运行的实例连接到一个EBS卷,因此EBS不能用于共享存储。
扩展服务
除了提供关键基础设施组件外,AWS还提供支持应用扩展的其他服务。由于AWS能够快速预置基础设施资源,Amazon开发了相应解决方案,可对这些资源进行自动扩展和负载均衡。
负载均衡
AWS提供弹性负载均衡(ELB)服务。最初,ELB是指一种在第4层运行的简单负载均衡器,用于将流量分配到池中的多个健康节点。该池可以跨多个可用区,从而在某个可用区发生故障时自动提供冗余。虽然此负载均衡器具备一些基本的网络第7层功能,但主要在第4层运行,仅以轮询方式将TCP流量路由到池中的节点。系统通过运行状况检查来确定哪些节点可用,进而将流量分配给这些节点。AWS现在将这种早期的负载均衡器称为Classic Load Balancer,以区别于新的Application Load Balancer(ALB)。
自动扩缩容
由于AWS提供备用容量,因此可以选择扩缩池中的节点。AWS CloudWatch服务会监控池中每个节点的性能指标。当达到预定义阈值时(例如CPU利用率连续5分钟超过60%),系统会预置另一个节点。反之,当达到较低阈值时,系统会移除一个节点。设计人员可以确定池中的节点数量上限和下限,以及触发节点实例化或移除的阈值。在负载均衡器后使用自动扩缩功能,可使节点池根据负载按需扩展或收缩。

F5应用交付服务
应用负责处理业务规则和逻辑,但往往缺少大规模生产环境部署、管理和运行所需的安全加固。F5解决方案通过提供下表所列的高级应用交付服务,帮助应用更快速、更智能、更安全地运行。
F5高级应用交付服务
应用级监控
- 高级应用健康检查(使用多步骤监控器)
- 多级运行状况检查(例如,检查数据库和应用是否均可用)
- 非HTTP运行状况检查(例如SIP、Microsoft Windows SQL Server和FTP)
- 采用高级算法,将流量更合理地分配到运行状况良好的服务器
全球可用性
- 确保应用在由不同云提供商或数据中心组成的异构环境中保持可用
- 与BIG-IP高级监控器集成
- 支持DNSSEC
更快
网络和传输优化
- 可配置的TCP协议栈,可通过优化实现跨WAN和蜂窝网络交付
- 无需更改后端基础设施,即可利用HTTP/2网关获得额外压缩和请求多路复用的优势
应用和数据优化
- 根据检测到的网络或客户端特征,选择性地实时优化图像
- 通过自适应压缩和TCP优化,加速SSL加密隧道中的WAN传输
更智能
数据路径可编程性
- 以编程方式全面控制应用流量,包括读取、写入和检查应用数据各个方面的能力
- 事件驱动的综合性语言
控制平面可编程性
- 能够根据服务器负载、应用行为或基础设施变化等事件修改配置
- 完全自主触发或由外部API驱动的触发器
更安全
高级网络防火墙服务
- 使用不局限于IP:端口:协议的条件(例如地理位置或端点信誉)制定流量控制决策
- HTTP协议验证
- 日期和时间计划
Web应用防火墙服务
- 用于识别Web应用威胁并阻止恶意流量的综合工具
- 出站数据丢失防护(DLP)服务
访问和身份服务
- 高级身份验证服务,例如双因素身份验证令牌、CAPTCHA或地理位置限制
- 客户端证书检查和端点检测
- SAML服务提供商(SP)和身份提供商(IdP)服务
拒绝服务(DoS)攻击缓解
- 主动式机器人防御
- 第7层DoS检测与缓解
SSL和加密
- SSL解密、流量检查和重新加密
- 从计算节点资源卸载SSL工作负载
高级应用交付服务可提升应用性能,同时增强可用性和安全性。这些服务可部署在独立于各个应用的战略控制点。将这些服务与应用业务逻辑解耦,可使应用满足业务需求,同时避免开发团队承担基础设施、管理和性能方面的负担。战略控制点还可统一处理治理问题,且不受各个应用影响。
整合应用:F5与AWS
通过与AWS基础设施进行云原生集成,F5可帮助组织充分发挥AWS部署的价值,提升应用性能、可用性和安全性。下一节将介绍AWS与F5如何协同工作。
引导启动
当服务器实例从通用镜像启动时,通常需要更改参数或进行配置,例如设置主机名和IP地址。在客户端计算机上,这些参数通过DHCP设置,但通过DHCP设置服务器参数往往会引发问题。除网络设置外,特定实例有时还需要特定的软件包或软件配置。
对于BIG-IP部署,管理员可能希望自动配置各个模块,例如BIG-IP Local Traffic Manager (LTM)的虚拟服务器和池配置、BIG-IP Application Security Manager的特定WAF配置,或BIG-IP Advanced Firewall Manager的防火墙设置。安装服务器实例时也会遇到同样的问题:基础镜像需要额外配置才能正常运行。
AWS提供两种配置实例的主要方法:创建新的AMI,或使用cloud-init在服务器启动过程中对其进行修改。创建新的AMI更适合多个实例共有且不太可能频繁更新的更改。相比之下,cloud-init更适合影响实例较少且预期使用周期较短的更改。
AMI
对于预计长期保留的更改,以及多个实例共有的更改,一种合适的方法是从配置与目标配置相近的AMI启动计算机,并以此创建新的AMI。管理员对正在运行的实例完成必要更改后,停止该实例,然后生成新的AMI并将其注册到AWS。此后从该AMI启动的所有实例都将包含这些更改。由于这种方法实际上会使更改永久生效,而且生成新AMI可能需要一定时间,因此,固化到AMI中的更改通常应长期有效,并可用于多个实例。使用AMI的另一个原因是,它可以缩短启动时间,因为某些cloud-init进程可能较为耗时。
Cloud-init
对于不适合纳入新AMI的必要更改,cloud-init是一个合适的选择。它实际上可在实例每次启动时运行启动脚本。使用cloud-init,可以将简单且特定于实例的更改嵌入实例中。
cloud-init的缺点包括:软件包安装等配置更改必须在启动时执行,因此会延长启动时间。在自动扩缩容场景中,启动时间过长会产生实际影响,可能导致自动扩缩容失效。因此,耗时较长的更改应纳入新的AMI,而不应通过cloud-init实施。
如果某项更改适用于多个实例,但并非所有实例,配置管理也会变得繁琐。例如,假设某个采用特定虚拟服务器配置的BIG-IP部署用于一个自动扩缩组。可以为这些计算机使用一个AMI,并为另一个自动扩缩组中的其他BIG-IP计算机使用另一个AMI。每个自动扩缩组使用一个单独的AMI,可确保cloud-init流程中只需执行各主机特有的更改。组内通用的更改均可嵌入AMI。这种方法的缺点是,每当所有计算机的通用更改发生变化时,都需要更新AMI。
自动扩缩容
应用程序提供某种功能,通常可供多个用户同时使用。随着应用程序的使用规模扩大,其需求可能会超出运行该应用程序的计算机容量。一旦出现这种情况,就需要评估扩容方案。扩展通常有三种方法:纵向扩展、流水线处理和横向扩展。
纵向扩展
纵向扩展是提升容量最简单的方法,因为只需将现有计算机更换为速度更快的计算机。安装速度更快的计算机后,无需更改应用或基础设施,即可提升应用各方面以及计算机上其他服务的运行速度。纵向扩展的缺点是,成本往往会随着性能提升呈指数级增长,最终导致收益递减。超过某个阈值后,纵向扩展的成本将高得难以承受。
流水线处理
流水线处理是将工作负载分解为一系列连续步骤的结果,类似于装配线。当不同计算机可以分别独立处理各个步骤时,整体吞吐量便可提高。然而,流水线处理只能提高吞吐量,而且往往以增加延迟为代价。换言之,流水线处理可以提升整体性能,但可能降低单个用户或单个请求的性能。流水线处理的另一个缺点是,需要深入了解可分解的工作流,并使基础设施与这种理解相匹配。这会使基础设施决策与业务逻辑紧密耦合,而这恰恰与许多组织努力实现的目标背道而驰。
横向扩展
横向扩展无需更改应用或计算机,而是将请求均匀分配到服务器池中。由于应用通常会同时处理多个相互独立的请求,因此可以安全地将请求分散到由相同应用服务器组成的服务器池中。横向扩展还具有冗余优势,池中任何成员发生故障都不会导致整个应用中断。横向扩展的缺点是,需要在应用外部进行复杂的编排,才能确保请求在池中的各节点之间均衡分配。
AWS 自动扩缩容
AWS auto scale采用横向扩展方式,为有需要的应用增加容量。CloudWatch服务会监控池中的节点。当节点达到预定义阈值时,CloudWatch会根据需要自动启动新节点或关闭池中的节点。使用BIG-IP平台时,此过程可通过以下两种方式之一完成:调整BIG-IP实例的数量,或调整单个BIG-IP实例后端池中的节点数量。两种方式的区别在于扩展对象不同,即BIG-IP实例或池。
在第一种场景中,BIG-IP池位于一对ELB设备之间。第一个ELB设备负责创建和终止BIG-IP成员,第二个ELB设备则是每个BIG-IP实例的服务器池中的唯一条目。当BIG-IP实例提供高级应用交付服务(例如SSL终止或充当Web应用防火墙)时,这种方法较为适用。第一个ELB设备执行负载均衡,并根据需要扩展或缩减池。
在第二种场景中,后端池成员的数量通过CloudWatch动态增减,但负载均衡由BIG-IP实例执行。BIG-IP实例与AWS通信,以发现池中新增或移除的节点。使用高级负载均衡功能(例如iRules脚本语言),或根据URL或内容定向请求时,适合采用这种方法。在这些情况下,单个BIG-IP实例足以管理后端池中服务器的负载。
安全与IAM
BIG-IP实例至少需要在两种场景下与AWS基础设施交互。第一,多可用区AWS部署需要更改AWS弹性IP所指向的IP地址。第二,AWS CloudWatch服务会在池中扩缩服务器,BIG-IP实例需要能够识别该服务添加和移除的池成员。与基础设施的每次交互都通过API调用进行。与其他调用API的软件一样,BIG-IP实例必须向AWS进行身份验证。通常,可通过两种方式向AWS进行身份验证:使用凭证或IAM角色。
凭证
最简单的身份验证方法是在API调用中包含相应的凭证。AWS凭证由访问密钥和秘密访问密钥组成,大致相当于用户名和密码。管理员生成凭证后,开发人员将其嵌入应用程序中。这样,应用程序便可访问相应的API调用。
虽然这种方法简单,但将凭证嵌入应用程序会带来安全风险。如果开发人员未妥善保护应用程序中的凭证,其他人员或软件可能会获取这些凭证并将其用于恶意目的。此外,采用这种方法时,很难在不修改软件的情况下更改凭证。使用凭证适合快速测试,但生产环境中的解决方案应采用其他身份验证方法。因此,AWS最佳实践不建议在应用程序中使用存储的凭证。
身份和访问管理
使用IAM角色是一种更安全的API调用身份验证方法。AWS Identity and Access Management(IAM)支持用户管理对AWS基础设施的访问权限。任何计算实例(例如BIG-IP计算机)都可以分配IAM角色,以获得一组特定功能的授权。实例启动时,IAM会为其生成一组临时凭证。这些凭证在实例运行期间有效,并且仅允许使用指定的API功能。配置IAM角色后,BIG-IP实例不会存储凭证,而是只能访问必要的基础设施API,因此比基于凭证的身份验证更安全。
多可用区可用性
如前所述,AWS数据中心分布在不同的地理区域中,每个数据中心都可以位于一个可用区(AZ)内。同一区域内的各个AZ不共享任何资源,包括电力、网络或建筑。事实上,同一区域内的各个AZ在地理位置上彼此隔离。由于可用区相互隔离,AWS订阅者可以确信,影响一个AZ的事件不会影响另一个AZ。换言之,通常情况下,同一区域内任何时刻最多只会有一个AZ不可用。这意味着,部署在两个或更多可用区中的任何服务都应能持续可用。
BIG-IP平台使用AWS弹性IP支持跨AWS可用区(AZ)的高可用性。AWS弹性IP并非与某个计算实例固有关联,而是可以动态转发到正在运行的计算实例的私有IP地址。为实现跨多个可用区的高可用性,需要将配置相同的BIG-IP实例和应用服务器分别部署在各自的可用区中。最初,弹性IP分配给其中一个BIG-IP实例。每个客户端都与弹性IP建立连接,弹性IP随后将连接转发到其中一个BIG-IP实例的私有IP地址。如果发生故障,另一个BIG-IP实例将接管相关职责,并通过API调用向AWS发出请求,将弹性IP地址转发到该实例。
弹性负载均衡器
通过与ELB集成,BIG-IP平台可提供与AWS功能无缝集成的应用服务,例如支持多个可用区(AZ)和BIG-IP节点自动扩缩容。
将ELB置于BIG-IP实例前端,可简化跨多个可用区的部署,因为ELB能够将流量无缝均衡到各可用区内由BIG-IP实例提供应用服务的各个应用堆栈。此方法可简化跨多个可用区的负载均衡。
当BIG-IP实例需要弹性扩缩时,启用自动扩缩的ELB可以自动扩展或缩减BIG-IP虚拟设备池,并提供Web应用防火墙、身份管理或SSL终止等应用服务。采用ELB夹层架构时,流量会先路由到第一个ELB,由其对流量进行负载均衡,并自动扩缩BIG-IP实例池。为简化整个BIG-IP池的配置,每个BIG-IP实例的服务器池中只需配置一个ELB地址。随后,第二个ELB将流量路由到下游服务器池。
ELB与BIG-IP的多种拓扑组合可提供自动扩缩、可用性和应用服务,而这些能力是单独使用其中任一项时无法实现的。架构师可充分发挥ELB和BIG-IP平台各自的优势,为特定部署提供所需级别的服务。
CloudFormation模板
为实现可重复的脚本化部署,AWS提供Cloud Formation模板(CFT),以简化部署和持续管理。为所需的服务或应用架构创建CFT后,AWS可使用该模板快速、可靠地预置应用。CFT在DevOps环境中尤其有用,可帮助团队轻松创建可重复的测试和生产部署流程。
F5不仅支持使用CFT部署BIG-IP实例,还提供了多个适用于典型BIG-IP部署的参考CFT文件。
通过调整参考CFT文件中的参数,可以使用脚本针对不同场景部署BIG-IP解决方案,包括自动扩展BIG-IP实例或BIG-IP实例后端的服务器,以及处理更复杂的场景。使用CFT和F5解决方案在AWS中自动执行可重复的部署,可以快速部署复杂的应用环境,并减少所需工作量。
文档
当然,如果无法充分利用,技术就难以发挥价值。为此,F5提供了丰富的文档,其中既有BIG-IP平台的通用文档,也有AWS中BIG-IP实例的详细文档。如有任何问题,可以先访问Ask F5。
文档选项卡提供有关特定BIG-IP模块的信息,以及完整的AWS集成专栏。AWS门户提供可搜索的界面,方便查找从入门到复杂部署场景的文档、文章、社区内容和资源。
对于文档未能解答的问题,F5 DevCentral社区可随时提供解答和帮助。
总结
采用公有云已不再是一时热潮,而是IT领域的长期趋势。Amazon Web Services作为规模庞大、服务全面的公有云服务提供商,使组织无需任何本地设备即可构建、测试和部署应用。F5已将其高级应用交付服务纳入AWS生态系统,并对其进行配置,帮助应用在AWS云环境中更快速、更智能、更安全地运行。
发布于2017年3月14日
