Azure Внешний балансировщик нагрузки и кластер Kubernetes

Я должен создать кластер Kubernetes в MS Azure вручную, не используя AKS. Так:

  1. Я создал 2 ВМ в одном наборе доступности: одну для мастера k8s и вторую для узла k8s.
  2. Я создал External Load Balancer и добавил 2 виртуальных машины в бэкэнд-пул.
  3. Я создал кластер k8s, используя kubespray.
  4. Я создал Deployment and LoadBalancer Service:

    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то есть балансирует трафик между всеми узлами в кластере.

Не могли бы вы помочь мне понять, что я делаю неправильно, и можно ли "привязать" внешний балансировщик нагрузки Azure к службе LoadBalancer в Кубернетесе?

2 ответа

По сути, он не может общаться с API Azure для создания балансировщика нагрузки. Вам в основном нужно:

  1. Добавьте эту опцию: --cloud-provider=azure на ваш kube-apiserver, kube-controller-manager и все kubelets работает на ваших узлах.
  2. Убедитесь, что ваша виртуальная машина Azure имеет доступ к API Azure.
  3. Перезапустите все компоненты с 1.

Это не требуется, если у вас установлен Cloud Controller Manager, который на момент написания этой статьи является бета-версией K8s 1.12. Обратите внимание, что --cloud-provider вариант будет устаревшим в какой-то момент в пользу этого.

Вам не нужно этого делать, k8s (если он настроен правильно) справится с этим за вас. Все, что вам нужно сделать, это дать ему соответствующие права, чтобы иметь возможность создавать балансировщик нагрузки в Azure.

Другие вопросы по тегам