<p>I've been studying Kubernetes' main features for days, I understood many things, really I did. But I found nowhere the answer to this question: how does Kubernetes balance requests among cluster's nodes?</p>
<p>Well, I mean, suppose an on premise private Kubernetes cluster: LoadBalancer type actually makes a service publish his ports to the network with an IP; Ingress service is a service which sets the rules for some third-part IngressController, which handles requests and forward them to the correct service.</p>
<p>What I do not understand:</p>
<ol>
<li>Does any or all of these components, or others perhaps, actually monitors nodes' (or pods', I don't know) available resources and chooses to which node (or pod) forward the requests?</li>
<li>If any real load balancer is present natively in Kubernates, what criteria does it adopt? Maybe the aforementioned resources, or the network latency, or just adopts a round robin.</li>
<li>If there is a default policy for balancing, is it possible to customize it and implement your own rules?</li>
</ol>
<p>Please, tell me if I misunderstood anything and I'll try to focus better on that one. Thank you all.</p>

<p>If you don't have something in place that does load balancing externally (f.e. istio) all your mentioned options boil down to getting tcp connections into the cluster.</p>
<p>Inside the cluster a ClusterIP is the real concept for load balancing: All Pods that are assigned to a Service with a ClusterIP will be used (roughly) in a round robin fashion.
This is handled by iptables DNAT rules configured by kubeproxy on each node.</p>
<p>The external LoadBalancer or Ingress usually do not do load balancing, even if the name might suggest it.</p>
