AKS集群安装nginx ingress出现SyncLoadBalancerFailed错误如何解决
- 静态公网IP归属不匹配:使用的静态公网IP不在AKS自动生成的MC_开头节点资源组内,或IP所属订阅、区域与AKS集群不一致,Azure负载均衡器调度时无法找到对应IP实例
- 身份权限不足:AKS集群使用的服务主体或托管身份,没有静态IP所在资源组的
Network Contributor权限,无法读取绑定IP资源 - 安装参数配置错误:nginx Ingress安装时填写的静态IP地址有误、注解参数配置错误,或误用了内网IP、基础SKU IP用于公网暴露场景
注意:AKS默认使用标准SKU的负载均衡器,仅支持绑定相同SKU的公网IP
步骤1:核对基础资源信息
首先查询AKS集群对应的节点资源组名称:az aks show --resource-group <AKS集群所在资源组名> --name <AKS集群名> --query nodeResourceGroup -o tsv
输出结果为MC_开头的资源组名,优先将公网静态IP创建在该资源组下,区域与AKS集群保持一致,SKU选择「标准」、分配方式选择「静态」。
步骤2:配置权限(仅IP不在MC_开头资源组时需要执行)
首先查询AKS集群托管身份的principal ID:az aks show --resource-group <AKS集群所在资源组名> --name <AKS集群名> --query identity.principalId -o tsv
为该身份分配IP所在资源组的网络 contributor 权限:az role assignment create --assignee <上一步输出的principal ID> --role "Network Contributor" --scope <静态IP所在资源组的资源ID>
步骤3:安装配置nginx Ingress控制器
通过Helm安装时指定对应参数即可:
# 添加入口仓库 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update # 安装控制器 helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-basic \ --create-namespace \ --set controller.service.loadBalancerIP=<你的静态公网IP地址> \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-resource-group"=<静态IP所在资源组名>
如果静态IP部署在MC_开头的节点资源组内,可省略最后一行注解配置参数。
步骤4:验证部署状态
等待1-2分钟后执行命令查看服务状态:kubectl get service -n ingress-basic
当EXTERNAL-IP列显示你配置的静态公网IP时,说明部署成功。
如果不需要固定公网IP,可直接省略loadBalancerIP和对应注解参数,Azure会自动分配动态公网IP,不会触发本次报错
内容的提问来源于stack exchange,提问作者Franco Tiveron

