You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Cloud K8s集群容器内获取请求客户端真实IP?

问题解决方案

核心原因

你的外部LB未将客户端IP正确传递给Ingress Controller,而是以LB自身或集群节点IP作为请求源,导致Ingress接收到的X-Forwarded-For头部为LB/节点IP,最终传递到后端容器的也是这个值。

具体修复步骤

  1. 配置外部LB透传客户端IP

    • 根据你的LB类型(云厂商LB或自建LB),开启客户端IP透传功能:
      • 云厂商LB:AWS ALB需启用ProxyProtocol或确保X-Forwarded-For包含客户端IP;GCP LB需开启preserveClientIP;阿里云SLB需开启“获取真实客户端IP”选项。
      • 自建LB:配置转发规则时,保留原始客户端IP,并将其添加到X-Forwarded-For头部,避免覆盖该头部。
  2. 完善Ingress注解配置
    仅启用nginx.ingress.kubernetes.io/use-forwarded-headers: "true"不足以解决问题,需补充以下注解:

    • 指定可信代理IP段,让Ingress从X-Forwarded-For中提取真实客户端IP:
      nginx.ingress.kubernetes.io/proxy-real-ip-cidr: "你的LB/节点IP段"
      
      例如LB所在段为10.10.0.0/16,则填写该值。
    • 指定从X-Forwarded-For头部获取真实IP:
      nginx.ingress.kubernetes.io/real-ip-header: "X-Forwarded-For"
      
    • 确保Ingress将正确的头部传递给后端:
      nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-For $http_x_forwarded_for"
      
  3. 后端Nginx配置检查
    确保后端Nginx不会重置X-Forwarded-For头部,可在配置中添加:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

    该配置会保留Ingress传递的客户端IP信息,避免被Nginx自身获取的Ingress IP覆盖。

  4. 验证配置有效性

    • 进入Ingress Controller的Pod,查看/etc/nginx/nginx.conf,确认是否包含real_ip_header X-Forwarded-For和set_real_ip_from(对应你配置的IP段)。
    • 在后端容器中打印请求头部,检查X-Forwarded-For是否包含客户端真实IP。

内容的提问来源于stack exchange,提问作者Jason M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:52:11