F5 BIGIP iRules编写宝典
1BIGIP V9的结构
BIGIP具备世界领先的TM/OS操作系统,通过先进的功能强大的UIE(Universal Inspection Engine)来进行流量的监测,并通过灵活的iRules将流量进行分配、通行、阻断和指定带宽控制。Rate Shaping 模块则负责流量的统计、整形和控制。
TM/OS结构图如下:
图表 1 TM/OS结构图
在设备底层,是F5独一无二的专用四七层ASIC芯片加上可高达80Gbps交换背板和2颗双核64位的高性能CPU。最大吞吐能力可达到4GB。
TM/OS系统运行在高性能的硬件平台上。通过独有的TCP Stack技术,提供大流量下的稳定工作平台,特别针对低带宽和高延迟客户端有独特的加速功能。TM/OS通过UIE 和iRules提供双向基于流的监测和控制功能。
在TM/OS上,是BIGIP的各种功能和应用模块,分别从应用安全、应用加速和服务提交等三个方面对应用进行加速和全面的安全防护。其典型功能包括内存Cache加速模块、SSL加速模块、防火墙模块、带宽控制模块、高级用户认证模块等。
所有的BIGIP设备均可通过iControl协议进行数据收集和设备管理。iControl架构提供免费的开发包。客户可以基于自身需求通过.NET或JA V A应用的二次开发方便的实现对BIGIP设备进行监控和管理。也可通过第三方的管理工具对设备进行监控和管理。
2应用流量管理的实现
BIGIP对应用流量管理的实现,主要通过Virtual Server、Profile、iRules、Pool、Member、Monitor和Persistent(会话保持)实现。
Member为每一个服务器的IP地址加上服务端口。每一个Member代表一个应用程序。在配置过程中,Member不需要单独添加,而在Pool的配置中进行。通常,在一个对外提供
同样功能Member组中,所有的Member必须保持内容上的一致。
Pool的主要作用是对一组执行相同功能的服务器应用进行捆绑,在Pool中可定义应用流量管理算法,将外部的访问流量按照规则分配到不同的服务器上。在定义一个Pool时,必须知道每台服务器的IP地址和对外提供服务的端口号,不同的服务器可以以不同的端口提供服务,BIGIP可执行端口映射将这些服务对外进行统一端口服务。
iRules是BIGIP特性中的一个重要组件,Rule是一个用户编写的script,用来在两个或者更多的pool中进行选择。换句话说,rule用于根据一定的判断条件选择和一个Virtual Server 相关联的pool。Rules是一个可选的特性使您可以将流量不单是定义到默认的对应Virtual Server的pool。Rules允许您直接将流量分配到您所指定的pool中去。
Profile 是应用于特定网络流量类型(例如HTTP连接)的一组配置设置。如果希望Virtual Server管理某种类型的流量,可以将相关适用的Profile与Virtual Server进行关联,随后Virtual Server便会将该Profile的设置应用到该类型的所有流量。
Virtual Server为BIGIP上对外提供服务的地址加上服务端口,每个V irtual Server后对应一个或者多个Pool。BIGIP将从每个V irtual Server接收到的流量分配到一个或多个Pool中,然后按照Pool中的应用流量管理算法分配到一个或多个Node中。
Monitor的作用是检查服务器的健康状态。BIGIP V9中,已经预定义了20多种Monitor 的模版,包括TCP、UDP、HTTP、FTP、SQL等常用的服务。当然,用户也可以根据标准模版进行自定义或者完全自定义一个External Monitor。
在通常情况下,BIGIP V9处理的最小对象为一个连接。对于客户端每发起的一个Soket 连接,BIGIP识别为一个Connection。在BIGIP内部,存放有一张所有Soket连接分配的服务器对应表。该表的单项结构大致如下:
Sport:客户端发起请求的源端口,通常,该端口为一个随机值
Virtual Server IP:Port :用户访问的V irtual Server地址和端口
Node IP:Port:该Connection被分配去往的Node节点IP和端口
通过Profile和iRules定义,BIGIP V9也可以对长连接进行拆分,以用户自定义的数据包作为流量分发管理的最小对象。
3iRules的作用范围
TM/OS集成了可编程控制的iRules和通用检查引擎(UIE),凭借完整的应用数据包检查及转换能力、可扩展的事件驱动iRules以及面向会话层的交换(session-aware switching)技术、BIG-IP提供了业内最智能的流量控制能务,配于强大的硬件加速处理能力,最终可以保证在极高的速度下处理各种复杂的应用交换与控制问题。
3.1 UIE实现了对所有TCP、UDP应用的数据包分析与信息提取功能
TM/OS集成了F5新版定制的iRules 和通用检查引擎(UIE),为应用交易或应用流内任何时刻的应用流量处理都供了无与伦比的控制能力。凭借完整的有效载荷检验及转换能力、可扩展的事件驱动iRules 以及面向会话层的交换(session-aware switching )技术,BIG-IP 提供了业内最智能的流量控制点,以(以网速)解决各种应用交付问题。
UIE支持完全的双向应用数据流分析,包换Inbound与Outbound流量。
业内唯一一款可提供完整应用流的解决方案--能够高速进行的全面的有效负载检查和基于事件的可编程流量管理,以及时掌握流量信息,并采取相应控制与转换措施。
UIE --Universal Inspection Engine 通用搜索引擎,可以检查TCP/UDP数据中的任何内容,包括TCP Header,TCP Payload等。与其它的状态监测方式不同,通过UIE,甚至可以实现数据流的双向监测。
图表 2 UIE通用搜索引擎工作示意图
UIE可以在多个条件下触发,包括客户端建立连接时、客户端TCP三次握手完成后数据传输时、服务器端建立连接时和服务器返回数据时等。针对特殊的应用,还具有应用触发条件如SSL连接建立和客户端证书提交等。
UIE可检测的内容包括:客户端IP、客户端源端口、服务器端IP、服务器端口、客户端数据、服务器端数据。通过一系列的字符串和二进制处理机制,可将处理的结果提交iRules 进行判别和处理。
3.2 iRule基于事件驱动的编程方式、功能强大、扩充性极强的开发语言TCL
在传统的TCL语言的基础上,F5根据应用交付网络的特点,对TCL进行了扩充,F5 BIGIP的iRules通过事件方式驱动,对每一个Client-BIGIP-Server连接中间的各个动作均有对应的事件,在这些事件发生时,iRules可以根据UIE监测到的数据来对流量进行处理。
典型的事件流程图如下:
在每个事件中,BIGIP可以通过UIE获取各种判断条件,例如,Rules可以配置为判断以下条件:
●是否在数据包中包含以”cgi”作为结尾的HTTP请求?
●是否数据包的源地址是以八进制“206”为开头?
●是否在TCP的数据包中包含字符串“ABC”。
在获取判断条件后,iRules则可对该数据流进行处理。例如:
如果数据包源IP为20.1.1.2则将其分配到服务器A;
如数据包前50个字符包含字母“REAL”则将其丢弃;
如果数据包第一个字符为0xE3则将其放入4Mbps的一个RateClass进行带宽控制。3.3 选择性地址转换(iSNAT)
应用交换机对服务器实现负载均衡时,往往需要将一组服务器虚拟成一台服务器对外提供服务。与此相应的,当这一组服务器对外通讯时也会要求采用虚拟服务器的地址与外界通讯,这就需要在应用交换机上通过网络地址转换(NA T)来实现。当应用交换机同时对多组服务器进行负载均衡,而单台服务器同时参与到多个负载均衡器组的时候,对网络地址转换的要求变得复杂。而F5 BIG-IP应用交换机所提供的可编程控制的地址转换能力(iSNA T),可以胜任上述要求。
3.4 双向的数据流改写功能
TM/OS的Full Proxy结构使BIG-IP具有了双向数据流改写的能力。与其他传统的网络交换机不同,BIGIP可以对任意内容进行改写,例如TCP Content,UDP Content,HTTP Request,HTTP Response等内容进行修改。
同时,BIGIP的iRules也可以直接对Client端请求进行回应,回应的内容可以完全进行
自行构建。直接回应支持的协议包括:
?TCP Response
?UDP Response
?HTTP Response
在进行改写和回应时,BIGIP将对数据包的底层进行重构,比如数据包的TCP CheckSum, Max segment Size,TCP Window等参数。
4Rules编写入门
Rules的应用可以简单,也可以复杂。在进行Rules编写前,您必须先学习BIGIP的配置方法。正确的配置相应的Pool、member和V irtual Server。
在您对BIGIP的基本配置了解的基础上,我们先简要介绍一下Rules所使用的语言框架TCL 语言。
4.1 TCL语言简介
Tcl/Tk 的发明人John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路CAD 设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使Ousterhout 教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了Tcl (Tool Command Language) 语言的产生。Tcl 最初的构想的是希望把编程按照基于组件的方法(component approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的, 具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能,用于不同的目的。并可为其它的应用程序所利用。当然, 这种语言还要有良好的扩展性, 以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起, 使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的Java 不谋而合。终于在1988 年的春天, 这种强大灵活的胶水- Tcl 语言被发明出来了。
4.2 编写您的第一个rules
对于很多第一次接触Rules的使用者来说,总觉得rule充满了神秘,在一台设备中,对每一个连接都进行一次处理,那需要多么的复杂啊。但实际上,BIGIP通过强大的TMOS,已经隐藏了许多底层的内容,而您所需要关心的,就是如何编写对于单一连接的处理模式,BIGIP会自动地在每个连接中执行Rules,并且能达到非常高的效率。
在BIGIP中,有接近50个事件,200多个函数可提供使用,要在很短的时间内学会所
有的rule使用是非常困难的。但是我们可以根据实际的需要,一步一步地来学习rule的编写方法。在真正需要使用的时候,再查找相应的函数来进行编写。
4.2.1标准的iRules结构
在一个标准的iRules结构中,包含以下几个部分:
1、事件的定义
2、Operators
3、命令
其中,事件的定义部分决定了在什么情况下触发该事件中需要执行的语句。Operators 用于根据流量进行判断,最后,由iRules commands决定对数据如何处理。
Event declarations
{
Operators
{
iRule commands
}
}
4.2.2直接返回数据的Rule
在一个最简单的环境中,BIGIP可以直接返回用户请求,而不需要后端的服务器来进行应答,或者是由BIGIP和客户端进行初步的沟通,在取得客户端的真实信息后,再转发到服务器。
下面是一个直接返回内容的例子:
when HTTP_REQUEST {
HTTP::respond 200 content "
让我们一起进入rules的奇妙世界!