The most common cause of empty endpoints is a label selector mismatch. The Service's spec.selector must exactly match the labels on the target Pods. Even a subtle difference (dash vs underscore, different capitalization) causes a complete mismatch. Debug with 'kubectl get pods --show-labels' and compare against 'kubectl get svc -o yaml'. Services do require Pods to be Ready, but this wouldn't result in zero endpoints unless all Pods are unready.
Official docs