您好,登錄后才能下訂單哦!
本篇文章為大家展示了不同場景容器內(nèi)獲取客戶端源IP的方法是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
客戶端和容器服務(wù)器之間可能存在多種不同形式的代理服務(wù)器,那容器中如何獲取到客戶端真實的源ip呢?
k8s已經(jīng)成為當今容器化的標準,人們在享受容器帶來的高效與便利的同時,也遇到一些煩惱:客戶端和容器服務(wù)器之間可能存在多種不同形式的代理服務(wù)器,那容器中如何獲取到客戶端真實的源ip呢?下面我們就幾種場景類型如何能獲取到源ip進行討論。
原理介紹:
四層轉(zhuǎn)發(fā):
Nodeport:nodeport訪問方式,是將容器端口映射到節(jié)點端口,如果“服務(wù)親和”選擇“集群級別”需要經(jīng)過一次服務(wù)轉(zhuǎn)發(fā),無法實現(xiàn)獲取客戶端源ip,而“節(jié)點模式”不經(jīng)過轉(zhuǎn)發(fā),可以獲取客戶端源ip。
ELB:ELB訪問方式,是通過華為云ELB產(chǎn)品來實現(xiàn)負載均衡,“服務(wù)親和”也是需要選擇“節(jié)點級別”,其中“共享型”ELB需要在節(jié)點安裝TOA插件,而“獨享型”ELB默認透傳源ip,不需要安裝TOA插件。
七層轉(zhuǎn)發(fā):
Ingress:應(yīng)用在七層訪問時,客戶端源ip默認保存在HTTP頭部的“X-Forwarded-For”字段,無需做其他操作。
具體操作:
負載均衡( LoadBalancer )的Service模式下,支持容器中獲取源IP需要滿足以下前提條件:
1. 服務(wù)親和選擇“節(jié)點級別”而不是“集群級別”。
2. 在pod所在的節(jié)點安裝TOA插件。(“獨享型”ELB無需進行以下操作)
安裝TOA插件步驟如下:
1) 準備編譯環(huán)境:
執(zhí)行如下命令,安裝gcc編譯器。
]# yum install gcc
執(zhí)行如下命令,安裝make工具。
]# yum install make
2)編譯內(nèi)核模塊
a) 下載TOA內(nèi)核模塊源代碼。
]# wget https://github.com/Huawei/TCP_option_address/archive/master.zip b) 執(zhí)行如下命令,進入源碼目錄,編譯模塊。
]# unzip master.zip ]# cd TCP_option_address-master/src/ ]# make
編譯過程未提示warning或者error,說明編譯成功,檢查當前目錄下是否已經(jīng)生成toa.ko文件。
說明:如果報錯提示“config_retpoline=y but not supported by the compiler, Compiler update recommended”,表明gcc版本過老,建議將gcc升級為較新版本。
3)加載內(nèi)核模塊
執(zhí)行如下命令,加載內(nèi)核模塊。
]# insmod toa.ko
執(zhí)行如下命令,驗證模塊加載情況,查看內(nèi)核輸出信息。
]# dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,說明內(nèi)核模塊加載成功。
4) 自動加載內(nèi)核模塊
為了使TOA內(nèi)核模塊在系統(tǒng)啟動時生效,可以將加載TOA內(nèi)核模塊的命令加到客戶的啟動腳本中。
在“/etc/sysconfig/modules/”目錄下新建toa.modules文件。該文件包含了TOA內(nèi)核模塊的加載腳本,請參考如下示例:
#!/bin/sh /sbin/modinfo -F filename /root/toa/toa.ko > /dev/null 2>&1 if [ $? -eq 0 ]; then /sbin/insmod /root/TCP_option_address-master/src/toa.ko fi
注意:其中“/root/TCP_option_address-master/src/toa.ko”為TOA內(nèi)核模塊文件的路徑,客戶需要將其替換為自己編譯的TOA內(nèi)核模塊路徑。
執(zhí)行以下命令,為toa.modules啟動腳本添加可執(zhí)行權(quán)限。
]# chmod +x /etc/sysconfig/modules/toa.modules
這種情況下可以從四層負載均衡上獲取到客戶端的源IP(可以通過netstat查看)。
測試要點:這種情況下可以使用netstat看到客戶端連接到POD的IP地址。
節(jié)點訪問(NodePort)類型的Service的服務(wù)親和選擇“節(jié)點級別”而不是“集群級別”,即Service的 spec.externalTrafficPolicy 需要設(shè)置為 Local。
圖1 服務(wù)親和選擇節(jié)點級別
七層負載均衡的模式下,不能在四層負載均衡上獲取客戶端IP(不能通過netstat查看客戶端IP),需要對應(yīng)用服務(wù)器進行配置,然后通過七層負載均衡的http頭中的x-forward-for獲取。
真實的來訪者IP會被負載均衡放在HTTP頭部的X-Forwarded-For字段,格式如下:
X-Forwarded-For: 來訪者真實IP, 代理服務(wù)器1-IP, 代理服務(wù)器2-IP, ...
測試要點:從容器中獲取http請求頭”x-forward-for”,獲取的IP為客戶端的IP。
上述內(nèi)容就是不同場景容器內(nèi)獲取客戶端源IP的方法是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。