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

Azure Kubernetes下用ConfigMap给NGINX Ingress加请求头不生效如何解决

配置错误点
  • 全局配置和自定义请求头配置错位:use-forwarded-headers、use-proxy-protocol、real-ip-header属于NGINX Ingress控制器的全局配置参数,需要放在ingress-nginx-controller ConfigMap中,不能放在自定义请求头的custom-headers ConfigMap里,自定义请求头ConfigMap仅支持定义proxy_set_header对应的请求头键值。
  • externalTrafficPolicy配置位置错误:该参数是LoadBalancer类型Service的spec字段属性,用于控制节点流量转发策略,放在ConfigMap的data段完全不生效。
  • proxy-set-headers取值不完整:该参数需要指定为[命名空间]/[ConfigMap名称]的完整格式,仅写ConfigMap名称可能导致控制器找不到对应配置。
修正方案

1. 拆分正确的ConfigMap配置

先修正自定义请求头ConfigMapcustom-headers,仅保留请求头相关配置:

apiVersion: v1
data:
  X-Real-IP: $remote_addr
  X-Forwarded-For: $proxy_add_x_forwarded_for
  X-Forwarded-Proto: $proxy_x_forwarded_proto
kind: ConfigMap
metadata:
  name: custom-headers
  namespace: default

再修正控制器全局ConfigMapingress-nginx-controller,移入全局配置、补全自定义头引用路径、删除无效的externalTrafficPolicy配置:

apiVersion: v1
data:
  proxy-set-headers: "default/custom-headers"
  use-forwarded-headers: "true"
  use-proxy-protocol: "true"
  real-ip-header: "proxy_protocol"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  namespace: default
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

2. 修正Service配置

修改ingress-nginx-controller Service,添加externalTrafficPolicy配置,同时如果开启了代理协议,需要给Azure负载均衡添加开启代理协议的注解:
执行kubectl edit svc ingress-nginx-controller -n default,修改对应字段:

apiVersion: v1
kind: Service
metadata:
  annotations:
    # 开启Azure LB代理协议,和控制器use-proxy-protocol配置匹配
    service.beta.kubernetes.io/azure-load-balancer-enable-proxy-protocol: "true"
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local # 保留源客户端IP
  # 其余原有配置保持不变

提示:如果不需要使用代理协议,可将控制器ConfigMap中的use-proxy-protocol设为"false",real-ip-header设为"X-Forwarded-For",同时删除Service上的Azure代理协议注解,同样可以实现客户端IP透传。

3. 重载控制器配置

执行以下命令重启控制器Pod,强制加载更新后的配置:
kubectl rollout restart deployment ingress-nginx-controller -n default

排查步骤
  • 检查控制器运行日志:执行kubectl logs -n default -l app.kubernetes.io/name=ingress-nginx,确认没有配置加载错误、存在Configuration reloaded的成功日志。
  • 验证nginx.conf配置:执行kubectl exec -n default <替换为控制器Pod名称> -- cat /etc/nginx/nginx.conf | grep X-Forwarded-For,确认输出为proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;即为配置生效。
  • 功能验证:在后端服务中打印X-Real-IP、X-Forwarded-For请求头,直接访问服务确认返回的是真实客户端IP,而非Azure负载均衡的内网IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:04