在 AKS 集群中安装 nginx ingress 失败并出现 SyncLoadBalancerFailed 错误

Installing nginx ingress in AKS cluster fails with SyncLoadBalancerFailed error

我有一个带有 Web 应用程序的 AKS 集群。我想提供一个 nginx Ingress 控制器来将应用程序公开到互联网,然后启用 TLS。

我一直在关注官方文档

https://docs.microsoft.com/en-us/azure/aks/ingress-basic

https://docs.microsoft.com/en-us/azure/aks/ingress-static-ip

但我总是以挂起的 nginx-ingress 服务结束并出现此错误

reason: SyncLoadBalancerFailed
message: >-
  Error syncing load balancer: failed to ensure load balancer: instance not
  found

我看过

并用谷歌搜索错误,但到目前为止还没有成功

有谁知道它会是什么吗?

或者,我可以从一些工作示例开始吗?

我相信您在 NGINX Ingress 控制器服务中使用静态 IP 地址。如果云控制器管理器在 NGINX Ingress Controller 的服务注释中提到的包含资源组中找不到静态 Azure Public IP 地址资源,则会弹出此问题(如果没有使用服务注释明确指定资源组,它将在 AKS cluster's node resource group)

中查找 Azure Public IP 地址资源

如果您在节点资源组中创建了静态 Azure Public IP 地址资源,请确保 Azure Public IP 地址资源存在。

如果您在不同的资源组中创建了静态 Azure Public IP 地址资源,则:

  • 请确保 AKS 群集使用的群集身份已将权限委派给其他资源组,例如 Network Contributor。

    az role assignment create \
      --assignee <Client ID of cluster identity> \
      --role "Network Contributor" \
      --scope /subscriptions/<subscription id>/resourceGroups/<Public IP address resource group name>
    

    注意:您的集群身份可以是service principal or a managed identity.

  • 在部署 NGINX Ingress Controller 的 helm install 命令中,请添加以下参数:
    --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-resource-group"=$PublicIpAddressResourceGroupName

    因此,如果您遵循 this document,helm 安装命令应该类似于:

    # Use Helm to deploy an NGINX ingress controller
    helm install nginx-ingress ingress-nginx/ingress-nginx \
      --namespace ingress-basic \
      --set controller.replicaCount=2 \
      --set controller.nodeSelector."kubernetes\.io/os"=linux \
      --set controller.image.registry=$ACR_URL \
      --set controller.image.image=$CONTROLLER_IMAGE \
      --set controller.image.tag=$CONTROLLER_TAG \
      --set controller.image.digest="" \
      --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
      --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
      --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
      --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
      --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
      --set defaultBackend.image.registry=$ACR_URL \
      --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
      --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
      --set controller.service.loadBalancerIP=$STATIC_IP \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL
      --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-resource-group"=$PublicIpAddressResourceGroupName
    

更多信息请查看here

我在 AKS 中使用非 nginx-ingress 负载均衡器时遇到了同样的错误,并通过 Azure 门户 停止和 re-starting 集群 解决了这个问题.

花了很多时间在网上寻找解决方案,但没有找到任何有效的方法。