<p>My understanding is that setting the <code>Service</code> type to <code>LoadBalancer</code> creates a new Azure Load Balancer and assigns an IP address to the <code>Service</code>. Does this mean that I can have multiple Services using port 80? If the app behind my <code>Service</code> (an ASP.NET Core app) can handle TLS and HTTPS why shouldn't I just use <code>LoadBalancer</code>'s for any <code>Service</code> I want to expose to the internet?</p>

<p>What is the advantage of using an <code>Ingress</code> if I don't care about TLS termination (You can let Cloudflare handle TLS termination)? If anything, it slows things down by adding an extra hop for every request.</p>

<h2>Update</h2>

<p>Some answers below mention that creating load balancers is costly. It should be noted that load balancers on Azure are free but they do charge for IP addresses of which they give you five for free. So for small projects where you want to expose up to five IP addresses, it's essentially free. Any more than that, then you may want to look ad usign <code>Ingress</code>.</p>

<p>Some answers also mention extra complexity if you don't use <code>Ingress</code>. I have already mentioned that Cloudflare can handle TLS termination for me. I've also discovered the <code>external-dns</code> Kubernetes project to create DNS entries in Cloudflare pointing at the load balancers IP address? It seems to me that cutting out <code>Ingress</code> reduces complexity as it's one less thing that I have to configure and manage. The choice of Ingress is also massive, it's likely that I'll pick the wrong one which will end up unmaintained after some time.</p>

<p>There is a nice article <a href="https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0" rel="noreferrer">here</a> which describe the differences on Service(Load Balancer) and Ingress.</p>

<p>In summary, you can have multiple Service(Load Balancer) in the cluster, where each application is exposed independently from each other. The main issue is that each Load Balancer added will increase the cost of your solution, and does not have to be this way, unless you strictly need this.</p>

<p>If multiple applications listen on port 80, and they are inside the container, there is no reason you also need to map it to the port 80 in the host node. You can assign it to any port, because the Service will handle the dynamic port mappings for you.</p>

<p>The ingress is best in this scenario, because you can have one ingress listing on port 80, and route the traffic to the right service based on many variables, like:</p>

<ul>
<li>Domain</li>
<li>Url Path</li>
<li>Query String</li>
<li>And many other</li>
</ul>

<p>Ingress in not just for TLS termination, it is in simple terms a proxy\gateway that will control the routing to the right service, TLS termination is just one of the features.</p>
