k8s nginx ingress 透传用户真实ip

背景

业务应用经常有需要用到用户真实ip的场景,比如,用户ip记录与审计,ip限制等功能,通常,用户ip的传递依靠的是X-Forwarded-*参数。Ingress-Nginx默认会通过X-Forward-For和X-Real-IP来透传客户端IP,但是当客户端主动在请求头里指定了X-Forward-For和X-Real-IP,会导致服务端获取不到真实的客户端IP。

修改配置

修改命令空间:
 namespace: nginx-ingress :   
 configmap:ingress-nginx-controller

具体配置

compute-full-forwarded-for = true
forwarded-for-header = X-Forwarded-For
use-forwarded-headers =true
查看配置:
kubectl get cm ingress-nginx-controller  -n ingress-nginx  -o yaml

提示

修改即会生效,属于热更新

后端java代码 就可以通过  X-Forwarded-For,取用户真实ip了。

方案参数如下:

use-forwarded-headers

如果Nginx在其他7层代理或负载均衡后面,当期望Nginx将X-Forwarded-*的头信息传递给后端服务时,则需要将此参数设为true
如果设为false(默认为false),Nginx会忽略掉X-Forwarded-*的头信息。false设置适用于Nginx直接对外或前面只有3层负载均衡的场景
由于ingress的主配置是从configmap中获取的,更新参数则需要修改名为nginx-configuration的configmap的配置:在data配置块下添加use-forwarded-headers: “true”
修改后,ingress nginx会自动加载更新nginx.conf主配置文件。下图为更新前后配置文件变化对比:

forwarded-for-header

用来设置识别客户端来源真实ip的字段,默认是X-Forwarded-For。如果想修改为自定义的字段名,则可以在configmap的data配置块下添加:forwarded-for-header: “THE_NAME_YOU_WANT”。通常情况下,我们使用默认的字段名就满足需求,所以不用对这个字段进行额外配置。

compute-full-forwarded-for

如果只是开启了use-forwarded-headers: "true"的话,会发现还是没能获取到客户端来源的真实ip,原因是当前X-Forwarded-For变量是从remote_addr获取的值,每次取到的都是最近一层代理的ip。为了解决这个问题,就要配置compute-full-forwarded-for字段了,即在configmap的data配置块添加:compute-full-forwarded-for: “true”。其作用就是,将客户端用户访问所经过的代理ip按逗号连接的列表形式记录下来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值