Skip to content

Can you support a "null" or "empty" webhook provider #5585

@aceeric

Description

@aceeric

What would you like to be added:

Thank you for External DNS! Would you consider a null or empty webhook provider sidecar?

Why is this needed:

I have kind of a unique use case. I'll try to present it simply:

  1. I run k8s on my desktop with each cluster node being a VM (using KVM.) I use this for development and experimentation.
  2. When I provision an ingress in the cluster with host foo.io I don't really need any DNS manipulation per se: I just need /etc/hosts on my desktop modified because the entire cluster - VMs and all - is on my desktop computer...
  3. So I was successfully using External DNS with the v0.14.0 image and the 1.13.1 chart which supported provider: webhook and then I would specify extraArgs with --webhook-provider-url=http://192.168.0.49:5000 where that IP address was my desktop.
  4. Then I run a really simple Python http server on my desktop as the webhook, and the Python server responds to the webhook calls from External DNS coming from the cluster VM(s) and configures /etc/hosts on my desktop

So by simply creating an ingress with host testme.foo.io and the required annotations, my /etc/hosts is updated by External DNS via my Python webhook - then I can fire up my browser and access https://testme.foo.io. That was working great.

I wanted to update to latest chart and image. Unfortunately with the new v0.18.0 image, my use case does not appear to be supported because an empty provider is not allowed. The error is:

$ k -n external-dns logs deploy/external-dns -f
time="2025-06-28T22:08:29Z" level=fatal msg="flag parsing error: enum value must be one of akamai,alibabacloud,aws,aws-sd,azure,azure-dns,azure-private-dns,civo,cloudflare,coredns,digitalocean,dnsimple,exoscale,gandi,godaddy,google,inmemory,linode,ns1,oci,ovh,pdns,pihole,plural,rfc2136,scaleway,skydns,transip,webhook, got ''"

I helm install chart version 1.17.0 with these values to get the error above:

provider:
  name:

extraArgs:
- --provider=webhook
- --webhook-provider-url=http://192.168.0.49:5000

image:
  tag: v0.18.0

I've also tried these helm values:

provider:
  name: webhook
  webhook:
    livenessProbe:
      httpGet:
      exec:
        command: ["sh", "-c", "true"]
    readinessProbe:
      httpGet:
      exec:
        command: ["sh", "-c", "true"]
    securityContext:
      runAsUser: 1000
    image:
      repository: alpine
      tag: latest

Unfortunately that required hand adding a command for the webhook sidecar because the chart doesn't support it:

command:
- /bin/sh
- -c
- sleep 1000

And I've tried hand-deleting the webhook sidecar from the external-dns deployment after the chart installs. In both those cases (using alpine, and deleting the side car) external dns never fully starts. It dies and restarts after this log entry:

time="2025-06-28T23:27:00Z" level=info msg="Created Kubernetes client https://10.32.0.1:443"
time="2025-06-28T23:28:00Z" level=fatal msg="failed to sync *v1.EndpointSlice: context deadline exceeded with timeout 1m0s"

So it seems to really want that side car there...

If a null or empty sidecar was allowed then I would be back in business with the latest release. Basically this feature can be interpreted as: "There's no webhook provider side-car - the provider is external to the cluster at the endpoint specified by the -webhook-provider-url arg.

Thank you for your great work, and considering my suggestion. If you think it makes sense I can look at submitting a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/featureCategorizes issue or PR as related to a new feature.lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions