背景
業務架構:
Client->WAF->LB->ECS->容器
問題:在容器中獲取不到真實的客戶端公網IP
抓包分析
1.在ECS上的抓包分析,看到WAF已經將 真實客戶端地址放到了 x-Forwarded-For 的字段中傳給了ECS
image
2.在容器中抓包,看到一個x-Forwarded-For的字段是錯誤的
對應的IP為WAF的回源地址
image
3.與容器同學確認 ingress的行為
將真實的客戶端IP,放到了x-Original-Forwarded-For。而將WAF的回源地址放到了 x-Forwarded-For了。
處理方法
修改容器的配置文件
配置文件:
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中了。
更多參數參考這里。
業務程序需要調整獲取真實IP的字段為x-Original-Forwarded-For。