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

AKS部署Ingress Nginx配置Azure静态外部IP不生效如何解决

问题:Azure AKS 中 Ingress Nginx 无法绑定预创建的静态公网IP

我尝试配置Ingress使用我在Azure平台预先创建的外部静态IP,操作流程如下:

  • 在Azure门户创建公网静态IP,为AKS服务主体授予网络参与者权限
  • 在Helm部署Ingress Nginx所用的values配置文件中添加如下配置:
# -- List of IP addresses at which the controller services are available
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
externalIPs: ["20.124.63.xxx"]

# -- Used by cloud providers to connect the resulting `LoadBalancer` to a pre-existing static IP according to https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer
loadBalancerIP: ""
loadBalancerSourceRanges: []

enableHttp: true
enableHttps: true

部署完成后,Ingress控制器服务被分配了两个外部IP,手动配置的IP完全无法访问,仅Azure自动生成的公网IP可正常连通,现象截图如下:
双IP现象

当前使用的Ingress资源配置如下,判断直接通过当前LoadBalancer配置无法实现静态IP绑定需求:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
  - host: xxx.com
    http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: aks-one
            port:
              number: 80

  - host: xxx.com
    http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: aks-two
            port:
              number: 80

需要调整配置,实现用预先创建的Azure静态IP访问Ingress暴露的服务。


解决方案

配置不生效的核心原因有两个:一是填错了静态IP的配置字段,二是新版Ingress Nginx Helm Chart的服务配置层级错误,缺少Azure必要的服务注解。按以下步骤调整即可:

  • 修正Helm Values配置
    不要把静态IP填到externalIPs字段,该字段仅用于集群节点本地路由配置,不会触发Azure LoadBalancer绑定前端IP,公网流量无法通过该IP进入集群。正确配置如下,注意服务相关配置需要放在controller.service层级下才能生效:
# 清空externalIPs配置,避免出现双IP问题
externalIPs: []

loadBalancerSourceRanges: []

controller:
  service:
    # 开启HTTP/HTTPS监听
    enableHttp: true
    enableHttps: true
    # 将预创建的静态公网IP填入loadBalancerIP字段
    loadBalancerIP: "20.124.63.xxx"
    # 添加Azure专属注解,关联预创建的公网IP资源
    annotations:
      service.beta.kubernetes.io/azure-pip-name: "你在Azure上创建的公网IP资源名称"
  • 前置条件校验
    • 预创建的公网静态IP必须和AKS节点资源组位于同一Azure区域
    • 公网IP的SKU必须和AKS集群负载均衡SKU一致(当前默认均为Standard SKU,禁止混用Basic SKU)
    • AKS集群使用的服务主体/托管身份,必须被授予公网IP所在资源组的网络参与者权限
  • 重新部署生效
    使用修正后的values执行helm upgrade命令更新Ingress Nginx部署,等待控制器服务就绪后,查看服务的EXTERNAL-IP字段将仅显示你配置的静态IP,该IP可正常公网访问,不会再出现自动生成的临时公网IP。

你当前使用的Ingress资源规则配置没有问题,不需要做任何修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:48:54