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

Ingress Nginx私有NLB获取真实IP失败:Proxy协议头部错误及注解不生效

问题排查:AWS私有NLB Proxy协议注解不生效,手动配置正常

核心现象

通过Ingress Nginx控制器暴露VPC2内的私有Nginx到VPC1,配置源IP白名单nginx.ingress.kubernetes.io/whitelist-source-range后,发现Ingress无法获取客户端真实IP。尝试通过以下注解和ConfigMap配置启用NLB的Proxy协议:

# Ingress Nginx ConfigMap配置
config:
    use-proxy-protocol: "true"
    real-ip-header: "proxy_protocol"

# Service注解
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: proxy_protocol_v2.enabled=true

同时试过搭配service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*",但均触发错误:

broken header: "" while reading PROXY protocol, client: xx.xx.xx.xx

手动在AWS控制台给NLB目标组启用Proxy协议v2后功能完全正常,但注解无法自动完成配置,怀疑与Ingress Nginx版本有关。

排查方向与解决方案

1. 注解兼容性与版本匹配

不同Ingress Nginx版本对AWS NLB注解的支持存在差异:

  • Ingress Nginx <= 0.48.x:推荐使用旧版注解service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*",但该注解仅支持Proxy协议v1,且需确保目标组协议为TCP(NLB默认)。
  • Ingress Nginx >= 1.0.0:官方推荐使用service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: proxy_protocol_v2.enabled=true,同时需保证:
    • ConfigMap中use-proxy-protocol设为"true"
    • Service的externalTrafficPolicy设为Local(避免节点SNAT导致源IP丢失)

2. 验证注解生效条件

  • 确认Service类型为LoadBalancer,且annotations字段无缩进错误,配置正确挂载。
  • 避免冲突注解:同时配置aws-load-balancer-proxy-protocol和aws-load-balancer-target-group-attributes会导致目标组配置混乱,需保留对应版本的正确注解。
  • 重新部署Ingress Nginx控制器:修改注解后,重启控制器Pod或重新apply Service/ConfigMap,确保配置被加载。

3. broken header错误原因

当NLB未正确启用Proxy协议,但Ingress Nginx已开启use-proxy-protocol时,会因收到普通HTTP请求而非Proxy协议报文触发该错误。这说明注解未成功将Proxy协议配置到NLB目标组,需重点检查:

  • 目标组协议是否为TCP(NLB的Proxy协议仅支持TCP目标组)
  • AWS账号是否有足够权限让Ingress控制器修改NLB目标组属性
  • 查看控制器日志,是否存在AWS API调用失败的报错(如权限不足)

4. 版本适配验证

若使用Ingress Nginx 1.0+版本,建议完全移除旧版aws-load-balancer-proxy-protocol注解,仅保留:

# Service注解
service.beta.kubernetes.io/aws-load-balancer-scheme: internal
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: proxy_protocol_v2.enabled=true

# ConfigMap配置
config:
  use-proxy-protocol: "true"
  real-ip-header: "proxy_protocol"

同时确保Service设置externalTrafficPolicy: Local,重新部署控制器后等待NLB目标组配置更新。

内容的提问来源于stack exchange,提问作者Devendra Singh khurana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:48:16