下文给大家带来负载均衡上应该如何使用iRule 来选择SNAT pool,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用亿速云在行业内累计的经验来做一个解答。
需求:
使用iRule 根据不同目的地址或端口,来选择SNAT 地址 ,实现相同的后台节点,访问不同目的地址或者目的端口时,源地址也会不同;网络概况:
内网:
后台节点server:192.168.10.71
对应VLAN: Internal-selfIP: 192.168.10.1
外网:
客户端client: 172.16.10.172
对应VLAN: external-selfIP: 172.16.10.1
新建virtual server :http_VS: 172.16.10.100:80
VS关联一个负载均衡pool:
Pool member: 192.168.10.71:80
新建SNAT :out_snat: 172.16.10.71
snat out_snat {
translation 172.16.10.71
origin 192.168.10.71 //只允许一台机器出向访问
}
snat out_snat2 {
translation 172.16.10.250
origin 0.0.0.0 mask 0.0.0.0 //允许所有的机器出向访问
}
snat out_snat3 {
translation 172.16.10.188
origin 0.0.0.0 mask 0.0.0.0
vlan internal enable //仅限于vlan --internal 的流量命中
}
新建必要的出向的pool(将访问的目的地址+端口 做成pool形式,以便iRule调用):
pool http_pool { member 172.16.10.71:80 }
pool ftp_pool { member 172.16.10.71:21 }
新建必要的snatpool:
snatpool SNATPool_21 { member 172.16.10.21 }
snatpool SNATPool_80 { member 172.16.10.80 }
snatpool Internal_SNAT_Pool { member 172.16.10.250 }
新建virtual server :snat_VS: 0.0.0.0:0
VS关联一个iRule :iSNAT_Rule,内容如下:
rule iSNAT_Rule {
when CLIENT_ACCEPTED { /* 定义事件 */
set MYPORT [TCP::local_port] /* 定义目的端口 */
set S_IP [IP::client_addr] /* 定义发起访问的源地址 */
log local0. "Port is $MYPORT" /* 记录日志,打印在/var/log/ltm */
log local0. " S_IP is $S_IP"
if {[IP::addr [IP::client_addr] equals 192.168.10.71]} /* 设置源地址过滤条件 */
{ switch $MYPORT { /* 根据不同目的端口,选择不同SNAT地址 */
80 {
snatpool SNATPool_80
pool http_pool /* 最终选择访问目的地 */
}
21 {
snatpool SNATPool_21
pool ftp_pool
}
default {
snatpool Internal_SNAT_Pool
pool other_pool
}
}
}
else { /* 如果是其他后台节点,可根据需求自由配置*/
snatpool Internal_SNAT_Pool
pool http_pool
}
}
}
//其实整个实现需求的核心在于iRule
此方案配置完成后,BIG-IP系统会做如下动作:
(如从server 访问client 的http服务)
一个HTTP请求从server端到达BIG-IP系统,命中VS 0.0.0.0:0;
iSNAT_Rule被引用,检查请求数据包,BIG-IP系统选中SNATPool_80和负载均衡pool http_pool;
采用round robin负载均衡算法,BIG-IP系统从http_pool中选中下一跳地址172.16.10.71;
SNATPool_80中有一个翻译地址172.16.10.80 ;
BIG-IP系统从这翻译地址池中随机地选取一个地址 172.16.10.80 (本例为固定源地址翻译,故翻译地址池中只有一个供选择);
最后,BIG-IP系统将客户端源IP地址翻译成地址172.16.10.80,并将请求包转发至172.16.10.71:80;
此方案,切忌原有的SNAT 会失效,因为优先级是以7层为先,依次递减,故0.0.0.0的virtual server 优先级高于普通的SNAT, 所以要在iRule 中考虑详尽情况;
新建必要的出向的pool(将访问的目的地址+端口 做成pool形式,以便iRule调用):
pool http_pool { member 172.16.10.71:80 }
新建virtual server :client_VS: 192.168.10.237:0
VS关联一个iRule :iSNAT_Rule2,内容如下:
rule iSNAT_Rule2 {
when CLIENT_ACCEPTED {
set MYPORT [TCP::local_port]
log local0. "Port is $MYPORT"
switch $MYPORT {
80 {
snatpool SNATPool_80
pool http
}
21 {
snatpool SNATPool_21
pool ftp_pool
}
default {
snatpool Internal_SNAT_Pool
pool http
}
}
}
}
此方案适合内网段中 出向访问需求很多的情况;
此方案采用将virtual server 建立在相对的内网段,使得访问client 变成了访问内网段的virtual server ,在经过BIGIP的处理后,命中 iRule 中的某一个SNATpool,源地址就变成SNATpool中可供选择的地址 ,目的地址转化为出向pool 中的172.16.10.71,并将请求包转发至172.16.10.71:80;
如果内网段中的其他节点也需要访问外网,而没有一对多的源地址转换需求,即可完全按照正常的SNAT方式进行,互不冲突;
看了以上关于负载均衡上应该如何使用iRule 来选择SNAT pool,如果大家还有什么地方需要了解的可以在亿速云行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,亿速云技术工程师在行业内拥有十几年的经验了。亿速云官网链接www.yisu.com
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。