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

AKS部署多Nginx Ingress控制器的Ingress绑定配置方法

第二套Nginx Ingress控制器(Local模式源IP透传)部署&服务绑定实操

1. 第二套Ingress控制器Helm部署配置要点

你现有Ansible逻辑里缺几个避免冲突、开启源IP保留的核心参数,补全后直接部署即可:

  • 必须为第二套控制器创建独立的IngressClass,不能复用默认的nginx类名,比如给透传源IP的这套起名为nginx-local
  • 给控制器配置独立的选主ID、资源名前缀,避免和第一套控制器抢占配置资源
  • 服务设置externalTrafficPolicy: Local,这是Local模式保留源IP的核心配置,流量不会在节点间做SNAT转发
  • 确认关闭控制器对无类Ingress的默认监听,避免乱接管第一套控制器的存量资源

对应修改后的Ansible Helm部署示例如下:

- name: Create NGINX Load Balancer (Source IP Local Mode) w/ IP {{ aks_local_lb_ip }}
  command: >
    helm upgrade nginx-local ingress-nginx/ingress-nginx -n kube-system
    --set controller.ingressClassResource.name=nginx-local
    --set controller.ingressClassResource.enabled=true
    --set controller.ingressClass=nginx-local
    --set controller.electionID=nginx-local-leader
    --set controller.ingressClassByName=true
    --set controller.watchIngressWithoutClass=false
    --set controller.service.loadBalancerIP="{{ aks_local_lb_ip }}"
    --set controller.service.annotations."service\.beta\.kubernetes\.io\/azure-load-balancer-internal"="true"
    --set controller.service.externalTrafficPolicy=Local
    --set controller.replicaCount="{{ nginx_replica_count }}"
    --version {{ nginx_chart_ver }}
    --install

如果你实际用的是Bitnami维护的Nginx Ingress Chart,核心参数逻辑一致,只是参数键名稍有区别,重点保证独立IngressClass、Local流量策略两个配置即可。

2. Ingress资源绑定指定控制器的配置方法

你猜测的方向是对的,Ingress v1正式版已经废弃了旧版的kubernetes.io/ingress.class注解,直接在spec层加ingressClassName字段,值填你给第二套控制器设置的IngressClass名即可完成绑定,不需要额外加其他注解。

修改后的Ingress模板示例如下,注意删掉旧的ingress.class注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ template "service.fullname" . }}
  labels:
    app: {{ template "service.name" . }}
    chart: {{ template "service.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: {{ .Values.ingress.proxy_body_size }}
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/add-base-url: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "{{ .Values.ingress.proxy_read_timeout }}"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "{{ .Values.ingress.proxy_send_timeout }}"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "{{ .Values.ingress.proxy_connect_timeout }}"
spec:
  # 绑定第二套源IP透传用的Ingress控制器
  ingressClassName: nginx-local
  tls:
    - hosts:
        - "{{ .Values.service_url }}"
      secretName: tls-secret
  rules:
  - host: "{{ .Values.service_url }}"
    http:
      paths:
      - pathType: Prefix
        path: "/?(.*)"
        backend:
          service:
            name: {{ template "service.name" . }}
            port:
              number: {{ .Values.service.port }}

注意:不要同时使用旧版kubernetes.io/ingress.class注解和新版spec.ingressClassName字段,否则会出现绑定冲突。部署完成后可以查看Ingress资源的ADDRESS字段,如果显示为你给第二套LB配置的静态IP,就说明绑定成功,此时访问服务拿到的X-Forwarded-For头、Nginx日志里的客户端IP就是真实源地址。

内容的提问来源于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 11:09:28