Внешний ip в ожидании Kubernetes Балансировщик нагрузки - PullRequest
0 голосов
/ 01 октября 2019

Привет Установленные Kubernetes, использующие kubeadm в сантистах. Когда я создаю развертывание, используя тип Load Balancer в файле yaml, внешний Ip равен Pending, для Kubernetes LB он застрял в состоянии ожидания

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        13m
service    LoadBalancer   10.101.168.76   <pending>     80:32225/TCP   4m52s

1 Ответ

0 голосов
/ 09 октября 2019

Это обсуждалось десятки раз.

1) https://stackoverflow.com/a/53520738/9929015

2) https://stackoverflow.com/a/53343935/9929015

3) https://stackoverflow.com/a/53520738/9929015

4) https://stackoverflow.com/a/50080291/9929015

Короче говоря,

Kubernetes не предлагает реализацию сетевых балансировщиков нагрузки (служб типа LoadBalancer) для голых металлических кластеров. Все реализации Network LB, с которыми поставляется Kubernetes, представляют собой связующий код, который обращается к различным платформам IaaS (GCP, AWS, Azure…). Если вы не работаете на поддерживаемой платформе IaaS (GCP, AWS, Azure ...), LoadBalancers останется в состоянии «ожидания» на неопределенный срок при создании.

Операторы кластера с «голым металлом» остаются с двумя меньшими инструментами дляприносить пользовательский трафик в свои кластеры, сервисы «NodePort» и «externalIPs». Оба эти варианта имеют существенные недостатки для производственного использования, что делает кластеры с голыми металлами вторым классом граждан в экосистеме Kubernetes.

MetalLB стремится исправить этот дисбаланс, предлагая реализацию Network LB, которая интегрируется со стандартным сетевым оборудованием, поэтомучто внешние сервисы на кластерах из чистого металла также «просто работают» в максимально возможной степени.

Официальная документация: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

На облачных провайдерах, которые поддерживают внешние балансировщики нагрузки,установка поля типа в LoadBalancer обеспечивает балансировщик нагрузки для вашей службы. Фактическое создание балансировщика нагрузки происходит асинхронно, и информация о подготовленном балансировщике публикуется в поле службы .status.loadBalancer. Например,

Трафик от внешнего балансировщика нагрузки направляется на бэкэнд-модули. Облачный провайдер решает, как сбалансировать нагрузку.

Некоторые облачные провайдеры позволяют вам указать loadBalancerIP. В этих случаях балансировщик нагрузки создается с помощью указанного пользователем loadBalancerIP. Если поле loadBalancerIP не указано, для loadBalancer устанавливается эфемерный IP-адрес. Если вы указали loadBalancerIP, но ваш облачный провайдер не поддерживает эту функцию, то поле loadbalancerIP, которое вы указали, игнорируется.

Проект MetalLB:

https://metallb.universe.tf/

https://github.com/helm/charts/tree/master/stable/metallb

https://github.com/danderson/metallb

...