您好,登錄后才能下訂單哦!
下文給大家帶來負載均衡上應該如何使用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.neiyidaogou.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。