External ip pending Kubernetes Load balancer

10/1/2019

Hi Installed Kubernetes using kubeadm in centos When i create the deployment using type Load Balancer in yaml file the External Ip is Pending for Kubernetes LB it is stuck in Pending state

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
-- J Jedidiah
kubernetes-networking
kubernetes-networkpolicy

1 Answer

10/9/2019

This has been discussed a dozen of times.

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

In short,

Kubernetes does not offer an implementation of network load-balancers (Services of type LoadBalancer) for bare metal clusters. The implementations of Network LB that Kubernetes does ship with are all glue code that calls out to various IaaS platforms (GCP, AWS, Azure…). If you’re not running on a supported IaaS platform (GCP, AWS, Azure…), LoadBalancers will remain in the “pending” state indefinitely when created.

Bare metal cluster operators are left with two lesser tools to bring user traffic into their clusters, “NodePort” and “externalIPs” services. Both of these options have significant downsides for production use, which makes bare metal clusters second class citizens in the Kubernetes ecosystem.

MetalLB aims to redress this imbalance by offering a Network LB implementation that integrates with standard network equipment, so that external services on bare metal clusters also “just work” as much as possible.

Official documentation: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

On cloud providers which support external load balancers, setting the type field to LoadBalancer provisions a load balancer for your Service. The actual creation of the load balancer happens asynchronously, and information about the provisioned balancer is published in the Service’s .status.loadBalancer field. For example

Traffic from the external load balancer is directed at the backend Pods. The cloud provider decides how it is load balanced.

Some cloud providers allow you to specify the loadBalancerIP. In those cases, the load-balancer is created with the user-specified loadBalancerIP. If the loadBalancerIP field is not specified, the loadBalancer is set up with an ephemeral IP address. If you specify a loadBalancerIP but your cloud provider does not support the feature, the loadbalancerIP field that you set is ignored.

MetalLB Project:

https://metallb.universe.tf/

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

https://github.com/danderson/metallb

-- VKR
Source: StackOverflow