kubernetes-sigs/external-dns

Configure external DNS servers dynamically from Kubernetes resources

View on GitHub ↗Jump to charts ↓Open shareable report →

Data as of . Signed-in members get hourly updates — create a free account.

Summary Information

Updated 31 minutes ago
Added to GitGenius on June 24th, 2026
Created on February 9th, 2017
Open Issues & Pull Requests: 191 (+0)
GitHub issues: Enabled
Number of forks: 2,935
Total Stargazers: 9,109 (+0)
Total Subscribers: 101 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 44.6 hours
Mean response time: 35.1 days
90th percentile: 93.7 days
Tracked items: 659

Maintainer activity

13 people did triage or write work on this repository in the last 12 months.

Counts unlabeled, assigned, unassigned, milestoned, demilestoned, locked, unlocked over the last 12 months. These are issue and pull request events that require triage or write permission. Commits and code review are not counted. labeled and renamed are excluded because GitHub issue forms record the issue author as the actor. Figures from October 7, 2026. This count is not comparable across projects: each project's automation decides which of these events a person emits.

How this project is maintained

About 17% of issues opened in the past year have never received a reply. 92% of open issues come from outside the core team, so the backlog reflects real-world use rather than internal planning. Work labelled "area/release" is answered fastest, typically in about 4 hours, while "area/provider/aws" waits about 14 days. 38% of tracked open issues have had no activity in three months. 67% of issues opened in the past year have been closed, leaving a working backlog.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 116
New in 7 days: 3
Closed in 7 days: 2
Avg open age: 476 days
Stale 30+ days: 96
Stale 90+ days: 64

Recent activity

Opened in 7 days: 3
Closed in 7 days: 1
Comments in 7 days: 2
Events in 7 days: 8

Top labels

  • kind/bug (428)
  • lifecycle/rotten (269)
  • kind/feature (220)
  • help wanted (66)
  • lifecycle/frozen (45)
  • kind/support (29)
  • lifecycle/stale (25)
  • area/provider/aws (13)

Most active issues this week

Sign in to see which issues are moving.
Sign in

Detailed Description

ExternalDNS is a Kubernetes controller that synchronizes exposed Kubernetes Services and Ingresses with external DNS providers, enabling dynamic DNS record management through Kubernetes resources. Written in Go, it functions as a DNS controller that bridges Kubernetes clusters with public DNS servers, allowing cluster resources to be discoverable via external DNS infrastructure. Unlike Kubernetes' internal DNS server, ExternalDNS does not operate as a DNS server itself but instead configures external DNS providers such as AWS Route 53 and Google Cloud DNS based on Kubernetes resource definitions.

The core functionality of ExternalDNS involves retrieving a list of resources from the Kubernetes API, determining the desired DNS records, and then configuring external DNS providers accordingly. It operates in a DNS provider-agnostic manner, allowing users to control DNS records dynamically through Kubernetes resources. The controller can manage selected zones through domain filtering and synchronizes Ingresses, Services of type LoadBalancer, and nodes across multiple DNS providers. By default, ExternalDNS maintains awareness of the records it manages, enabling safe operation within non-empty hosted zones. Users can configure the controller with a unique txt-owner-id value to track ownership of DNS records throughout the cluster's lifetime, and a dry-run mode is available to preview changes before submission to DNS provider APIs.

The repository demonstrates significant community engagement and maintenance activity.

ExternalDNS supports both in-tree providers and webhook-based external providers. This architectural decision reduces maintenance burden and allows community-driven provider development. The repository documents numerous webhook providers including implementations for Hetzner, DigitalOcean, Infoblox, and many others, with over 40 known external providers listed.

Configuration of ExternalDNS is flexible, supporting both command-line flags and environment variables for all settings. Users can customize TTL values through annotations, manage internal hostnames, and configure ownership tracking through txt-prefix settings. The controller can run as a control loop within a cluster or locally for testing purposes. ExternalDNS handles special cases such as bare metal Kubernetes clusters behind NAT by supporting externalIPs lists for LoadBalancer services, enabling integration with solutions like MetalLB. The project maintains comprehensive documentation and provides tutorials for provider-specific setup, ingress controllers, and advanced configuration options.