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地址方法


上一篇:阿里P8谈Java工程师怎么进大厂?你没进大厂就是这四个问题!


下一篇:一步一步学习SignalR进行实时通信_5_Hub