Skip to content

DDNS Updater

Deploy ddns-updater on Kubernetes using the official qmcgaw/ddns-updater Docker image. Keep DNS A/AAAA records updated across 50+ providers with a responsive web UI.

Key Features

  • 50+ DNS providers — Cloudflare, Route53, DuckDNS, Namecheap, GoDaddy, Hetzner, and more
  • Web UI — responsive dashboard for monitoring update status
  • Multi-provider — manage records across different providers in a single deployment
  • Persistent history — update history stored in a PVC
  • Existing secrets — bring your own Secret for credentials
  • Ingress support — expose the web UI with TLS

Installation

HTTPS repository:

helm repo add helmforge https://repo.helmforge.dev
helm repo update
helm install ddns-updater helmforge/ddns-updater -f values.yaml

OCI registry:

helm install ddns-updater oci://ghcr.io/helmforgedev/helm/ddns-updater -f values.yaml

Basic Example (Cloudflare)

# values.yaml
config:
  settings:
    - provider: cloudflare
      zone_identifier: 'your-zone-id'
      domain: 'example.com'
      host: '@'
      ttl: 300
      token: 'your-cloudflare-api-token'
      proxied: false
      ip_version: 'ipv4'

Access the web UI with kubectl port-forward svc/<release>-ddns-updater 8000:80.

Multi-Provider Example

config:
  settings:
    - provider: cloudflare
      zone_identifier: 'cf-zone-id'
      domain: 'example.com'
      host: '@'
      token: 'cf-token'
      proxied: true
    - provider: duckdns
      domain: 'myhost.duckdns.org'
      token: 'duck-token'
    - provider: namecheap
      domain: 'example.org'
      host: 'home'
      password: 'ddns-password'

External Secret

config:
  existingSecret: ddns-config
  existingSecretKey: config.json

Key Values

KeyDefaultDescription
config.settings[]DNS records to update (provider-specific)
config.existingSecret""Existing secret with config.json
ddns.period5mCheck interval
ddns.httpTimeout10sHTTP timeout
ddns.publicIpFetchersallIP detection method
ddns.logLevelinfoLog level
ddns.port8000Web UI container port
persistence.enabledtruePersist update history
persistence.size256MiPVC size
ingress.enabledfalseEnable ingress for web UI

More Information

See the source code and full values reference on GitHub.