<p>From k8s docs and along with other answers I can find, it shows load balancer(LB) before the ingress. However I am confused that after matching the ingress rule, there can be still multiple containers that backed the selected services. Does LB happen again here for selecting one container to route to?</p>
<p><a href="https://i.stack.imgur.com/IKu15.png" rel="nofollow noreferrer">https://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress</a></p>

<p>As you can see from the picture you posted, the Ingress choose a Service (based on a Rule) and not directly a Pod. Then, the Service may (or may not) have more than one Pod behind.</p>
<p>The default Service type for Kubernetes is called <code>ClusterIP</code>. It receives a virtual IP, which then redirects requests to one of the Pods served behind. On each node of the cluster, runs a <code>kube-proxy</code> which is responsible for implementing this virtual ip mechanic.</p>
<p>So, yes, load balancing happens again after a Service is selected.. if that service selects more than one Pod. Which backend (Pod) is choosen depends on how <code>kube-proxy</code> is configured and is usually either round robin or just random.</p>
<hr />
<p>There is also a way to create a Service without a virtual IP. Such services, called headless Services, directly uses DNS to redirect requests to the different backends.. but they are not the default because it is better to use proxies than try to load balance with DNS.. which may have side effects (depending on who makes requests)</p>
<hr />
<p>You can find a lot of info regarding how Services work in the <a href="https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies" rel="nofollow noreferrer">docs</a>.</p>
