Services, Endpoints, and Cluster DNS
On this page
Service Routing Model
- Service selects pods via labels → creates Endpoints/EndpointSlices.
- kube-proxy (or eBPF) routes to endpoint IPs.
- Cluster DNS resolves service names to ClusterIP.
Debug Checklist: Selector → Endpoints → Pod
kubectl -n <ns> get svc <svc> -o yaml | sed -n '1,120p' kubectl -n <ns> get endpoints <svc> -o yaml 2>/dev/null || true kubectl -n <ns> get endpointslices -l kubernetes.io/service-name=<svc> kubectl -n <ns> get pods -l <selector> -o wide
In-Cluster Connectivity Test
kubectl -n <ns> run tmp-curl --rm -it --image=curlimages/curl -- sh # inside: # nslookup <svc> # curl -sS -m 2 http://<svc>:<port>/health || true
Failure Modes
- No endpoints: selector mismatch or pods not Ready.
- DNS ok, curl fails: NetworkPolicy/CNI issue, wrong targetPort.
- Intermittent: readiness flapping, node networking issues.