SECURITY WARNING: Never run commands you don't understand. Always review code before execution. Use at your own risk.
Ingress New Added 19 September 2026

ingress-nginx: Service does not have any active Endpoint

The controller resolved the Ingress to a Service but the Service selects no ready Pods, so it serves the default backend and returns 404 instead of routing. The Ingress and the Service both look correct in kubectl get, because the gap is between the Service selector and the Pod labels or the readiness probe.

Quick fix

Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.

Quick fix
# The controller log names the offending service, start from its endpoints
kubectl get endpointslices -l kubernetes.io/service-name=web
kubectl describe svc web | grep -A3 Endpoints

# Empty endpoints have two causes: no matching labels, or no ready pods
kubectl get pods -l app=web -o wide
kubectl get pods -l app=web -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[?(@.type=="Ready")].status}{"\n"}{end}'

# The selector must match the pod template labels, not the deployment labels
kubectl get svc web -o jsonpath='{.spec.selector}'; echo
kubectl get deploy web -o jsonpath='{.spec.template.metadata.labels}'; echo

# The port name in the Ingress must exist on the Service
kubectl get svc web -o jsonpath='{.spec.ports}'; echo

# Watch the controller pick the change up
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=50 | grep -i endpoint

How to diagnose Ingress errors

An Ingress failure is a routing failure, and there are only a few places it can break: the IngressClass is missing so no controller claims the resource, the path or host does not match, the backing Service has no endpoints, or the TLS secret is absent or in the wrong namespace. The "default backend - 404" page is the controller saying it received the request but found no rule for it.

If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.

  1. Work backwards from the pod: kubectl get endpoints <service>. If it is empty, the Service selector does not match any ready pod and no Ingress configuration will help.
  2. Check that a controller has claimed the Ingress: kubectl describe ingress <name> should show events and an assigned address. No address means no controller is watching that IngressClass.
  3. Read the controller's own logs (kubectl logs -n ingress-nginx deploy/ingress-nginx-controller). They log rejected configuration and certificate problems explicitly.
  4. Remember TLS secrets must live in the same namespace as the Ingress. This is the single most common TLS mistake.
  5. Verify path type semantics: Prefix, Exact and ImplementationSpecific match differently, and regex behaviour varies between controllers.

Tools worth reaching for

  • kubectl describe ingress
  • kubectl get endpoints
  • controller logs
  • curl -H 'Host: …'
  • openssl s_client -servername

Authoritative references

Primary documentation for this error, worth reading before applying any fix in production.

kubernetes.github.io kubernetes.io

Related Ingress errors

See all 11 Ingress errors →

Browse other categories

Something missing or wrong?

This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.