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

2024-03-25

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

我一直在关注官方文档

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

and

https://learn.microsoft.com/en-us/azure/aks/ingress-static-ip https://learn.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 入口的“无法确保负载均衡器”错误 https://stackoverflow.com/questions/55625051/how-to-fix-failed-to-ensure-load-balancer-error-for-nginx-ingress

并用谷歌搜索了错误,但到目前为止还没有运气

有谁知道它会是什么?

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


我相信您正在使用 NGINX Ingress 控制器服务的静态 IP 地址。如果云控制器管理器在 NGINX 入口控制器的服务注释中提到的包含资源组中找不到静态 Azure 公共 IP 地址资源(如果没有使用服务注释显式指定资源组,它将查找 Azure公共 IP 地址资源位于AKS 群集的节点资源组 https://learn.microsoft.com/en-us/azure/aks/faq#why-are-two-resource-groups-created-with-aks)

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

如果您已在不同的资源组中创建静态 Azure 公共 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>
    

    Note:您的集群身份可以是服务主体 https://learn.microsoft.com/en-us/azure/aks/kubernetes-service-principal?tabs=azure-cli or a 管理身份 https://learn.microsoft.com/en-us/azure/aks/use-managed-identity.

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

    因此,如果您正在关注这个文件 https://learn.microsoft.com/en-us/azure/aks/ingress-static-ip#ip-and-dns-labelhelm install 命令应该类似于:

    # 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 https://learn.microsoft.com/en-us/azure/aks/static-ip#create-a-service-using-the-static-ip-address.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AKS 集群中安装 nginx ingress 失败并出现 SyncLoadBalancerFailed 错误 的相关文章

随机推荐