Azure Внешний балансировщик нагрузки и кластер Kubernetes
Я должен создать кластер Kubernetes в MS Azure вручную, не используя AKS. Так:
- Я создал 2 ВМ в одном наборе доступности: одну для мастера k8s и вторую для узла k8s.
- Я создал External Load Balancer и добавил 2 виртуальных машины в бэкэнд-пул.
- Я создал кластер k8s, используя kubespray.
Я создал 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 для создания балансировщика нагрузки. Вам в основном нужно:
- Добавьте эту опцию:
--cloud-provider=azure
на вашkube-apiserver
,kube-controller-manager
и всеkubelets
работает на ваших узлах. - Убедитесь, что ваша виртуальная машина Azure имеет доступ к API Azure.
- Перезапустите все компоненты с 1.
Это не требуется, если у вас установлен Cloud Controller Manager, который на момент написания этой статьи является бета-версией K8s 1.12. Обратите внимание, что --cloud-provider
вариант будет устаревшим в какой-то момент в пользу этого.
Вам не нужно этого делать, k8s (если он настроен правильно) справится с этим за вас. Все, что вам нужно сделать, это дать ему соответствующие права, чтобы иметь возможность создавать балансировщик нагрузки в Azure.