To run k8s on bare metal server clusters there's only Metallb option to bring user traffic into clusters NodePort services, via externally exposed IP address(es). I wasn't talking about k8s internal load balancers and reverse proxies
It's very commonly used by the ingress controllers. You can get things working with hostNetwork or custom service port ranges, but that's a lot rarer than doing it via load balancer.
Third option would be to expose pods directly in the network. EKS does this by default, but from my experience it's quite rare for people to leverage it.
https://github.com/kubernetes/ingress-nginx
https://doc.traefik.io/traefik/providers/kubernetes-ingress/