I\'m not sure how load balancing works with Ingress.
If I understand correctly, what happens is actually something like this:
I fail to see how the loa
The ClusterIP
services themselves perform load balancing. The naming can be confusing as LoadBalancer
services are not the only services that involve load balancing - LoadBalancer
actually means something more like 'cloud provider please create an external load balancer and point it at this service'. The kubernetes ClusterIP
services also load-balance across Pods in different Nodes using the kube-proxy. If you don't want kubernetes to do load balancing then you have to specifically disable it by creating a headless service.
It seems like the first scheme you drew is correct. But I think you get confused in terminology. Particularly in the difference between ingress
and ingress-controller
.
Ingress
is a type of resources in k8s (like Service
, Deployment
, ReplicaSet
etc). We use ingress if we want to expose some services to an external world with binding to some path and host (i.e. myapp.com/api -> my-api-service).
The job of ingress-controller
is to handle creation/update/deletion of ingress resources and implement all the functionality needed for ingress. Under the hood ingress-controller is a simple deployment exposed as LoadBalancer
or NodePort
service depending on where k8s is deployed. And image-controller forwards received request further to one of pods of service which matches host and path in some of the deployed ingress resources.
I got curious and thought: why would I need an Ingress for load balancing on layer 7 if the only thing it does is forward the traffic to a Service that implements the load balancing on layer 4?
Most Ingress controller implementations I looked up, talk to the Kubernetes API server to keep track of all Pods associated with a Service. Instead of forwarding traffic to the Service, they skip the intermediary and directly forward to the Pods. Since an ingress controller operates on layer 7, it enables a more application-oriented load balancing.