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

Fra*_*ron 2 azure kubernetes azure-aks nginx-ingress

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

我一直在关注官方文档

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

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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我见过

如何修复 nginx 入口的“无法确保负载均衡器”错误

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

有谁知道它会是什么?

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

Sri*_*SFT 5

我相信您正在使用 NGINX Ingress 控制器服务的静态 IP 地址。如果云控制器管理器在 NGINX 入口控制器的服务注释中提到的包含资源组中找不到静态 Azure 公共 IP 地址资源(如果没有使用服务注释显式指定资源组,它将查找 Azure AKS 群集的节点资源组中的公共 IP 地址资源)

如果您已在节点资源组中创建静态 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>
    
    Run Code Online (Sandbox Code Playgroud)

    注意:您的集群身份可以是服务主体托管身份

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

    因此,如果您遵循本文档, helm 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
    
    Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请查看此处