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