The K8s docs offer ways of running on-prems, you can do it with nginx ingress daemonset + DNS pointing to the IP (or CNAME) of your workers.
It's all covered quite well here: https://kubernetes.github.io/ingress-nginx/deploy/baremetal/ and we use it in production.