Внешний балансировщик нагрузки-ip застрял в ожидании

#amazon-web-services #kubernetes #amazon-ec2

Вопрос:

Я создал кластер Kubernetes с экземплярами AWS ec2 с помощью kubeadm, но когда я пытаюсь создать службу с типом LoadBalancer, я получаю статус ожидания внешнего IP-адреса

 NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP         123m
nginx        LoadBalancer   10.107.199.170  <pending>     8080:31579/TCP  45m52s
 

Моя команда «Создать» — это

 kubectl expose deployment nginx --port 8080 --target-port 80 --type=LoadBalancer
 

Я не уверен, что делаю что-то не так.

То, что я ожидаю увидеть,-это ВНЕШНИЙ IP-адрес, указанный для балансировщика нагрузки.

Кто — нибудь сталкивался с этим и успешно решил его, пожалуйста?

Спасибо.

Ответ №1:

Вам необходимо настроить интерфейс между k8s и AWS, который является контроллером ws-cloud-провайдера.

 apiVersion: kubeadm.k8s.io/v1beta1
kind: InitConfiguration
nodeRegistration:
  kubeletExtraArgs:
    cloud-provider: aws
 

Более подробную информацию можно найти:

Как только вы завершите эту настройку, у вас будет возможность контролировать не только создание AWS LB для каждого сервиса k8s с помощью балансировщика нагрузки.. Но также вы сможете управлять многими вещами с помощью аннотаций.

 apiVersion: v1
kind: Service
metadata:
  name: example
  namespace: kube-system
  labels:
    run: example
  annotations:
     service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xx-xxxx-x:xxxxxxxxx:xxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx #replace this value
     service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  ports:
  - port: 443
    targetPort: 5556
    protocol: TCP
  selector:
    app: example
 

Различные настройки могут быть применены к службе балансировки нагрузки в AWS с помощью аннотаций.