external-dns

Configure ExternalDNS to synchronize Kubernetes resources with DNS providers like Cloudflare.

4|2|Updated Jun 1, 2026
One-click install
npx skills add https://github.com/Aidas-dev/k8s-agent-skills --skill external-dns-aidas-dev
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: external-dns
Source: https://github.com/Aidas-dev/k8s-agent-skills/tree/main/skills/external-dns
Command: npx skills add https://github.com/Aidas-dev/k8s-agent-skills --skill external-dns-aidas-dev

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Manually creating and updating DNS records for Kubernetes Services, Ingresses, and Gateway API routes is error-prone and quickly drifts out of sync with the cluster. This Skill provides the operational knowledge to deploy and configure ExternalDNS so DNS records are created, updated, and owned automatically. ## Core Features & Use Cases - Source and Provider Configuration: Covers all supported sources (Ingress, Service, Gateway HTTPRoute/GRPCRoute/TLSRoute, Istio, CRD) and provider setup with a focus on Cloudflare API token authentication and proxy flags. - Ownership and Policy Management: Explains TXT registry ownership tracking, txtOwnerId, and sync policies (upsert-only, sync, create-only) to prevent accidental record deletion in shared zones. - Gateway API and RBAC Integration: Details the extra RBAC rules required for gateway-httproute sources and per-route annotation overrides for Cloudflare proxying and TTL. - Use Case: You expose a new application via a Cilium Gateway HTTPRoute and want its hostname to appear automatically in Cloudflare DNS with the proxy enabled, without touching the Cloudflare dashboard. ## Quick Start Ask the agent to configure ExternalDNS with the Cloudflare provider and gateway-httproute source so DNS records are created automatically for your HTTPRoute hostnames.

Frequently Asked Questions about external-dns

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I set up ExternalDNS with Cloudflare on Kubernetes?▼

Deploy ExternalDNS via its Helm chart with provider.name set to cloudflare and supply a CF_API_TOKEN environment variable from a Secret. The token needs Zone:DNS:Edit permission for the target zone, and you can add the --cloudflare-proxied flag to enable Cloudflare proxying.

How to use ExternalDNS with Gateway API HTTPRoute?▼

Add gateway-httproute to the sources list and grant RBAC permissions for httproutes and gateways in the gateway.networking.k8s.io API group. Without these extra rules, the gateway source returns no endpoints and no DNS records are created.

Does ExternalDNS delete DNS records when an Ingress is removed?▼

Only with the sync policy. The default upsert-only policy creates and updates records but never deletes them, so stale records persist after resource deletion. Use sync for full lifecycle management or clean up records manually.

Why is ExternalDNS not creating records for my Gateway routes?▼

The most common cause is missing RBAC permissions for Gateway API resources. Both httproutes and gateways must be listed in rbac.extraRules with get, watch, and list verbs, otherwise the source silently returns no endpoints.

Can ExternalDNS manage NodePort services?▼

No, the service source only supports LoadBalancer type services. NodePort services are not detected, so use Ingress or Gateway API routes as sources for workloads exposed through node ports.

What is the txtOwnerId in ExternalDNS used for?▼

The txtOwnerId identifies which ExternalDNS instance owns a record via TXT registry entries. Instances with different owner IDs can coexist on the same zone, and upsert-only leaves records with unknown owner IDs untouched.