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

配置Kubernetes Ingress Nginx保留Cloudflare Worker传来的客户端IP

问题解决:让Kubernetes Pod通过X-Forwarded-For获取真实客户端IP(Cloudflare Worker场景)

你的核心问题是Nginx Ingress未信任Cloudflare Worker的IP,导致它将Worker IP判定为原始客户端IP,覆盖了原本包含真实用户IP的X-Forwarded-For头。结合你的现有配置,需要做以下针对性调整:

1. 修正Nginx Ingress ConfigMap配置

当前ConfigMap中use-proxy-protocol: "true"属于冗余配置(Cloudflare Worker默认不发送Proxy Protocol,除非你专门为Worker开启了该协议),反而会干扰转发头的解析逻辑。调整后的ConfigMap如下:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  name: nginx-configuration
  namespace: default
data:
  use-forwarded-headers: "true"
  compute-full-forwarded-for: "true"
  # 关闭Proxy Protocol,匹配Worker默认行为
  use-proxy-protocol: "false"
  # 添加Cloudflare Worker的实际IP段,让Nginx信任这些代理来源
  # 可从Cloudflare官方文档获取最新Worker IP段,此处为示例占位符
  proxy-real-ip-cidr: "xxx2.xxx2.xxx2.0/24, 其他WorkerIP段"

2. 补充Ingress资源的注解

在Ingress的元数据注解中添加真实IP处理规则,确保Nginx正确提取转发头中的真实客户端IP:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress2
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/client-max-body-size: "100m"
    nginx.org/proxy-connect-timeout: 300s
    nginx.org/proxy-read-timeout: 300s
    nginx.org/proxy-send-timeout: 300s
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    # 指定从X-Forwarded-For头中提取真实IP
    nginx.ingress.kubernetes.io/real-ip-header: "X-Forwarded-For"
    # 同步指定信任的Worker IP段,与ConfigMap配置保持一致
    nginx.ingress.kubernetes.io/proxy-real-ip-cidr: "xxx2.xxx2.xxx2.0/24, 其他WorkerIP段"
spec:
  rules:
    - host: test.com
      http:
        paths:
          - pathType: Prefix
            path: /
            backend:
              service:
                name: myservice
                port:
                  number: xxxx

关键配置说明

  • proxy-real-ip-cidr:必须填写Cloudflare Worker的实际IP段,Nginx会将这些IP来源的请求标记为可信代理,不会将其识别为真实客户端IP。
  • real-ip-header: "X-Forwarded-For":告知Nginx从X-Forwarded-For头中提取真实客户端IP,而非直接取请求连接的源IP(Worker IP)。
  • 关闭use-proxy-protocol:若Worker未配置发送Proxy Protocol,开启该选项会导致Nginx无法正确解析请求头,进而错误覆盖X-Forwarded-For。

调整完成后,Pod收到的X-Forwarded-For头会保留真实客户端IP在链首,或者根据compute-full-forwarded-for的配置正确拼接完整转发链,确保你能获取到真实用户IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:46:17