Azure外部负载均衡器和Kubernetes群集

时间:2018-10-16 20:50:09

标签: azure kubernetes load-balancing azure-load-balancer

我必须在MS Azure中手动创建Kubernetes群集,而不使用AKS。所以:

  1. 我已经在一个可用性集中创建了2个VM:一个用于k8s主节点,另一个用于k8s节点。
  2. 我已经创建了外部负载均衡器,并将2个VM添加到后端池。
  3. 我已经使用kubespray创建了k8s集群。
  4. 我已经创建了Deployment and LoadBalancer服务:

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: wrapper
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: wrapper
        spec:
          containers:
          - name: wrapper
            image: wrapper:latest
            ports:
            - containerPort: 8080
              name: wrapper
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: wrapper
    spec:
      loadBalancerIP: <azure_loadbalancer_public_ip>
      type: LoadBalancer
      ports:
      - port: 8080
      selector:
        app: wrapper
    

但是LoadBalancer服务External-IP始终处于挂起状态:

kubectl get services
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP
wrapper      LoadBalancer   10.233.38.7   <pending>

此外,telnet azure_loadbalancer_public_ip不起作用。我尝试使用NodePort代替LoadBalancer,但在这种情况下,我在k8s主服务器和k8s节点上有两个服务端点。

我想要的是一个入口点:azure_loadbalancer_public_ip,它可以平衡群集中所有节点之间的流量。

能否请您帮助我了解我在做什么,并且可以在Kubernetes中将Azure外部负载均衡器与LoadBalancer服务“绑定”?

2 个答案:

答案 0 :(得分:0)

您不必这样做,k8s(在正确配置时)可以为您处理。您要做的所有事情都赋予它适当的权利,以便能够在Azure中创建负载平衡器。

答案 1 :(得分:0)

基本上,它无法与Azure API进行通信来创建负载均衡器。您基本上需要:

  1. 将此选项:--cloud-provider=azure添加到kube-apiserverkube-controller-manager和节点上运行的所有kubelets
  2. 确保您的Azure VM可以访问Azure API
  3. 从1重新启动所有组件。

如果您安装的Cloud Controller Manager(在撰写本文时是K8s 1.12中的Beta)是不需要的。请注意,--cloud-provider选项将在某些时候被弃用。