kubernetes-sigs/external-dns

Description: Configure external DNS servers dynamically from Kubernetes resources

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 3 hours ago
Added to GitGenius on June 24th, 2026
Created on February 9th, 2017
Open Issues & Pull Requests: 162 (+0)
Number of forks: 2,897
Total Stargazers: 9,032 (+0)
Total Subscribers: 96 (+0)

Issue Activity (beta)

Open issues: 108
New in 7 days: 6
Closed in 7 days: 2
Avg open age: 572 days
Stale 30+ days: 59
Stale 90+ days: 33

Recent activity

Opened in 7 days: 6
Closed in 7 days: 2
Comments in 7 days: 5
Events in 7 days: 12

Top labels

  • kind/bug (408)
  • lifecycle/rotten (271)
  • kind/feature (213)
  • help wanted (66)
  • lifecycle/frozen (44)
  • kind/support (29)
  • lifecycle/stale (28)
  • area/provider/aws (13)

Repository Insights (GitGenius)

Median issue/PR response: N/A
Mean response time: 5.1 days
90th percentile: 0.0 hours
Tracked items: 712

Most active contributors

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. GitGenius tracking data shows a median issue and pull request response latency of 0.0 hours with a mean of 121.5 hours across 701 tracked items, indicating responsive maintainers. The most active issue labels are kind/bug with 403 occurrences, lifecycle/rotten with 267, and kind/feature with 210, reflecting ongoing bug fixes and feature development. The primary contributor tracked by GitGenius is ivankatliarchuk with 907 events, followed by mloiseleur with 117 events and szuecs with 63 events. The repository shows overlapping contributors with major projects including microsoft/vscode, microsoft/typescript, and rust-lang/rust, suggesting involvement from experienced open-source developers.

ExternalDNS supports both in-tree providers and webhook-based external providers. The project has explicitly decided against adding new providers directly to the codebase, instead directing new provider implementations toward the webhook system introduced in PR 3063. 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. The in-tree providers, maintained by ExternalDNS contributors, are gradually being moved out of tree as part of issue 4347, with the project encouraging interested parties to create webhook-based providers from existing in-tree implementations.

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.

external-dns
by
kubernetes-sigskubernetes-sigs/external-dns

Repository Details

Fetching additional details & charts...