【问题标题】:How-to use existing LoadBalancer in Azure AKS Service?如何在 Azure AKS 服务中使用现有的 LoadBalancer?
【发布时间】:2019-11-07 01:14:00
【问题描述】:

我使用 Terraform 创建了一个 AKS 集群。我希望集群有一个 LoadBalancer 和一个静态公共 IP,并且我希望它们预先存在于我的 Ingress Controller/LoadBalancer 服务定义中,因为我不希望它们由 Kubernetes 清单动态创建/删除。

因此,我还根据documentation recommendations,在节点资源组和 SKU basic 中使用 Terraform 创建了一个 LoadBalancer 和一个静态公共 IP,并将公共 IP 附加到 LB。

然后我创建了一个 LoadBalancer 类型的服务:

---                                                                                                                                                                                                                                            
kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: LoadBalancer
  loadBalancerIP: 8.8.8.8 (the public static IP allocated by Terraform)
  selector:
    name: my-pods-selector
  ports:
    - name: my-port
      protocol: TCP 
      port: 1234
      targetPort: 1234

然后服务卡在 PENDING 状态,describe 给我这个:

$ kubectl describe svc my-service
[...]
Events:
  Type     Reason                      Age               From                Message
  ----     ------                      ----              ----                -------
  Normal   EnsuringLoadBalancer        5s (x9 over 15m)  service-controller  Ensuring load balancer
  Warning  CreatingLoadBalancerFailed  4s (x9 over 15m)  service-controller  Error creating load balancer (will retry): failed to ensure load balancer for service my-service: timed out waiting for the condition

我无法在describe 命令输出中找到有关该错误的更多信息:

Error creating load balancer (will retry): failed to ensure load balancer for service my-service: timed out waiting for the condition

另外,如果不预先创建 LoadBalancer,而只创建公共 IP,LoadBalancer 是动态创建的,一切顺利。

问题是:如何使 Azure 成功(我缺少哪个配置参数?)使用预先存在的 LB?

  • Kubernetes 版本:1.13.5

【问题讨论】:

    标签: azure-aks


    【解决方案1】:

    我希望集群有一个 LoadBalancer 和一个静态公共 IP,并且 我希望那些预先存在于我的入口控制器/ LoadBalancer 服务定义,因为我不希望它们成为 由 Kubernetes 清单动态创建/删除。

    很遗憾,您不能将预先存在的负载均衡器与静态公共 IP 用于 AKS 群集中的服务。您可以在 Github 中查看相同的 issue。正如建议所示:

    您需要让 AKS 在 Azure 中创建负载均衡器资源 您的服务,而不是尝试在它们之前手动创建它们 然后在 AKS 中使用它们。只需通过 Kubernetes API,并让网络插件创建和配置 适当的 Azure 资源。

    我建议您可以自己使用静态分配方法创建公共 IP。然后使用负载均衡器类型和静态公共 IP 创建服务。

    【讨论】:

    • 谢谢,这回答了我的问题,即使这不是我所期望的答案。
    【解决方案2】:

    使用 --sku 标准创建静态 IP。没有 --sku 标准 IP 是用 SKU Basic 创建的。

    基本静态 IP 不能用于负载均衡器。 查看活动日志,您会看到如下警告:

    标准 sku 负载平衡器 /subscriptions/55aa..../resourceGroups/MC_kubernetes-dev-kubernetes-dev-cluster_northeurope/providers/Microsoft.Network/loadBalancers/kubernetes 无法引用基本 sku publicIP /subscriptions/55aa..../resourceGroups/MC_kubernetes-dev_kubernetes-dev-cluster_northeurope/providers/Microsoft.Network/publicIPAddresses/kubernetes-dev-public-ip。

    STATICIP=$(az network public-ip create --resource-group <MC_your-RG> --name Your-public-ip-name --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv)
    

    现在将此 ip 分配给您的负载均衡器服务

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2018-07-03
      • 2022-01-13
      • 2019-06-19
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多