<p>Made my way into kubernetes through GKE, currently trying out via kubeadm on bare metal.</p>

<p>In the later environment, there is no need of any specific load balancer; using nginx-ingress and ingresses let one serve service to the www.</p>

<p>Oppositely, on gke, using the same nginx-ingress, or using the gke provided l7, you always end up with a billed load balancer.</p>

<p>What's the reason about that, as it seemed not to be ultimately needed ?</p>

<p>(Reposting my comment above) </p>

<p>In general, when one is receiving traffic from the outside world, that traffic is being sent to one or more non-ACLd public IP addresses. </p>

<p>If you run k8s on bare metals, those BMs can have public IPs, and you can just run ingress on one or more of them. </p>

<p>A managed k8s environment, however, for security reasons, will not permit nodes to have public IPs. </p>

<p>Instead, managed load balancers are allowed to have public IPs. Those are configured to know the private node IPs hosting ingress for your cluster and will direct traffic accordingly. </p>
