-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Description
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:
- I run k8s on my desktop with each cluster node being a VM (using KVM.) I use this for development and experimentation.
- 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... - So I was successfully using External DNS with the
v0.14.0
image and the1.13.1
chart which supportedprovider: webhook
and then I would specifyextraArgs
with--webhook-provider-url=http://192.168.0.49:5000
where that IP address was my desktop. - 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.