Балансировщик нагрузки Kubernetes без Label Selector

Попытка создать ресурс Laod Balancer с Kubernetes (для кластера EKS). Он обычно работает с селектором меток, но мы хотим иметь только один LB на кластер, а затем позволить входящим прямым сервисам. Вот что у меня сейчас есть:

kind: Service
apiVersion: v1
metadata:
  namespace: default
  name: name
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
  ports:
  - port: 80
  type: LoadBalancer

Это создает LB и дает ему внутренний DNS, но экземпляры никогда не становятся работоспособными (хотя они и есть).

Любые советы


person shrimpy    schedule 04.06.2019    source источник


Ответы (2)


Что показывает страница мониторинга целевой группы LB в отношении сбоев? Есть ли ответы об ошибках HTTP или просто ошибки подключения? Настроена ли группа безопасности для узлов K8S, чтобы разрешить вход с LB?

person Darren Reddick    schedule 04.06.2019
comment
Группа безопасности рабочих узлов имеет группу безопасности балансировщика нагрузки да. - person shrimpy; 04.06.2019
comment
Все стручки здоровы. Экземпляры тоже здоровы. Балансировщик нагрузки возвращает OutOfService с экземплярами, поэтому кажется, что он не может подключиться через ...? . - person shrimpy; 04.06.2019
comment
Любопытно также то, что в первый раз, когда я попробовал без селектора, он не вернул здоровых экземпляров. Скинул ЛБ, заново применил селекторами, заработало (как и положено). Я изменил yaml, чтобы не использовать селектор, повторно применить (я не удалял), и, похоже, не видит разницы ...? Он по-прежнему видит 2 здоровых экземпляра - person shrimpy; 04.06.2019
comment
Доступ с LB есть на все порты? - person Darren Reddick; 04.06.2019
comment
Какой порт показывает целевая группа, созданная K8S в AWS? Я считаю, что он должен создать соответствующий ему NodePort на каждом узле, и LB потребуется доступ к этому порту. - person Darren Reddick; 04.06.2019
comment
Разрешен весь трафик Да: Весь трафик Весь протокол Все порт - person shrimpy; 04.06.2019
comment
LB обращается к порту, который каждый раз меняется, когда я его воссоздаю. Я объявляю порт 80 в моем loadbalancer.yaml. Вот что это сейчас: PORT (S) 80: 31101 / TCP - person shrimpy; 04.06.2019

Согласно обсуждению в другом заданном вами вопросе. Я думаю, что вы хотите достичь One Load Balancer Per Cluster, имея в виду следующее: Сэкономьте на счете за AWS с Kubernetes Ingress.

Для этого вам необходимо создать:

  1. Load Balancer Service с Nginx-Ingress-Controller модулем в качестве бэкэнда.
  2. Ваш Load balancer Service будет иметь внешний IP-адрес, направлять весь трафик вашего кластера на этот IP-адрес.
  3. Правила входа, которые направляют весь трафик кластера по вашему желанию.

Таким образом, ваш трафик будет проходить по следующему конвейеру:

весь трафик -> AWS LoadBalancer -> Node1: xxxx -> Nginx-Ingress-Controller Service -> Nginx-Ingress-Controller Pod -> Your Service1 (на основе ваших входных правил) -> Your Pod

Вот пример того, как вызвать Nginx-Ingress-Controller: https://hackernoon.com/setting-up-nginx-ingress-on-kubernetes-2b733d8d2f45

person Fei    schedule 05.06.2019
comment
Это именно то, что я имел в виду, да! спасибо, извини если непонятно ... попробую! - person shrimpy; 05.06.2019
comment
Хорошо, я следовал этому руководству (digitalocean.com/community/tutorials/) с информацией, которую вы мне предоставили. На заметку: я добавил эту строку service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 в службу балансировки нагрузки, поскольку мы используем внутренний LB. (продолжить следующий комментарий) - person shrimpy; 05.06.2019
comment
Имя все еще разрешается (обычно это занимает немного времени). Но как ни странно есть только 1 из 2-х экземпляров в здоровом состоянии ...? У них одинаковая конфигурация. Это из-за этого? По умолчанию служба Nginx Ingress LoadBalancer имеет для service.spec.externalTrafficPolicy значение Local, которое направляет весь трафик балансировщика нагрузки на узлы, на которых работают модули Nginx Ingress. Другие узлы намеренно не проходят проверки работоспособности балансировщика нагрузки, чтобы входящий трафик не направлялся на них. - person shrimpy; 05.06.2019
comment
да. Ты прав. asykim.com/blog/ вот хорошая статья, объясняющая externalTrafficPolicy. externalTrafficPolicy по умолчанию настроен на кластер, а конфигурация, которую вы использовали в статье digitalocean.com/community/tutorials/ установить для externalTrafficPolicy значение local. Вот почему у вас есть только один узел, прошедший проверку работоспособности. - person Fei; 06.06.2019
comment
Также есть обновление для service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0. Теперь оно должно принимать значение true / false. github.com/kubernetes/kubernetes/issues/17620 - person Fei; 06.06.2019
comment
Хорошо, наконец, проблема решена, но я получаю 503 сервис недоступен ... Я перестраиваю LB и вход с истинными настройками, все еще получаю 503. Вход работает, но не перенаправляет правильно. Я открою новый вопрос в стеке, хотел бы увидеть там ваши советы - person shrimpy; 06.06.2019
comment
Вот тема: stackoverflow.com/questions / 56474192 /. Теперь я получаю 502 и 503, куда-то попадаю! - person shrimpy; 06.06.2019