explaingit

kubernetes-sigs/external-dns

8,948GoAudience · ops devopsComplexity · 4/5Setup · hard

TLDR

A Kubernetes controller that automatically creates and updates DNS records whenever you expose a service, connecting to Route 53, Cloudflare, and 20+ other DNS providers.

Mindmap

mindmap
  root((external-dns))
    What it does
      Auto-create DNS records
      Watch Kubernetes services
      Sync on changes
    Providers
      AWS Route 53
      Cloudflare
      Azure DNS
      20 plus others
    Setup
      Provider credentials
      Domain filter flag
      Dry-run mode
    Audience
      DevOps teams
      Kubernetes operators
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Automatically create DNS records whenever you deploy a Kubernetes service or ingress that needs a public address.

USE CASE 2

Keep DNS in sync across AWS Route 53, Cloudflare, Azure DNS, and 20+ other providers without touching the DNS console.

USE CASE 3

Run ExternalDNS in dry-run mode to preview what DNS changes it would make before giving it live credentials.

Tech stack

GoKubernetes

Getting it running

Difficulty · hard Time to first run · 1day+

Requires a running Kubernetes cluster, DNS provider credentials, and RBAC configuration before the controller can manage records.

In plain English

ExternalDNS is a tool that runs inside a Kubernetes cluster and automatically creates, updates, and removes DNS records whenever you expose a service or ingress resource to the outside world. Without it, you would need to log into your DNS provider and add a record manually every time you deploy something that needs a public address. ExternalDNS watches the cluster for those events and makes the changes on your behalf. The tool connects to a wide range of DNS providers, including AWS Route 53, Google Cloud DNS, Azure DNS, Cloudflare, and more than twenty others. It is not a DNS server itself, it is a controller that reads what your Kubernetes cluster wants to expose and then tells your chosen provider to create the matching records. You configure which DNS zones it should manage using a domain filter flag, and it tracks the records it created so it does not accidentally interfere with records you added manually. Setting it up involves giving it credentials for your DNS provider, specifying which domains it should control, and optionally running it in dry-run mode first so you can review what it would change before anything actually happens. Configuration is done through command-line flags or equivalent environment variables, so you can manage it the same way you manage other cluster settings. New DNS providers are no longer added directly into the main codebase. Instead, the project supports a webhook plugin system, allowing third-party developers to write their own provider connectors that work alongside the core tool without being merged in. A list of known community-built providers is included in the documentation. The project is part of the Kubernetes SIGs (Special Interest Groups) umbrella, meaning it follows the governance and contribution standards of the broader Kubernetes community. It is written in Go and has a separate documentation site with tutorials for the most common provider setups.

Copy-paste prompts

Prompt 1
I have a Kubernetes cluster on AWS and want ExternalDNS to automatically update Route 53 when I create an Ingress. Walk me through the setup including IAM permissions and deployment YAML.
Prompt 2
I'm setting up ExternalDNS with Cloudflare. What credentials does it need and how do I restrict it to manage only a specific domain zone?
Prompt 3
My ExternalDNS controller is creating records I didn't expect. How do I check which records it owns and prevent it from touching manually-created records?
Prompt 4
My DNS provider isn't in the ExternalDNS core. How do I find and add a community webhook provider plugin?
Open on GitHub → Explain another repo

← kubernetes-sigs on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.