您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 7天跟我学iRules
7天跟我学iRules17天跟我学iRulesPeoplewhowriteiRulesare10timesmorelikelytogotoworkhappyeachday!---F5DevCentral开始前你需要了解:1、F5ADN的基本概念2、F5LTM的基本配置3、路由交换基础知识4、一些应用层知识,如HTTP、SSL、XML、DNS等5、不需要太多的技术偏执精神索引:第一天基本概念.................................................................................................2第二天HelloWorld!..........................................................................................8第三天几个常用的...........................................................................................12第四天Switch模型和强大的Class................................................................17第五天理一理头绪...........................................................................................22第六天分析个iRules.......................................................................................27第七天进阶篇..................................................................................................327天跟我学iRules2第一天基本概念各位好,新年新气象,从今天开始,我会发几篇帖子,希望可以带大家入门iRules,让我们强到无敌。所有内容都是我一个字一个字敲的,要骂可以,讨论昀好。首先有没有兄弟不知道iRules是干啥的?如果有的话就太可惜了。还是简单介绍一下,iRules是F5几种设备里(LTM平台)的开放脚本接口,基于TCL语言(TCLReference:),搞过NokiaFirewall的兄弟一定发现了,Nokia设备里的管理界面就是TCL语言写的,发音为“ti'kou”,简单易用。iRules能干些什么?相信很多兄弟都已经尝试着用过iRules,常用的基本就是几个简单的功能,诸如:不同地址forwarding啊,根据header包做会话保持啊,根据访问IP或URI使用不同的Pool啊等等等等,其实只要会写,iRules可以写出很多很多的功能。总之一句话,IP层面以上,LTM缺省可以实现的功能,全部可以由iRules来控制和增强,LTM缺省不可以实现的功能,也许也可以通过iRules可以实现。在后几天的课程中,我会向大家展示不同的事件。编程的基本概念搞网络的兄弟中间搞过编程的似乎不太多,但我估计上学的时候总多多少少都接触过Basic、C、Pascal之类的,不管用过那个,对于iRules来说都足够了。7天跟我学iRules3我们先复习几个概念:1、变量C=123很简单的一行,这里面有三个部分,“C”为变量名,你可以理解为房间号,“=”为赋值符号,TCL语言中为”Set”,意思为把右边这个值给左边的变量名,就是把123装到房间号为C的屋子里,123为变量值,就是一百二十三这个数值。这行执行完了,C里面就是123了,以后在任何地方我们用到C,其实用的就是123这个数值。由于C里面的数是可变的,以昀后赋进去的为准,所以赋了值的C我们叫它变量。举个例子:SetC123#这时候C里面是123SetC“abc”#这时候C里面是?大家想一下#没错,C现在是“abc”“#”为注释符号,以#开头的程序行,机器不予解释,主要是为了写程序时候看的清楚,比如:#=================#MyiRuleslearning#2009-09-09年编写#=================SetC123SetCabc7天跟我学iRules4程序运行时解释器会发现前面四句是注释行,不予解释,但是别人打开这个iRules一看,就能知道你编写的时间、内容、思路等等,在关键语句前加上注释说明是一个非常好的习惯,为自己,也为其他未来使用这个iRules的人更好的理解这段程序,特别是在复杂的iRules中,尤其重要。很好理解吧?123是变量值,一般来说iRules里的变量值有三种:数值value(123)、字符串string(“123”)、二进制binary,注意引号,有引号的变量说明是字符串变量)。变量里还有一种数组变量,以后我们用到时候再介绍。2、事件Events故名思议,事件就是发生的事情,这里我们叫触发的事件,比如当一个新的Client连接发起时,当Server回包时等等都叫一个事件。事件一般以when开始,例如:whenHTTP_REQUEST{……}就是当http访问请求发过来的时候……3、函数Functions著名的数学函数模型f(x)大家都还记得吧,iRules函数也仍然这个意思的模型,举个例子:7天跟我学iRules5md5string:意思就是将string这个字符串变量进行md5编码如果是:C=md5string执行完后变量C的内容就是将string进行MD5编码后的变量值函数有很多种,iRules里面自带了很多,我们也可以在应用中自己定义函数,这是后话了,暂且不提。4、条件语句只要认识几个英语单词,这个就很好解释了,来个例子:if{好好学习}{天天向上}很好理解吧?当满足{好好学习}这个条件,就会触发天天向上这个命令,总结一下:if{conditionalstatement}{command(s)}类似的还有:if{好好学习}{天天向上}elseif{天天不学}{考不上大学}else{天才或者潦倒7天跟我学iRules6}解释一下,如果...好好学习...就天天向上...否则如果...天天不学...就考不上大学...既不好好学习也不天天不学...那不是天才就潦倒,明白?这一切都是按顺序来解释的,命中了任意一个条件,都将结束这个if判断语句。总结一下:if{expression}{statement_command}elseif{expression}{statement_command}else{statement_command}好,今天就写这么多,大家先看看,明天我们编写第一个程序。作业:指出下面程序哪些是变量,哪些是函数,在什么事件下用的什么条件语句。whenHTTP_REQUEST{if{[HTTP::uri]starts_with/clone_me}{poolreal_poolclonepoolclone_pool}else{poolreal_pool}}7天跟我学iRules77天跟我学iRules8第二天HelloWorld!学过编程的人都知道,几乎所有程序的第一个例子都是教大家输出“HelloWorld!”,咱们也顺水流一次。昨天的内容应该很好理解和消化,其实编程是很好学的,基本就是将设计好的逻辑思维用一种语法表达出来给机器执行,看下面:whenHTTP_REQUEST{loglocal0.infoHelloWorld!}意思很简单,当HTTP请求发起的时候,我们在LTM的log文件里写入“HelloWorld!”这句话,你可以使用“tail/var/log/ltm这个命令查看结果。写过程序的人都知道,调试是昀重要的一步,而面向TCP数据过程的iRules里面没有任何界面输出,我们如何调试程序呢?iRules里面提供的log是个非常好而且有效的命令:log[facility.level]message意思就是将message写到[facility.level]的log里,[facility.level]代表不同的log文件和不同的log级别和文件,见下表:facilityIntroFilelocal0GeneralBIG-IPspecificmessages/var/log/ltmlocal1EnterpriseManagementspecific/var/log/em7天跟我学iRules9messageslocal2GTMspecificmessages/var/log/gtmlocal3ASMspecificmessages/var/log/asmlocal4ITCMportalandserver(iControl)specificmessages/var/log/ltmLocal5PacketFilteringspecificmessages/var/log/pktfilter在程序关键点放上这句话,然后进入F5设备命令行界面,配合linux命令“tail-ffilename”(-f为动态显示昀后一行)可以非常清楚的观察程序运行状态,便于我们调试,希望大家牢记。例如:1.whenHTTP_REQUEST{2.loglocal0.----------------------3.loglocal0.URIInformation4.loglocal0.----------------------}5.loglocal0.HTTP::uri:[HTTP::uri]6.loglocal0.----------------------7.loglocal0.PathInformation8.loglocal0.----------------------9.loglocal0.HTTP::path:[HTTP::path]10.}这个是程序中使用log观察运行状态的一个典型例子,大家可以测试观察一下,不难理解。7天跟我学iRules10大家一定注意到里面除了一些字符串(URIInformation)以外有很多“HTTP::xxxx”之类的字符,做什么用的呢?我们拿一个来分析分析,第5行:“HTTP::uri:[HTTP::uri]”,我们注意到里面有两个“HTTP::uri”出现,有何不同?很简单,中括号“[]”括起来的表示这是一个命令,[HTTP::uri]这个命令的作用是得到HTTP的uri值,不带中括号却在双引号中间的的是字符串,直接显示;命令中HTTP代表HTTP协议,uri...没人不知道吧?他们之间用“::”连接,代表从属关系,uri是属于HTTP这个命令体系的,类似的还有:[IP::addr]、[TCP::payload]、[SSL::handshake]等。如果我们发起一个HTTP请求,,命中这个iRules,那么在log中会记录下下面的一行:“HTTP::uri:/bbs/abcd.htm”这样非常便于我们对用户的访问进行分析,按需求写出对不同访问进行不同操作的程序,如分配不同的访问uri到不同的pool中等等。命令昨天介绍了变量事件等概念,今天我们来说说iRules的命令,刚才分析了“HTTP::uri”,这也是iRules中的一个典型的命令模型,这些命令在iRules的英文文档中叫“Commands”,非常多,大家可以到这里浏览一下,大概知
本文标题:7天跟我学iRules
链接地址:https://www.777doc.com/doc-5194289 .html