Home/Engineer/Troubleshooting/Kubernetes Endpoints None Fi
TroubleshootingIntermediatelinuxkubernetesendpointsendpointslice

Kubernetes Endpoints None Fix — Empty Service Backends Runbook

When a Service has no Endpoints/EndpointSlices, traffic goes nowhere. Match selectors to labels, require Ready pods, verify targetPort, then check NetworkPolicy and the dataplane.

Endpoints none diagnostic runbook

If the Service exists but Endpoints / EndpointSlice is empty (Endpoints none, endpoints: []), traffic never reaches Pods. You usually see timeouts, connection refused, or an unhealthy load balancer.

30-second checklist

  1. kubectl get svc,endpoints,endpointslice -n <ns> — confirm empty backends
  2. Service selector must exactly match Pod labels
  3. At least one Ready Pod (READY 0/1 pods are excluded)
  4. Check exceptions: publishNotReadyAddresses, headless, ExternalName
  5. Consider NetworkPolicy and kube-proxy / Cilium dataplane

Inspect objects

Bash
kubectl get svc <svc> -n <ns> -o yaml
kubectl get endpoints <svc> -n <ns> -o yaml
kubectl get endpointslice -n <ns> -l kubernetes.io/service-name=<svc> -o yaml
kubectl describe svc <svc> -n <ns>

Empty Endpoints means the dataplane has nothing to program.

Match selector to labels

Bash
kubectl get svc <svc> -n <ns> -o jsonpath='{.spec.selector}{"\n"}'
SEL=$(kubectl get svc <svc> -n <ns> -o jsonpath='{range $k,$v := .spec.selector}{$k}={$v},{end}' | sed 's/,$//')
kubectl get pods -n <ns> -l "$SEL" -o wide
kubectl get pods -n <ns> --show-labels

Common mistakes: mixing app vs app.kubernetes.io/name, Helm selector immutability drift, wrong namespace.

Not Ready ⇒ not in Endpoints

Bash
kubectl get pods -n <ns> -o wide
kubectl get pod <pod> -n <ns> -o jsonpath='{range .status.conditions[*]}{.type}={.status}{"\n"}{end}'
StateResult
Ready=FalseExcluded from Endpoints
CrashLoopBackOff / Pending / ImagePullBackOffExcluded
Ready=TruePod IP registered

targetPort and protocol

Compare Service targetPort (name or number) with container ports. IP present but no ports usually means a name mismatch.

NetworkPolicy and dataplane

  • Policies blocking client→Pod or probe paths
  • CNI identity lag after label changes
  • Debug with netshoot against ClusterIP and Pod IP

Decision table

ObservationAction
0 pods for selectorFix labels/namespace
Pods exist, Ready=FalseFix probes / crashes / image first
Endpoints IP but connect failstargetPort, NetworkPolicy, node firewall
ExternalName / no selectorEmpty Endpoints can be expected

Prevent recurrence

  • Generate Service selector and Pod labels from one Helm values source
  • Fail CI when Endpoints stay empty after rollout
  • Point readinessProbe at the real traffic port
  • Standardize on app.kubernetes.io/* labels

Endpoints none is not a “broken Service object” — it means the selector / Ready / port contract broke. Start with “does this selector return Pods?”

#kubernetes#endpoints#endpointslice#service#troubleshooting
Editorial note

This guide was drafted with AI assistance and reviewed by an editor for commands and context. Results can vary by OS and tool version — confirm against official docs before applying. If you find an error, email us. email us

Related official docsKubernetes documentation

Questions & answers

Ask a question about this guide. We'll review and reply.