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

AKS中Nginx Ingress如何仅为特定服务配置保留源IP

核心配置逻辑澄清

先把几个容易搞混的配置边界说清楚,避免无效配置:

  • externalTrafficPolicy: Local 仅对 type: LoadBalancer 类型的Service生效。你业务侧用的是ClusterIP类型Service,改这个字段完全没用,这类Service只处理集群内部转发流量,根本不涉及外部入口的SNAT问题。
  • 给Nginx Ingress自身的LoadBalancer Service开externalTrafficPolicy: Local不是全局强制配置,这个动作只是让Ingress Pod能拿到真实客户端源IP,避免流量在云负载均衡、节点转发阶段被SNAT替换源IP,不会强制要求所有后端业务必须适配源IP校验逻辑。
按需开启源IP保留的实操方案

不需要做全局全量生效的配置,完全可以按业务粒度控制能力开关,推荐用下面的方案,对现有业务侵入最小:

  1. 先给Nginx Ingress对应的LoadBalancer Service加上externalTrafficPolicy: Local配置。这一步是入口层的基础能力配置,相当于把真实客户端IP传到Ingress转发层,要不要把这个IP传给后端、后端要不要用来做校验,全靠后续Ingress规则单独控制。
    AKS上用Helm部署的Nginx Ingress会自动适配该模式下的云LB健康检查规则,不用手动额外调整探测配置,不会出现流量不通的问题。
  2. 针对有真实源IP获取需求的业务,在业务对应的Ingress资源上添加以下注解,开启真实IP透传:
    annotations:
      nginx.ingress.kubernetes.io/use-real-ip: "true"
      nginx.ingress.kubernetes.io/realtime-ip-recursive: "true"
      nginx.ingress.kubernetes.io/forwarded-for-header: "X-Forwarded-For"
    
    配置完成后,业务服务可以直接从请求的X-Forwarded-For、X-Real-IP头里拿到真实客户端IP,正常做身份校验即可。
  3. 针对不需要源IP保留的业务,不需要加任何注解,保持原有Ingress配置就行。Ingress默认不会把真实客户端IP透传给这类后端,和你之前的转发逻辑完全一致,不会受入口层配置的影响。
备选方案(适合少量特殊业务)

如果完全不想修改Nginx Ingress自身的Service配置,可以单独给需要源IP校验的业务创建独立的LoadBalancer类型Service,只给这个独立Service配置externalTrafficPolicy: Local,直接通过云负载均衡暴露服务,不走Nginx Ingress转发。
这个方案的缺点是这类业务没法复用Ingress提供的七层路由、证书自动签发、流量管控等能力,仅适合业务量少、不需要七层能力的场景。

对你现有业务清单的调整说明

你贴的Helm模板里的业务Service是ClusterIP类型,不需要做任何字段修改,只要调整对应业务的Ingress资源注解即可,不用改动业务Service的spec配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:21:47