- 文档首页
容器服务
容器服务 VKE
最佳实践
网络
通过 Ingress 获取真实客户端 IP 地址
网络
通过 Ingress 获取真实客户端 IP 地址
通过 Ingress 获取真实客户端 IP 地址
本文主要介绍外部请求通过 Ingress 访问工作负载时,工作负载后端 Pod 获取外部请求的真实 IP 地址的方法。
Flannel 网络集群
- 在左侧导航栏中选择 集群,单击目标集群名称,进入集群管理页面。
- 配置 ingress-nginx-controller 对应服务(Service)的转发外部流量策略Spec.externalTrafficPolicy为Local。
说明
- ingress-nginx-controller 是安装 ingress-nginx 组件后,生成的 Ingress 控制器对应的 Service。
- Flannel 容器网络模型的集群,其后端业务 Pod 获取客户端真实 IP 时,需要将 LoadBalancer Service 的externalTrafficPolicy设置为Local,用于将节点的 IPVS 只转发给本节点的 Nginx Ingress Pod。
- 在集群管理页面的左侧导航栏中,选择 服务与路由 > 服务。
- 在 kube-system 命名空间下,找到 ingress-nginx-controller,并在对应 操作 列中选择... > 编辑 Yaml。
-
- 修改Spec.externalTrafficPolicy的值为Local。
-
- 配置 ingress-nginx-controller 对应配置项(ConfigMap),增加获取真实客户端 IP 时必要的字段。
- 在集群管理页面的左侧导航栏中,选择 配置管理 > 配置项。
- 在 kube-system 命名空间下,找到 ingress-nginx-controller,并在对应 操作 列中选择... > 编辑 Yaml。
-
use-forwarded-headers: "true"
compute-full-forwarded-for: "true"
forwarded-for-header: X-Forwarded-For
-
- 配置完成后,在 无状态负载 列表中,找到重新部署 ingress-nginx-controller,使配置生效。
-
VPC-CNI 网络集群
- 在左侧导航栏中选择 集群,单击目标集群名称,进入集群管理页面。
- 配置 ingress-nginx-controller 对应配置项(ConfigMap),增加获取真实客户端 IP 时必要的字段。
- 在集群管理页面的左侧导航栏中,选择 配置管理 > 配置项。
- 在 kube-system 命名空间下,找到 ingress-nginx-controller,并在对应 操作 列中选择... > 编辑 Yaml。
-
use-forwarded-headers: "true"
compute-full-forwarded-for: "true"
forwarded-for-header: X-Forwarded-For
-
- 配置完成后,在 无状态负载 列表中,找到并重新部署 ingress-nginx-controller,使配置生效。
-
结果验证
前提条件
本文通过 Nginx 镜像模拟真实客户端,因此验证操作前,您还需要准备如下工作:
- 在集群中安装 ingress-nginx 组件。详情请参见 安装组件。
- 在镜像仓库中上传开源 nginx 镜像,用于验证操作结果时模拟后端服务。详情请参见 推送和拉取镜像。
- 准备一台可以访问公网的主机,模拟外部真实客户端。该客户端必须在 Ingress 所在集群外。
说明
您可以创建一个可以访问公网的云服务器(ECS)实例,作为执行机器。详细操作,请参见 通过向导购买实例。 步骤一:部署应用和服务
说明
Flannel 容器网络模型的集群,将 LoadBalancer Service 的externalTrafficPolicy设置为Local后,若节点上没有 Nginx Ingress Pod,则该 LoadBalancer 地址无法被访问且会被会被当作 Service 的扩展 IP 地址,被 IPVS 拦截并转发,发生网络不通的问题。相关问题的更多信息,请参见 社区文档。 因此下文使用无状态负载模拟后端服务的 Nginx Ingress Pod。
- 使用 Nginx 镜像,创建用于模拟后端服务的无状态负载。详情请参见 创建无状态负载。
- 创建 LoadBalancer 类型的服务(Service),绑定步骤 1 中创建的无状态负载。
-
步骤二:创建 Ingress
注意
路由规则的所属命名空间,需要与无状态负载所在的命名空间保持一致。
步骤三:访问验证
- 执行如下命令,访问 Ingress 上配置的域名。其中,14.**.**.**为 ingress 的公网 IP 地址。
curl -H "Host: example.com" http://14.**.**.**
-
- 返回到步骤一中创建的后端无状态负载(本例中为 nginx),进入工作负载的详情页面,选择 日志 页签,查看后端服务的 Pod 日志,可以看到日志的 X-Forwarded-For IP 即为真实客户端 IP。
-
最近更新时间:2026.03.10 11:16:46