mconfalonieri
external-dns-hetzner-webhook
Go

ExternalDNS webhook for managing DNS Records in Hetzner.

Last updated Jun 25, 2026
63
Stars
9
Forks
6
Issues
0
Stars/day
Attention Score
54
Language breakdown
Go 98.6%
Makefile 0.9%
Shell 0.3%
Dockerfile 0.2%
Files click to expand
README

ExternalDNS - UNOFFICIAL Hetzner Webhook

[!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 <CLOUDAPITOKEN> with your token:

kubectl create secret generic hetzner-credentials --from-literal=api-key='<CLOUDAPITOKEN>' -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: HETZNERAPIKEY
        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 |

🔗 More in this category

© 2026 GitRepoTrend · mconfalonieri/external-dns-hetzner-webhook · Updated daily from GitHub