背景
在Kubernetes中,获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中,原始请求的源IP地址会被替换成负载均衡器的IP地址。
获取客户端真实IP的需求背景包括以下几点:
- 安全性:基于客户端IP进行访问控制和认证授权可以提高系统安全性。
- 日志记录与审计:记录真实IP有助于监测、故障排除和合规性审计。
- 统计与分析:了解用户来源地区和行为可以提供有价值的数据支持,用于业务决策和优化资源分配。
- 反欺诈与风险评估:根据真实IP进行欺诈检测、风险评估或地理位置相关功能能够提高准确性和可靠性。
通过适当配置Kubernetes Ingress和相关组件,可以确保将原始请求中的真实IP正确传递给后端服务,满足上述需求并提供更精确、安全和可靠的服务。
配置方法
以阿里云ack集群中安装的ingress-nginx为例
方法1 命令行添加方法
1.获取ingress-nginx-controller的configmap配置文件名称
[root@K8SMASTER01 ~]# kubectl get -n kube-system deployment ack-ingress-nginx-controller -oyaml|grep configmap- --configmap=$(POD_NAMESPACE)/ack-ingress-nginx-controller
2.编辑ingress-nginx-controller的configmap配置文件
添加一下参数到配置文件中添加层级如下图
compute-full-forwarded-for = true
forwarded-for-header = X-Forwarded-For
use-forwarded-headers =true
kubectl edit -n kube-system cm ack-ingress-nginx-controller
保存退出即可,立即生效无需重启pod
方法2 控制台添加
1.查看ingress-nginx-controller的yaml文件
2.去到k8s集群控制台配置项选项
3.添加以下配置点击保存即可