Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support webhook provider in Chart #4032

Merged
merged 19 commits into from
Jan 9, 2024

Conversation

mloiseleur
Copy link
Contributor

@mloiseleur mloiseleur commented Nov 10, 2023

Description

Adds support to the Helm chart for running a webhook provider as a sidecar.
Fixes #4025
Alternative implementation of #3966.

Checklist

  • End user documentation updated

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Nov 10, 2023
@k8s-ci-robot k8s-ci-robot added the size/M Denotes a PR that changes 30-99 lines, ignoring generated files. label Nov 10, 2023
@mloiseleur
Copy link
Contributor Author

@stevehipwell @johngmyers I submit this alternative implementation in the hope to find an agreement between your two positions.

I have tried to make this PR:

  1. Follows current API
  2. Avoid extraneous parameters

It tries to reuse as much as possible from main container:

  • Same Secret, since it's possible to set multiple files into the same Secret
  • Same readinessProbe & livenessProbe

It's breaking because now, with webhook provider, a provider can have specific args, env, securityContext and so on...

For the probes, I noticed that ionos and adguard uses /health instead of /healthz
@akrieg-ionos @muhlba91 What do you think about unifying probes path of your providers under /healthz ?

@muhlba91
Copy link
Contributor

sounds good to me, and it makes it easier for users to switch providers.

i suggest we also add this in https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/webhook-provider.md as kind of a convention that if a health endpoint is provided by the provider it should listen to /healthz?

@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Nov 10, 2023
@stevehipwell
Copy link
Contributor

@mloiseleur I like this approach, I do have a couple of comments/questions.

  • How would this work with an external webhook provider?
  • Could we not make this a breaking change by supporting provider: <NAME> with a type test?

@k8s-ci-robot k8s-ci-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Nov 10, 2023
@k8s-ci-robot k8s-ci-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Nov 11, 2023
@mloiseleur
Copy link
Contributor Author

mloiseleur commented Nov 11, 2023

How would this work with an external webhook provider?

For instance, on _ionos_

with those values:

provider:
  name: ionos
  env:
    - name: LOG_LEVEL
      value: debug
    - name: IONOS_API_KEY
      valueFrom:
        secretKeyRef:
          name: ionos-credentials
          key: api-key
    - name: SERVER_HOST
      value: "0.0.0.0"
    - name: IONOS_DEBUG
      value: "true"

It produces this output

      [...]
      containers:
        - name: external-dns
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 65534
          image: registry.k8s.io/external-dns/external-dns:v0.13.6
          imagePullPolicy: IfNotPresent
          args:
            - --log-level=info
            - --log-format=text
            - --interval=1m
            - --source=service
            - --source=ingress
            - --policy=upsert-only
            - --registry=txt
            - --provider=webhook
          ports:
            - name: http
              protocol: TCP
              containerPort: 7979
          livenessProbe:
            failureThreshold: 2
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          readinessProbe:
            failureThreshold: 6
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 5
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
        - name: ionos
          image: ghcr.io/ionos-cloud/external-dns-ionos-webhook:v0.6.0
          imagePullPolicy: IfNotPresent
          env:
            - name: LOG_LEVEL
              value: debug
            - name: IONOS_API_KEY
              valueFrom:
                secretKeyRef:
                  key: api-key
                  name: ionos-credentials
            - name: SERVER_HOST
              value: 0.0.0.0
            - name: IONOS_DEBUG
              value: "true"
          ports:
            - name: http
              protocol: TCP
              containerPort: 8888
          livenessProbe:
            failureThreshold: 2
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          readinessProbe:
            failureThreshold: 6
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 5
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5

Could we not make this a breaking change by supporting provider: <NAME> with a type test?

There is an implementation without breaking change through e00eb22. It makes the code more complex.

@stevehipwell
Copy link
Contributor

@mloiseleur an external webhook provider would be one running at a URL (separate pod or external to cluster etc) so would only need the args and not the sidecar container.

@johngmyers
Copy link
Contributor

A webhook outside the pod is explicitly not supported. That would require external-dns to support authenticating to the webhook, otherwise attackers could make changes to DNS by making requests directly to the webhook.

charts/external-dns/templates/_helpers.tpl Outdated Show resolved Hide resolved
charts/external-dns/templates/_helpers.tpl Outdated Show resolved Hide resolved
charts/external-dns/templates/_helpers.tpl Outdated Show resolved Hide resolved
charts/external-dns/templates/deployment.yaml Outdated Show resolved Hide resolved
charts/external-dns/templates/deployment.yaml Outdated Show resolved Hide resolved
volumeMounts:
{{- if $.Values.secretConfiguration.enabled }}
- name: secrets
mountPath: {{ tpl $.Values.secretConfiguration.mountPath $ }}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Secrets should not be shared across the main container and sidecar. They should only be readable to containers that need them in order to reduce the risk of compromise. Most of the time (when running a webhook provider) only the webhook sidecar will need secrets, though there are a few obscure sources that could need secrets.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of the time (when running a webhook provider) only the webhook sidecar will need secrets.

Oh That's right !
🤔 Wdyt then about mounting the secret only on external-dns for in-tree provider and only on the sidecar for webhook providers ?
cc @stevehipwell @mrueg

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would be strongly in favour of not supporting secretConfiguration for the webhook sidecar as secrets should preferably be managed outside of the Helm chart and then interacted with via the extraVolumes & extraVolumeMounts values.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cloudfoundry source takes a password, but I suppose that can only come in through args, not a mounted secret. So perhaps we could say it would be unlikely for a future source to require a mounted secret.

I wouldn't want to have secretConfiguration only work for in-tree providers. That would be an odd discontinuity.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added specific extraVolumeMounts for sidecar with 9109597

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still don't think we should be explicitly using secretConfiguration here, the secret COULD be mounted by the extraVolumeMounts but we should be recommending external secrets be used if needed.

charts/external-dns/templates/deployment.yaml Outdated Show resolved Hide resolved
charts/external-dns/templates/deployment.yaml Outdated Show resolved Hide resolved
@mloiseleur mloiseleur changed the title BREAKING CHANGE: 💥 support webhook provider in Chart feat: support webhook provider in Chart Nov 18, 2023
Copy link
Contributor

@stevehipwell stevehipwell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mloiseleur sorry it's taken me a while to get back to this. I've replied to some existing comments and then added an inline comment on the values. I'd like to get the values spec defined before reviewing anything else.

charts/external-dns/values.yaml Outdated Show resolved Hide resolved
@stevehipwell
Copy link
Contributor

A webhook outside the pod is explicitly not supported. That would require external-dns to support authenticating to the webhook, otherwise attackers could make changes to DNS by making requests directly to the webhook.

@johngmyers the docs only recommend using a sidecar and I can think of a number of configurations which would allow the webhook to run externally while still being secure.

Docs:

The ideal setup for providers is to run as a sidecar in the same pod of the ExternalDNS container, listening only on localhost. This is not strictly a requirement, but we do not recommend other setups.

@johngmyers
Copy link
Contributor

I would be in favor of modifying the docs to make a stronger statement.

Unless we add support for outbound authentication to the webhook provider, securing an externally-deployed provider would require something like a service mesh's network policy. It's complicated, likely to be left out, and deploying externally doesn't give any worthwhile advantages.

@mrueg
Copy link
Member

mrueg commented Nov 21, 2023

Unless we add support for outbound authentication to the webhook provider, securing an externally-deployed provider would require something like a service mesh's network policy. It's complicated, likely to be left out, and deploying externally doesn't give any worthwhile advantages.

If we default to tight coupling, we could add support for unix sockets and use a shared mount between external-dns and the provider.
CC: @Raffo if you have any thoughts?

@Raffo
Copy link
Contributor

Raffo commented Nov 21, 2023

I would be in favor of modifying the docs to make a stronger statement.

We can totally do that. I think it should be allow to go on the really hard path of running the webhook outside or the pod, but that should be strongly discouraged.

CC: @Raffo if you have any thoughts?

I don't think there's any need for now to support that. We only have to provide the right information IMO.

@mloiseleur
Copy link
Contributor Author

I updated values (and code) following review comments.
I'm unsure what to do about secret.
I'll update the VALUES.md once we have an agreement on values spec.

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>
@Raffo
Copy link
Contributor

Raffo commented Jan 4, 2024

@stevehipwell do you think we should have the other PR merged first? If so can we speed that up? Or can we instead merge this one first? The reason I am asking is that I am starting to think of the next release and we still don't have the chart out for v0.14.0 and I'd love to get that fixed.

@stevehipwell
Copy link
Contributor

@stevehipwell do you think we should have the other PR merged first?

@Raffo which PR is that?

Copy link
Contributor

@stevehipwell stevehipwell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mloiseleur I think we're down to two outstanding discussions; the provider.name value comment and the use of secretConfiguration within the webhook container.

CC @Raffo

charts/external-dns/values.yaml Outdated Show resolved Hide resolved
@mloiseleur
Copy link
Contributor Author

@mloiseleur I think we're down to two outstanding discussions; the provider.name value comment and the use of secretConfiguration within the webhook container.

CC @Raffo

I tried to fix the first point.
For the second point, I understood following previous comments that you would depreciate secret config in an other PR.
As soon as it's deprecated, I can then remove it in this PR.
Did I missed something ?

@stevehipwell
Copy link
Contributor

I tried to fix the first point.
For the second point, I understood following #4032 (comment) that you would depreciate secret config in an other PR.
As soon as it's deprecated, I can then remove it in this PR.
Did I missed something ?

@mloiseleur I think we got out of sync on this; I was assuming we'd get this PR merged and then I'd do the deprecation and any other tidy up in a PR before we release.

@Raffo
Copy link
Contributor

Raffo commented Jan 4, 2024

Can we get this merged now that the confusion has been clarified?

@stevehipwell
Copy link
Contributor

@Raffo I think we can merge this once the value comment commit is on this branch. I'd prefer to also remove the secretConfiguration config from the webhook container on this branch so it never hits master but I could remove this afterwards as part of the deprecation if required.

@Raffo
Copy link
Contributor

Raffo commented Jan 5, 2024

Cool. @mloiseleur are you OK to make the requested changes?

@mloiseleur
Copy link
Contributor Author

mloiseleur commented Jan 6, 2024

I think we can merge this once the value comment commit is on this branch.

@stevehipwell : I'm sorry, it seems I missed that. What is this "value comment" that I should add and commit ?

On my side, I prefer to merge it with consistency on secretConfiguration, knowing that you will remove both afterwards.

@stevehipwell
Copy link
Contributor

@stevehipwell : I'm sorry, it seems I missed that. What is this "value comment" that I should add and commit ?

@mloiseleur this was the commit you commented to me, and it looks like it's been applied to the branch.

I'm not comfortable merging something (webhook support for secretConfiguration) which is going to be removed before it's ever released and may lead to end-user confusion; so I've opened #4161 now to be merged before this PR.

@k8s-ci-robot k8s-ci-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jan 8, 2024
@k8s-ci-robot
Copy link
Contributor

PR needs rebase.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@mloiseleur
Copy link
Contributor Author

@stevehipwell @Raffo This PR is ready for merge review.

@k8s-ci-robot k8s-ci-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jan 9, 2024
Copy link
Contributor

@stevehipwell stevehipwell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for all of your work on this @mloiseleur.

/approve
/label tide/merge-method-squash

@k8s-ci-robot k8s-ci-robot added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Jan 9, 2024
@stevehipwell
Copy link
Contributor

@Raffo there are non chart changes in the PR so I can't approve (I'll LGTM instead).

/lgtm

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Jan 9, 2024
@stevehipwell
Copy link
Contributor

@appkins once this is merged could you can rebase and squash #4073 so we can release the chart? Remember the CHANGELOG items need to be copied through to the chart annotations.

@Raffo
Copy link
Contributor

Raffo commented Jan 9, 2024

/approve

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: Raffo, stevehipwell

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jan 9, 2024
@k8s-ci-robot k8s-ci-robot merged commit 0009a6b into kubernetes-sigs:master Jan 9, 2024
15 checks passed
@mloiseleur mloiseleur deleted the feat/webhook-chart branch January 9, 2024 15:04
pull bot pushed a commit to 6ixfalls/external-dns that referenced this pull request Jan 14, 2024
* BREAKING CHANGE: 💥 support webhook provider in Chart

* add /healthz to webhook tutorial

* keep backward compatibility

* moved images to values

* Update charts/external-dns/values.yaml

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>

* fixed name for sidecar + doc update + externalVolumeMounts

* add serviceMonitor endpoint, improve webhook provider tutorial and differentiate probes

* doc: use helm-docs for README

* fix rebase error

* Apply suggestions from code review

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>

* introduce external-dns.webhookImage to match current image function

* fix port name of probes

* update template with webhook provider support

* Apply suggestions from code review

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>

* Update charts/external-dns/templates/deployment.yaml

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>

* Update charts/external-dns/templates/deployment.yaml

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>

* following review on provider.name doc

* remove secretConfiguration on webhook

---------

Co-authored-by: Steve Hipwell <steve.hipwell@gmail.com>
truecharts-admin added a commit to truecharts/charts that referenced this pull request Mar 22, 2024
…rnal-dns to v0.14.1@7bb4c52 by renovate (#19644)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[registry.k8s.io/external-dns/external-dns](https://github.com/kubernetes-sigs/external-dns)
| patch | `v0.14.0` -> `v0.14.1` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>kubernetes-sigs/external-dns
(registry.k8s.io/external-dns/external-dns)</summary>

###
[`v0.14.1`](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.14.1)

[Compare
Source](https://github.com/kubernetes-sigs/external-dns/compare/v0.14.0...v0.14.1)

#### What's Changed

- docs: add reference to adguard webhook provider by
[@&#8203;muhlba91](https://github.com/muhlba91) in
[kubernetes-sigs/external-dns#4030
- Update azure.md by [@&#8203;sesoldi](https://github.com/sesoldi) in
[kubernetes-sigs/external-dns#4009
- add initial support for gw apis 1.0.0 GA by
[@&#8203;larivierec](https://github.com/larivierec) in
[kubernetes-sigs/external-dns#4019
- build(deps): bump the dev-dependencies group with 3 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4028
- add stackit webhook to readme by
[@&#8203;PatrickKoss](https://github.com/PatrickKoss) in
[kubernetes-sigs/external-dns#4029
- Add org.opencontainers.image.source label to container image by
[@&#8203;robinschneider](https://github.com/robinschneider) in
[kubernetes-sigs/external-dns#4022
- bump kustomize version to v0.14.0 by
[@&#8203;Raffo](https://github.com/Raffo) in
[kubernetes-sigs/external-dns#4024
- OCI Provider private zone and workload identity support by
[@&#8203;anders-swanson](https://github.com/anders-swanson) in
[kubernetes-sigs/external-dns#3995
- RFC2136: Allow multiple zones by
[@&#8203;CRASH-Tech](https://github.com/CRASH-Tech) in
[kubernetes-sigs/external-dns#3976
- chore(chart): Updated GH workflows by
[@&#8203;stevehipwell](https://github.com/stevehipwell) in
[kubernetes-sigs/external-dns#4010
- fix: dynamodb registry when statements over 25 by
[@&#8203;danie1sullivan](https://github.com/danie1sullivan) in
[kubernetes-sigs/external-dns#4021
- Allow to configure revisionHistoryLimit on the K8s Deployment resource
by [@&#8203;arnisoph](https://github.com/arnisoph) in
[kubernetes-sigs/external-dns#4008
- chore: Bump kingpin/v2 dep by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4033
- Update all image versions in documentation by
[@&#8203;Raffo](https://github.com/Raffo) in
[kubernetes-sigs/external-dns#4037
- updated various broken link in ultradns tutorial by
[@&#8203;kundan2707](https://github.com/kundan2707) in
[kubernetes-sigs/external-dns#3794
- Make --ignore-hostname-annotation flag more consistent by
[@&#8203;johngmyers](https://github.com/johngmyers) in
[kubernetes-sigs/external-dns#3964
- service source uses externalIPs in ExternalName type if available by
[@&#8203;dromie](https://github.com/dromie) in
[kubernetes-sigs/external-dns#4007
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4046
- fix(google): ensure trailing dot for SRV records by
[@&#8203;siliconsheep](https://github.com/siliconsheep) in
[kubernetes-sigs/external-dns#4048
- oracle provider: dns zone cache by
[@&#8203;anders-swanson](https://github.com/anders-swanson) in
[kubernetes-sigs/external-dns#4049
- fix(httpProxy): drop status==valid filter by
[@&#8203;nefelim4ag](https://github.com/nefelim4ag) in
[kubernetes-sigs/external-dns#3978
- doc: added --infoblox-view argument to Infoblox documentation by
[@&#8203;tanerm](https://github.com/tanerm) in
[kubernetes-sigs/external-dns#4036
- fix: regression on scaleway provider in 0.14.0 by
[@&#8203;M0NsTeRRR](https://github.com/M0NsTeRRR) in
[kubernetes-sigs/external-dns#4039
- Add GleSYS to the readme for webhooks by
[@&#8203;glesys-andreas](https://github.com/glesys-andreas) in
[kubernetes-sigs/external-dns#4054
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4057
- feat: make webhook httpapi reusable by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4065
- Make routegroup client IPv6 compatible by
[@&#8203;mikkeloscar](https://github.com/mikkeloscar) in
[kubernetes-sigs/external-dns#4068
- doc: fix link to ionos webhook provider by
[@&#8203;akrieg-ionos](https://github.com/akrieg-ionos) in
[kubernetes-sigs/external-dns#4031
- feat(chart): Added complex provider support by
[@&#8203;stevehipwell](https://github.com/stevehipwell) in
[kubernetes-sigs/external-dns#4085
- chore: update 45 go modules dependancies by
[@&#8203;mloiseleur](https://github.com/mloiseleur) in
[kubernetes-sigs/external-dns#4088
- webhook: Move httpapi into own package by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4084
- doc: Add netcup webhook provider by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4095
- build(deps): bump the dev-dependencies group with 3 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4097
- update to add il-central-1 by
[@&#8203;theloneexplorerquest](https://github.com/theloneexplorerquest)
in
[kubernetes-sigs/external-dns#4093
- Add readme bizflycloud webhook provider by
[@&#8203;huyduong2792](https://github.com/huyduong2792) in
[kubernetes-sigs/external-dns#4079
- fix: Allow revisionHistoryLimit to be set to 0 by
[@&#8203;bodgit](https://github.com/bodgit) in
[kubernetes-sigs/external-dns#4053
- helm: Avoid unnecessary pod restart on each helm chart version by
[@&#8203;jkroepke](https://github.com/jkroepke) in
[kubernetes-sigs/external-dns#4103
- Correct typo from 'Kuberntes' to 'Kubernetes' by
[@&#8203;jongwooo](https://github.com/jongwooo) in
[kubernetes-sigs/external-dns#4118
- build(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4123
- cleanup: remove dead code (`(Create|Update|Delete)Records` functions
in AWS, Google, DNSimple) by
[@&#8203;mloiseleur](https://github.com/mloiseleur) in
[kubernetes-sigs/external-dns#4129
- ci: remove `confusing-naming` property by
[@&#8203;PascalBourdier](https://github.com/PascalBourdier) in
[kubernetes-sigs/external-dns#4116
- chore: fix code comment by
[@&#8203;tanujd11](https://github.com/tanujd11) in
[kubernetes-sigs/external-dns#4131
- fix: include cloudflare error in metrics and logs by
[@&#8203;danie1sullivan](https://github.com/danie1sullivan) in
[kubernetes-sigs/external-dns#4082
- gateway-api: fix wildcard matching by
[@&#8203;abursavich](https://github.com/abursavich) in
[kubernetes-sigs/external-dns#4124
- build(deps): bump the dev-dependencies group with 23 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4134
- Hetzner webhook provider readme link by
[@&#8203;mconfalonieri](https://github.com/mconfalonieri) in
[kubernetes-sigs/external-dns#4051
- Fix timeout for traefik-proxy source by
[@&#8203;k8r-io](https://github.com/k8r-io) in
[kubernetes-sigs/external-dns#4076
- build(deps): bump the dev-dependencies group with 7 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4144
- fix: remove useless functions by
[@&#8203;PascalBourdier](https://github.com/PascalBourdier) in
[kubernetes-sigs/external-dns#4115
- fix(ambassador): don't resolve LB hostname by
[@&#8203;fad3t](https://github.com/fad3t) in
[kubernetes-sigs/external-dns#4092
- doc(azure): shows how to use userAssignedIdentityID with clientId in
azure.json by [@&#8203;thesse1](https://github.com/thesse1) in
[kubernetes-sigs/external-dns#4133
- build(deps): bump the dev-dependencies group with 4 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4146
- webhook: Fix metric name and add request gauges by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4078
- build(deps): bump the dev-dependencies group with 2 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4145
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4154
- fix: heritage txt record was not able to be created for txt record by
[@&#8203;tanujd11](https://github.com/tanujd11) in
[kubernetes-sigs/external-dns#4140
- build(deps): bump the dev-dependencies group with 9 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4155
- fix(istio): support for ExternalIPs in Istio resources by
[@&#8203;KarstenSiemer](https://github.com/KarstenSiemer) in
[kubernetes-sigs/external-dns#4094
- Update rfc2136 provider to split out changes per zone by
[@&#8203;gregsidelinger](https://github.com/gregsidelinger) in
[kubernetes-sigs/external-dns#4107
- Exoscale provider optimization by
[@&#8203;kobajagi](https://github.com/kobajagi) in
[kubernetes-sigs/external-dns#4071
- fix: godaddy - rate limiter add one token every second by
[@&#8203;nefelim4ag](https://github.com/nefelim4ag) in
[kubernetes-sigs/external-dns#4087
- feat(helm-chart): Allow configuration of ipFamilyPolicy by
[@&#8203;dongjiang1989](https://github.com/dongjiang1989) in
[kubernetes-sigs/external-dns#4153
- chore(chart): Deprecated secretConfiguration by
[@&#8203;stevehipwell](https://github.com/stevehipwell) in
[kubernetes-sigs/external-dns#4161
- feat: support webhook provider in Chart by
[@&#8203;mloiseleur](https://github.com/mloiseleur) in
[kubernetes-sigs/external-dns#4032
- feat(helm-chart): Released chart for v0.14.0 by
[@&#8203;appkins](https://github.com/appkins) in
[kubernetes-sigs/external-dns#4073
- chore(chart): Fixed chart changelog by
[@&#8203;stevehipwell](https://github.com/stevehipwell) in
[kubernetes-sigs/external-dns#4168
- fix(pdns): provider implicitly changes CNAME to ALIAS by
[@&#8203;tmaroschik](https://github.com/tmaroschik) in
[kubernetes-sigs/external-dns#4162
- fix(chart): Fix webhook install failure by
[@&#8203;gabe565](https://github.com/gabe565) in
[kubernetes-sigs/external-dns#4173
- fix: provide possibility to have a soft error mode by
[@&#8203;szuecs](https://github.com/szuecs) in
[kubernetes-sigs/external-dns#4166
- \[helm] Allow tpl in provider again by
[@&#8203;jkroepke](https://github.com/jkroepke) in
[kubernetes-sigs/external-dns#4180
- Fix args for webhook deployment by
[@&#8203;webwurst](https://github.com/webwurst) in
[kubernetes-sigs/external-dns#4202
- add RBAC fix to namespaces - get, watch, list to each gateway-\*route
by [@&#8203;orenlevi111](https://github.com/orenlevi111) in
[kubernetes-sigs/external-dns#4205
- chore: Released chart v1.14.3 by
[@&#8203;stevehipwell](https://github.com/stevehipwell) in
[kubernetes-sigs/external-dns#4208
- build(deps): bump the dev-dependencies group with 24 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4227
- Fix "workload identity" spelling by
[@&#8203;gdubicki](https://github.com/gdubicki) in
[kubernetes-sigs/external-dns#4201
- feat(aws-provider): create flag to support sub-domains match parent by
[@&#8203;thiagoluiznunes](https://github.com/thiagoluiznunes) in
[kubernetes-sigs/external-dns#4236
- Change coredns testing to fix failing tests by
[@&#8203;pascalgn](https://github.com/pascalgn) in
[kubernetes-sigs/external-dns#4245
- Validate AWS record values size during batch set generation by
[@&#8203;megum1n](https://github.com/megum1n) in
[kubernetes-sigs/external-dns#4126
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4222
- build(deps): bump the dev-dependencies group with 13 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4246
- Update link to current workshop by
[@&#8203;AndrewCharlesHay](https://github.com/AndrewCharlesHay) in
[kubernetes-sigs/external-dns#4170
- cleanup: Drop additional docker files by
[@&#8203;mrueg](https://github.com/mrueg) in
[kubernetes-sigs/external-dns#4182
- chore: update the slack channel URL into the github support template
by [@&#8203;angegar](https://github.com/angegar) in
[kubernetes-sigs/external-dns#3815
- add soft error by
[@&#8203;jeanfrancoislelezec](https://github.com/jeanfrancoislelezec)
in
[kubernetes-sigs/external-dns#4199
- Fix Gateway API TLS TCP Route by
[@&#8203;zs-ko](https://github.com/zs-ko) in
[kubernetes-sigs/external-dns#4213
- Update the OCI Provider to incorporate SoftError to avoid
CrashLoopBackoff by [@&#8203;jrosinsk](https://github.com/jrosinsk) in
[kubernetes-sigs/external-dns#4229
- Add Gcore provider on readme by
[@&#8203;kokizzu](https://github.com/kokizzu) in
[kubernetes-sigs/external-dns#4256
- feat: enable Azure subscription ID override by
[@&#8203;pascalgn](https://github.com/pascalgn) in
[kubernetes-sigs/external-dns#4186
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4254
- feat: allow setting dnsConfig by
[@&#8203;davhdavh](https://github.com/davhdavh) in
[kubernetes-sigs/external-dns#4265
- build(deps): bump the dev-dependencies group with 17 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4270
- build(deps): bump the dev-dependencies group with 1 update by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4269
- build(deps): bump the dev-dependencies group with 6 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4279
- docs: 📝 add Azure DNS w/workload identity blog post to readme by
[@&#8203;krukowskid](https://github.com/krukowskid) in
[kubernetes-sigs/external-dns#4248
- feat(gandi): add support for personal access token by
[@&#8203;deadlybore](https://github.com/deadlybore) in
[kubernetes-sigs/external-dns#4249
- RFC2136: Add support for DNS-over-TLS by
[@&#8203;iteratee](https://github.com/iteratee) in
[kubernetes-sigs/external-dns#3974
- Fixing NAPTR support by
[@&#8203;jstudler](https://github.com/jstudler) in
[kubernetes-sigs/external-dns#4212
- doc: explain how to use Azure internal load balancer by
[@&#8203;mloiseleur](https://github.com/mloiseleur) in
[kubernetes-sigs/external-dns#4252
- fix(aws): allow alias records to be created when using the alias
annotation by [@&#8203;papayakiwi](https://github.com/papayakiwi) in
[kubernetes-sigs/external-dns#4178
- fix(service): omit nil endpoints and prefer endpointsForHostname() by
[@&#8203;yurrriq](https://github.com/yurrriq) in
[kubernetes-sigs/external-dns#4293
- chore: update maintainers by
[@&#8203;mloiseleur](https://github.com/mloiseleur) in
[kubernetes-sigs/external-dns#4304
- build(deps): bump the dev-dependencies group with 21 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4307
- build(deps): bump the dev-dependencies group with 6 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4312
- feat(ambassador): add support for provider specific annotations by
[@&#8203;fad3t](https://github.com/fad3t) in
[kubernetes-sigs/external-dns#4120
- build(deps): bump the dev-dependencies group with 8 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4313
- build(deps): bump the dev-dependencies group with 2 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4314
- build(deps): bump the dev-dependencies group with 14 updates by
[@&#8203;dependabot](https://github.com/dependabot) in
[kubernetes-sigs/external-dns#4321

#### Docker image

    registry.k8s.io/external-dns/external-dns:v0.14.0

#### New Contributors

- [@&#8203;muhlba91](https://github.com/muhlba91) made their first
contribution in
[kubernetes-sigs/external-dns#4030
- [@&#8203;sesoldi](https://github.com/sesoldi) made their first
contribution in
[kubernetes-sigs/external-dns#4009
- [@&#8203;larivierec](https://github.com/larivierec) made their first
contribution in
[kubernetes-sigs/external-dns#4019
- [@&#8203;PatrickKoss](https://github.com/PatrickKoss) made their
first contribution in
[kubernetes-sigs/external-dns#4029
- [@&#8203;robinschneider](https://github.com/robinschneider) made
their first contribution in
[kubernetes-sigs/external-dns#4022
- [@&#8203;anders-swanson](https://github.com/anders-swanson) made
their first contribution in
[kubernetes-sigs/external-dns#3995
- [@&#8203;CRASH-Tech](https://github.com/CRASH-Tech) made their first
contribution in
[kubernetes-sigs/external-dns#3976
- [@&#8203;danie1sullivan](https://github.com/danie1sullivan) made
their first contribution in
[kubernetes-sigs/external-dns#4021
- [@&#8203;arnisoph](https://github.com/arnisoph) made their first
contribution in
[kubernetes-sigs/external-dns#4008
- [@&#8203;dromie](https://github.com/dromie) made their first
contribution in
[kubernetes-sigs/external-dns#4007
- [@&#8203;siliconsheep](https://github.com/siliconsheep) made their
first contribution in
[kubernetes-sigs/external-dns#4048
- [@&#8203;tanerm](https://github.com/tanerm) made their first
contribution in
[kubernetes-sigs/external-dns#4036
- [@&#8203;glesys-andreas](https://github.com/glesys-andreas) made
their first contribution in
[kubernetes-sigs/external-dns#4054
- [@&#8203;akrieg-ionos](https://github.com/akrieg-ionos) made their
first contribution in
[kubernetes-sigs/external-dns#4031
-
[@&#8203;theloneexplorerquest](https://github.com/theloneexplorerquest)
made their first contribution in
[kubernetes-sigs/external-dns#4093
- [@&#8203;huyduong2792](https://github.com/huyduong2792) made their
first contribution in
[kubernetes-sigs/external-dns#4079
- [@&#8203;tanujd11](https://github.com/tanujd11) made their first
contribution in
[kubernetes-sigs/external-dns#4131
- [@&#8203;mconfalonieri](https://github.com/mconfalonieri) made their
first contribution in
[kubernetes-sigs/external-dns#4051
- [@&#8203;k8r-io](https://github.com/k8r-io) made their first
contribution in
[kubernetes-sigs/external-dns#4076
- [@&#8203;thesse1](https://github.com/thesse1) made their first
contribution in
[kubernetes-sigs/external-dns#4133
- [@&#8203;dongjiang1989](https://github.com/dongjiang1989) made their
first contribution in
[kubernetes-sigs/external-dns#4153
- [@&#8203;appkins](https://github.com/appkins) made their first
contribution in
[kubernetes-sigs/external-dns#4073
- [@&#8203;tmaroschik](https://github.com/tmaroschik) made their first
contribution in
[kubernetes-sigs/external-dns#4162
- [@&#8203;gabe565](https://github.com/gabe565) made their first
contribution in
[kubernetes-sigs/external-dns#4173
- [@&#8203;webwurst](https://github.com/webwurst) made their first
contribution in
[kubernetes-sigs/external-dns#4202
- [@&#8203;orenlevi111](https://github.com/orenlevi111) made their
first contribution in
[kubernetes-sigs/external-dns#4205
- [@&#8203;gdubicki](https://github.com/gdubicki) made their first
contribution in
[kubernetes-sigs/external-dns#4201
- [@&#8203;thiagoluiznunes](https://github.com/thiagoluiznunes) made
their first contribution in
[kubernetes-sigs/external-dns#4236
- [@&#8203;AndrewCharlesHay](https://github.com/AndrewCharlesHay) made
their first contribution in
[kubernetes-sigs/external-dns#4170
- [@&#8203;angegar](https://github.com/angegar) made their first
contribution in
[kubernetes-sigs/external-dns#3815
-
[@&#8203;jeanfrancoislelezec](https://github.com/jeanfrancoislelezec)
made their first contribution in
[kubernetes-sigs/external-dns#4199
- [@&#8203;zs-ko](https://github.com/zs-ko) made their first
contribution in
[kubernetes-sigs/external-dns#4213
- [@&#8203;kokizzu](https://github.com/kokizzu) made their first
contribution in
[kubernetes-sigs/external-dns#4256
- [@&#8203;davhdavh](https://github.com/davhdavh) made their first
contribution in
[kubernetes-sigs/external-dns#4265
- [@&#8203;krukowskid](https://github.com/krukowskid) made their first
contribution in
[kubernetes-sigs/external-dns#4248
- [@&#8203;deadlybore](https://github.com/deadlybore) made their first
contribution in
[kubernetes-sigs/external-dns#4249
- [@&#8203;iteratee](https://github.com/iteratee) made their first
contribution in
[kubernetes-sigs/external-dns#3974
- [@&#8203;jstudler](https://github.com/jstudler) made their first
contribution in
[kubernetes-sigs/external-dns#4212
- [@&#8203;papayakiwi](https://github.com/papayakiwi) made their first
contribution in
[kubernetes-sigs/external-dns#4178
- [@&#8203;yurrriq](https://github.com/yurrriq) made their first
contribution in
[kubernetes-sigs/external-dns#4293

**Full Changelog**:
kubernetes-sigs/external-dns@v0.14.0...v0.14.1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Release chart for v0.14.0
7 participants