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可正常连通,现象截图如下:
当前使用的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
相关产品推荐
相关产品推荐

