gitmyhub

external-dns

Go ★ 9.0k updated 8h ago

Configure external DNS servers dynamically from Kubernetes resources

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.

GoKubernetessetup: hardcomplexity 4/5

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.

Where it fits