external-dns: no endpoints found for service
Fixes external-dns 'no endpoints found' by adding the hostname annotation to the Service or Ingress and verifying source configuration. Not for DNS provider credential errors.
TL;DR
external-dns only creates records for sources it is configured to watch, and only when they carry the hostname annotation. Add the external-dns.alpha.kubernetes.io/hostname annotation with the desired DNS name, confirm the source is enabled, and the record appears.
Error
external-dns: no endpoints found for serviceSteps
- Check the annotation: describe the Service or Ingress and look for the hostname annotation. Expected: it is missing or misspelled, which explains the skip.
- Add the annotation with the fully qualified DNS name you want. Expected: the object now advertises the desired hostname.
- Verify sources: check the external-dns deployment args for
--sourceflags covering your object type (service, ingress, etc.). Expected: your object type is in the source list. - Check the logs: run with
--log-level=debugor inspect events for the "no endpoints" decision. Expected: the log confirms the annotation or source gap. - Wait one sync interval and query DNS. Expected: the record resolves to the service endpoint.
When to use
- external-dns logs "no endpoints found" for a service
- New services that never get DNS records
- After changing external-dns sources
When not to use
- DNS provider API credential failures (auth issue)
- Records created but not resolving (provider propagation)
Tool compatibility
- external-dns (
--source, hostname annotation); DNS providers
Variant phrasings
external-dns skipping my ingress
Add the hostname annotation; without it external-dns ignores the ingress.
no dns record for kubernetes service
Confirm the service type is supported by your --source setting and the annotation is present.
Why it happens
external-dns is deliberately opt-in per object via the annotation, so it never invents DNS names. A missing annotation or a source type the deployment does not watch means the object is invisible to the sync loop by design.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_t265Djr9B7cqkv0PLq8o3g