天天看點

k8s ingress擷取真實IP位址配置

作者:楓凡

背景

業務架構:

Client->WAF->LB->ECS->容器

問題:在容器中擷取不到真實的用戶端公網IP

抓包分析

1.在ECS上的抓包分析,看到WAF已經将 真實用戶端位址放到了 x-Forwarded-For 的字段中傳給了ECS

k8s ingress擷取真實IP位址配置

2.在容器中抓包,看到一個x-Forwarded-For的字段是錯誤的

對應的IP為WAF的回源位址

k8s ingress擷取真實IP位址配置

3.與容器同學确認 ingress的行為

将真實的用戶端IP,放到了x-Original-Forwarded-For。而将WAF的回源位址放到了 x-Forwarded-For了。           

處理方法

1.修改容器的配置檔案

配置檔案:

kube-system/nginx-configuration           

修改指令:

kubectl -n kube-system edit cm nginx-configuration           

添加内容:

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"           

儲存後立即生效。随後ingress的添加真實的IP行為會與RFC一樣都依次添加到X-Forwarded-For中了。

更多參數參考這裡。

2.業務程式需要調整擷取真實IP的字段為x-Original-Forwarded-For。

姐妹篇:

Apapche 擷取真實IP位址方法 Nginx擷取真實IP位址方法

繼續閱讀