ExternalDNS - UNOFFICIAL Hetzner Webhook
June 9, 2026 ยท View on GitHub
Note
The latest version is v1.0.0.
ExternalDNS is a Kubernetes add-on for automatically handling DNS records for Kubernetes services using different providers. By default, Kubernetes manages DNS records internally, but ExternalDNS takes this functionality a step further by delegating the management of DNS records to an external DNS provider such as this one. This webhook allows you to manage your Hetzner domains inside your kubernetes cluster.
Important
Support for the legacy DNS system was discontinued by Hetzner. For this reason the legacy DNS provider was removed from the sources in v1.0.0, and the Cloud provider is now the default and only supported one.
Tip
If you are upgrading from previous versions please read the Upgrading from previous versions section.
๐ Documentation
Please check the documentation website for further information.
๐ Quickstart
This quickstart assumes that you are using the new Cloud API for new installations.
1. Create a Hetzner API Token
Generate a Read/Write API token in your Hetzner Console.
2. Create a secret with your API token
Substitute <CLOUD_API_TOKEN> with your token:
kubectl create secret generic hetzner-credentials --from-literal=api-key='<CLOUD_API_TOKEN>' -n external-dns
3. Deploy ExternalDNS with the webhook provider
The simplest way is using Helm.
Skip this step if you already have the ExternalDNS repository added:
helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/
Update your helm chart repositories:
helm repo update
You can then create the helm values file, for example
external-dns-hetzner-values.yaml:
namespace: external-dns
policy: sync
provider:
name: webhook
webhook:
image:
repository: ghcr.io/mconfalonieri/external-dns-hetzner-webhook
tag: v1.0.0
env:
- name: HETZNER_API_KEY
valueFrom:
secretKeyRef:
name: hetzner-credentials
key: api-key
livenessProbe:
httpGet:
path: /health
port: http-webhook
initialDelaySeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /ready
port: http-webhook
initialDelaySeconds: 10
timeoutSeconds: 5
extraArgs:
- "--txt-prefix=reg-%{record_type}."
And then:
# install external-dns with Helm
helm install external-dns-hetzner external-dns/external-dns -f external-dns-hetzner-values.yaml -n external-dns
โ๏ธ License
This project is licensed under the Apache License, version 2.0 - see the LICENSE file for details.
๐ฅ Credits
This Webhook was forked and modified from the IONOS Webhook to work with Hetzner. It also contains huge parts from DrBu7cher's Hetzner provider.
Contributors
| Name | Contribution |
|---|---|
| DerQue | local CNAME fix |
| sschaeffner | build configuration for arm64 |
| sgaluza | support for MX records |