Kubernetes獲取用戶請求的真實IP地址。

問題:SpringBoot 項目部署在Kubernetes 集羣中,用戶在請求Kubernetes 內的服務時,獲取客戶端IP地址時,獲取到的IP地址總是獲取的是k8s節點的IP,不是用戶的IP地址.

解決方方式:
1、如果向外暴漏服務的pod,是直接以nodePort的方式向外部暴露服務的,直接修改管理該pod的Service配置文件,添加externalTrafficPolicy: Local配置就可以正常獲取到請求的IP地址。
在這裏插入圖片描述
缺點:客戶端只能訪問pod所在的node節點,無法使用其他node節點訪問服務。
因爲設置 service.spec.externalTrafficPolicy 的值爲 Local後,請求就只會被代理到本地 endpoints 而不會被轉發到其它節點。這樣就保留了原來的IP 地址。

2、如果集羣中有使用ingress。可以修改nginx-ingress-controller的配置mandatory.yml,以DaemonSet方式安裝nginx-ingress-controller,以NodePort方式暴露ingress-nginx服務可以實現客戶端從任何node節點訪問,並可獲取到客戶端的真實IP:
在這裏插入圖片描述
修改mandatory.yml(EP:我的版本是0.26.1) 的deployment的type爲daemonset,刪除replicas: 1
在這裏插入圖片描述
修改後執行:

kubectl apply -f mandatory.yml

NodePort方式暴露ingress-nginx,添加externalTrafficPolicy: Local
在這裏插入圖片描述
執行部署service:

kubectl apply -f service-nodeport.yml

配置完成後可以通過ingress各個節點訪問並獲取正確的請求IP地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章