這篇“kubernetes怎么在容器服務(wù)中獲取客戶端真實(shí)源IP”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“kubernetes怎么在容器服務(wù)中獲取客戶端真實(shí)源IP”文章吧。
創(chuàng)新互聯(lián)建站長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為堯都企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè),堯都網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
當(dāng)需要能感知到服務(wù)請(qǐng)求來源去滿足一些業(yè)務(wù)需求時(shí),就需要后端服務(wù)能準(zhǔn)確獲取到請(qǐng)求客戶端的真實(shí)源 IP, 比如以下場(chǎng)景:
對(duì)服務(wù)請(qǐng)求的來源有做審計(jì)的需求,如異地登陸告警。
針對(duì)安全攻擊或安全事件溯源需求,如 APT 攻擊、DDoS 攻擊等。
業(yè)務(wù)場(chǎng)景數(shù)據(jù)分析需求,如業(yè)務(wù)請(qǐng)求區(qū)域統(tǒng)計(jì)。
其他需要獲取客戶端地址的需求。
在TKE中默認(rèn)的外部負(fù)載均衡器是 騰訊云負(fù)載均衡器,作為服務(wù)流量的訪問首入口,騰訊云負(fù)載均衡器會(huì)將請(qǐng)求流量負(fù)載轉(zhuǎn)發(fā)到 Kubernetes 工作節(jié)點(diǎn)的 Kubernets Service(默認(rèn)),此負(fù)載均衡過程會(huì)保留客戶端真實(shí)源 IP(透?jìng)鬓D(zhuǎn)發(fā)),但在 Kubernetes Service 轉(zhuǎn)發(fā)場(chǎng)景下,無論是使用 iptbales 還是 ipvs 的負(fù)載均衡轉(zhuǎn)發(fā)模式,轉(zhuǎn)發(fā)時(shí)都會(huì)對(duì)數(shù)據(jù)包做 SNAT,即不會(huì)保留客戶端真實(shí)源 IP,為了能夠準(zhǔn)確的獲取到客戶端的真實(shí)源 IP,在 TKE 使用場(chǎng)景下,主要有四種方法獲取客戶端真實(shí)源 IP,下面將逐個(gè)展開介紹下。
要啟用保留客戶端 IP 功能,可在 Service 資源中配置字段 Service.spec.externalTrafficPolicy
,此字段表示服務(wù)是否希望將外部流量路由到節(jié)點(diǎn)本地或集群范圍的端點(diǎn)。有兩個(gè)選項(xiàng)值:Cluster
(默認(rèn))和 Local
方式,如下圖所示:
Cluster
表示隱藏了客戶端源 IP, LoadBalancer
和 NodePort
類型服務(wù)流量可能會(huì)被轉(zhuǎn)發(fā)到其他節(jié)點(diǎn)的 Pods; Local
表示保留客戶端源 IP 并避免 LoadBalancer
和 NodePort
類型的服務(wù)流量轉(zhuǎn)發(fā)到其他節(jié)點(diǎn)的 Pods,詳情請(qǐng)參考 kubernets設(shè)置外部負(fù)載均衡器說明。相關(guān) YAML 配置示例如下:
apiVersion: v1 kind: Service metadata: name: example-Service spec: selector: app: example-Service ports: - port: 8765 targetPort: 9376 externalTrafficPolicy: Local type: LoadBalancer
優(yōu)點(diǎn):只需要修改 Kubernets Service 資源配置即可。
缺點(diǎn):會(huì)存在潛在的 Pods(Endpoints)流量負(fù)載不均衡風(fēng)險(xiǎn)。
使用TKE原生支持的 CLB 直通 Pod 的轉(zhuǎn)發(fā)功能(CLB 透?jìng)鬓D(zhuǎn)發(fā),并繞過 Kubernetes Service 流量轉(zhuǎn)發(fā)),后端 Pods 收到的請(qǐng)求的源IP即是客戶端真實(shí)源IP,此方式無論是在四層還是七層服務(wù)的轉(zhuǎn)發(fā)場(chǎng)景下都適用,轉(zhuǎn)發(fā)原理如下圖:
詳細(xì)介紹和配置請(qǐng)參考文檔 TKE場(chǎng)景下騰訊云CLB直通Pod使用場(chǎng)景介紹。
優(yōu)點(diǎn):TKE原生支持的功能特性,只需在控制臺(tái)按照文檔配置即可。
缺點(diǎn):集群需要開啟 VPC-CNI 模式網(wǎng)絡(luò),詳情參考文檔 VPC-CNI 模式說明
在七層(HTTP/HTTPS)服務(wù)轉(zhuǎn)發(fā)場(chǎng)景下,可以通過獲取 Http Header 中 X-Forwarded-For
和 X-Real-IP
字段的值來獲取客戶端真實(shí)源 IP, TKE 中有兩種場(chǎng)景使用方式,原理介紹如下:
在場(chǎng)景一中,騰訊云負(fù)載均衡器(CLB 七層) 默認(rèn)會(huì)將客戶端真實(shí)源IP放到 HTTP Header 的 X-Forwarded-For
和 X-Real-IP
字段,當(dāng)服務(wù)流量在經(jīng)過 Service 四層轉(zhuǎn)發(fā)后會(huì)保留上述字段,后端通過WEB服務(wù)器代理配置或應(yīng)用代碼方式獲取到客戶端真實(shí)源IP,詳情參考請(qǐng)文檔 負(fù)載均衡如何獲取客戶端真實(shí) IP - 最佳實(shí)踐 - 文檔中心 - 騰訊云;
在場(chǎng)景二中, Nginx Ingress 服務(wù)部署需要 Nginx Ingress 能直接感知客戶端真實(shí)源 IP,可以采用保留客戶端源IP的配置方式(詳情參考 kubernets設(shè)置外部負(fù)載均衡器說明 ),或通過 CLB 直通 Pod 的方式(詳情參考 TKE場(chǎng)景下騰訊云CLB直通Pod使用場(chǎng)景介紹),當(dāng) Nginx Ingress 在轉(zhuǎn)發(fā)請(qǐng)求時(shí)會(huì)通過 X-Forwarded-For
和 X-Real-IP
字段來記錄客戶端源 IP,后端可以通過此字段獲得客戶端真實(shí)源 IP。
下面詳細(xì)介紹在 TKE 中兩種場(chǎng)景的配置使用方法:
在TKE控制臺(tái)先為工作負(fù)載創(chuàng)建一個(gè)主機(jī)端口訪問方式的 Service 資源,如下圖:
然后在控制臺(tái)為 Service 新建一個(gè)對(duì)應(yīng)的 Ingress 訪問入口,如下圖:
待配置生效后,在后端通過獲取 HTTP Header 中的 X-Forwarded-For
或 X-Real-IP
字段值得到客戶端真實(shí)源 IP。后端抓包測(cè)試結(jié)果示例如下:
Nginx Ingress 可以通過 TKE 應(yīng)用商店、自定義 YAML 配置或使用官方(helm 安裝)方式安裝,原理和部署方法可參考文檔 在 TKE 上部署 Nginx Ingress 中的部署方案一或方案三,若選擇方案一部署,則需要修改 Nginx Ingress Controller Service 的 externalTrafficPolicy
字段值為 Local
。安裝完成后,會(huì)在TKE控制臺(tái)自動(dòng)為 Nginx Ingress Controller 服務(wù)創(chuàng)建一個(gè) CLB(四層)訪問入口,如下圖所示:
為要轉(zhuǎn)發(fā)的后端服務(wù)創(chuàng)建一個(gè) Ingress 資源并配置轉(zhuǎn)發(fā)規(guī)則, 可以使用以下 YAML 創(chuàng)建:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx # ingressClass類為"nginx" name: example namespace: default spec: rules: # 配置服務(wù)轉(zhuǎn)發(fā)規(guī)則 - http: paths: - backend: serviceName: nginx servicePort: 80 path: /
待配置生效后,在后端獲取 Http Header 中的 X-Forwarded-For
或 X-Real-IP
字段值得到客戶端真實(shí)源 IP,后端抓包測(cè)試結(jié)果示例如下:
以上介紹的兩種場(chǎng)景都可以滿足獲取客戶端真實(shí)源 IP 的需求,且具有以下優(yōu)點(diǎn)和缺點(diǎn):
優(yōu)點(diǎn):在七層(HTTP/HTTPS)流量轉(zhuǎn)發(fā)場(chǎng)景下比較推薦,可通過WEB服務(wù)代理的配置或后端應(yīng)用代碼直接獲取 Http Header 中的字段即可拿到客戶端真實(shí)IP,非常簡(jiǎn)單高效。
缺點(diǎn):僅適用于七層(HTTP/HTTPS)流量轉(zhuǎn)發(fā)場(chǎng)景,不適用于四層轉(zhuǎn)發(fā)場(chǎng)景,如果是四層轉(zhuǎn)發(fā)場(chǎng)景,請(qǐng)使用后面介紹的其他方式。
TOA 內(nèi)核模塊原理和加載方式參考 全球應(yīng)用加速 獲取訪問用戶真實(shí) IP - 操作指南 - 文檔中心 - 騰訊云 文檔。
優(yōu)點(diǎn):對(duì)于 TCP 傳輸方式,在內(nèi)核層面且僅對(duì) TCP 連接的首包進(jìn)行改造,幾乎沒有性能損耗。
缺點(diǎn):
需要在集群工作節(jié)點(diǎn)上加載 TOA 內(nèi)核模塊,且需在服務(wù)端通過函數(shù)調(diào)用獲取攜帶的源 IP、端口信息,配置使用比較麻煩。
對(duì)于 UDP 傳輸方式,會(huì)對(duì)每個(gè)數(shù)據(jù)包改造添加 option 數(shù)據(jù)(源 IP 和源端口),帶來網(wǎng)絡(luò)傳輸通道性能損耗。
以上就是關(guān)于“kubernetes怎么在容器服務(wù)中獲取客戶端真實(shí)源IP”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱:kubernetes怎么在容器服務(wù)中獲取客戶端真實(shí)源IP
轉(zhuǎn)載源于:http://aaarwkj.com/article38/gghipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、定制網(wǎng)站、做網(wǎng)站、企業(yè)網(wǎng)站制作、全網(wǎng)營銷推廣、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)