配置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
相关产品推荐
相关产品推荐

