Prevent ACME challenge TXT records from being left behind in CloudDNS#8456
Conversation
Signed-off-by: naoki-take <naoki-take@cybozu.co.jp>
|
Hi @tkna. Thanks for your PR. I'm waiting for a cert-manager member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. DetailsInstructions 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-sigs/prow repository. |
|
@tkna thank you for raising this PR. This PR does help alleviate some of the problem since filtering specific results would often not result in a lot of results but looking at the documentation it seems like the filters don't specifically prevent pagination. Correct me if I am wrong on this since I am not super specific about google's SDK. |
|
I am pretty sure these changes won't fully resolve #3640, so I have updated the description from "fixes" to "relates to"to avoid the issue being closed prematurely. |
|
@hjoshi123 $ cat rrset.json
{
"name": "example.our-zone.our-domain.",
"type": "TXT",
"ttl": 300,
"rrdatas": [
"example"
],
}
$ curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://dns.googleapis.com/dns/v1/projects/our-project/managedZones/our-zone/rrsets -d @rrset.json
{
"name": "example.our-zone.our-domain.",
"type": "TXT",
"ttl": 300,
"rrdatas": [
"\"example\""
],
"signatureRrdatas": [],
"kind": "dns#resourceRecordSet"
}
$ curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://dns.googleapis.com/dns/v1/projects/our-project/managedZones/our-zone/rrsets -d @rrset.json
{
"error": {
"code": 409,
"message": "The resource 'entity.rrset' named 'example.our-zone.our-domain. (TXT)' already exists",
"errors": [
{
"message": "The resource 'entity.rrset' named 'example.our-zone.our-domain. (TXT)' already exists",
"domain": "global",
"reason": "alreadyExists"
}
]
}
}
$Related to this, the existing code (example) seems to assume that multiple records may be returned, but I'm not sure why. I can refactor it if needed. If the concern is that the name/type filters might be applied only to the first 1,000 records, here are my test results from our environment with more than 1,000 records. Our "helloworld" record is not found without any filters, but it is found when using the name/type filter. (From my testing, the order of the returned list appears to be stable across requests) $ curl -s -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://dns.googleapis.com/dns/v1/projects/our-project/managedZones/our-zone/rrsets" | jq '.rrsets | length'
1000
$ curl -s -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://dns.googleapis.com/dns/v1/projects/our-project/managedZones/our-zone/rrsets" | jq '.rrsets[].name' | grep "helloworld"
$ curl -s -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://dns.googleapis.com/dns/v1/projects/our-project/managedZones/our-zone/rrsets?name=_acme-challenge.helloworld.our-zone.our-domain.&type=TXT"
{
"rrsets": [
{
"name": "_acme-challenge.helloworld.our-zone.our-domain.",
"type": "TXT",
"ttl": 60,
"rrdatas": [
(snip)
],
"signatureRrdatas": [],
"kind": "dns#resourceRecordSet"
}
],
"kind": "dns#resourceRecordSetsListResponse"
}
$ |
|
Thank you for clearing that up @tkna.. those details really help.. it also seems we do this in Present in some form So this might also be better to have an uniform approach.. As erik said the issue I think also exists with other providers so this PR will not fix those and hence the relates makes sense. /ok-to-test |
|
This PR seems safe enough to merge given that it doesn't introduce anything new that we already dont do in /lgtm |
|
/cc @erikgb |
There was a problem hiding this comment.
Pull request overview
This PR fixes an issue where ACME challenge TXT records were not being cleaned up in Google Cloud DNS when the total number of resource records in a zone exceeded 1000. The root cause was that the Cloud DNS API's resourceRecordSets.list method returns a maximum of 1000 records per request without pagination, and the code wasn't handling this limitation.
Changes:
- Added
Name()andType()filters to the Cloud DNS API call infindTxtRecords()to query only the specific TXT record by name - Simplified the loop logic by removing redundant type and name checks, since filtering is now done at the API level
- This ensures ACME challenge records are found and cleaned up regardless of the total number of records in the zone
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
erikgb
left a comment
There was a problem hiding this comment.
Thanks @tkna! And @hjoshi123 for the review" 🚀
/approve
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: erikgb The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
22f39b3
into
cert-manager:master
…#4581) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [cert-manager/cert-manager](https://github.com/cert-manager/cert-manager) | minor | `v1.19.4` → `v1.20.0` | --- ### Release Notes <details> <summary>cert-manager/cert-manager (cert-manager/cert-manager)</summary> ### [`v1.20.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.20.0) [Compare Source](cert-manager/cert-manager@v1.19.4...v1.20.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. v1.20.0 adds support for the new ListenerSet resource, adds support for Azure Private DNS; parentRefs are no longer required when using ACME with Gateway API, and OtherNames was promoted to Beta. #### Changes by Kind ##### Feature - Added a set of flags to permit setting NetworkPolicy across all deployed containers. Remove redundant global IP ranges from example policies. ([#​8370](cert-manager/cert-manager#8370), [@​jcpunk](https://github.com/jcpunk)) - Added selectable fields to custom resource definitions for .spec.issuerRef.{group, kind, name} ([#​8256](cert-manager/cert-manager#8256), [@​tareksha](https://github.com/tareksha)) - Added support for specifying `imagePullSecrets` in the `startupapicheck-job` Helm template to enable pulling images from private registries. ([#​8186](cert-manager/cert-manager#8186), [@​mathieu-clnk](https://github.com/mathieu-clnk)) - Added 'extraContainers' helm chart value, allowing the deployment of arbitrary sidecar containers within the cert-manager operator pod. This can be used to support, for e.g., AWS IAM Roles Anywhere for Route53 DNS01 verification. ([#​8355](cert-manager/cert-manager#8355), [@​dancmeyers](https://github.com/dancmeyers)) - Added `parentRef` override annotations on the Certificate resource. ([#​8518](cert-manager/cert-manager#8518), [@​hjoshi123](https://github.com/hjoshi123)) - Added support for azure private zones for dns01 issuer. ([#​8494](cert-manager/cert-manager#8494), [@​hjoshi123](https://github.com/hjoshi123)) - Added support for configuring PEM decoding size limits, allowing operators to handle larger certificates and keys. ([#​7642](cert-manager/cert-manager#7642), [@​robertlestak](https://github.com/robertlestak)) - Added support for unhealthyPodEvictionPolicy in PodDisruptionBudget ([#​7728](cert-manager/cert-manager#7728), [@​jcpunk](https://github.com/jcpunk)) - For Venafi provider, read `venafi.cert-manager.io/custom-fields` annotation on Issuer/ClusterIssuer and use it as base with override/append capabilities on Certificate level. ([#​8301](cert-manager/cert-manager#8301), [@​k0da](https://github.com/k0da)) - Improve error message when CA issuers are misconfigured to use a clashing secret name ([#​8374](cert-manager/cert-manager#8374), [@​majiayu000](https://github.com/majiayu000)) - Introduce a new Ingress annotation `acme.cert-manager.io/http01-ingress-ingressclassname` to override `http01.ingress.ingressClassName` field in HTTP-01 challenge solvers. ([#​8244](cert-manager/cert-manager#8244), [@​lunarwhite](https://github.com/lunarwhite)) - Update `global.nodeSelector` to helm chart to perform a `merge` and allow for a single `nodeSelector` to be set across all services. ([#​8195](cert-manager/cert-manager#8195), [@​StingRayZA](https://github.com/StingRayZA)) - Vault issuers will now include the Vault server address as one of the default audiences on generated service account tokens. ([#​8228](cert-manager/cert-manager#8228), [@​terinjokes](https://github.com/terinjokes)) - Added experimental `XListenerSet` feature gate ([#​8394](cert-manager/cert-manager#8394), [@​hjoshi123](https://github.com/hjoshi123)) ##### Documentation - Add GWAPI documentation to NOTES.TXT in helm chart ([#​8353](cert-manager/cert-manager#8353), [@​jaxels10](https://github.com/jaxels10)) ##### Bug or Regression - Adds logs for cases when acme server returns us a fatal error in the order controller ([#​8199](cert-manager/cert-manager#8199), [@​Peac36](https://github.com/Peac36)) - Fixed an issue where kind or group in the issuerRef of a Certificate was omitted, upgrading to 1.19.x incorrectly caused the certificate to be renewed ([#​8160](cert-manager/cert-manager#8160), [@​inteon](https://github.com/inteon)) - Changes to the Duration and RenewBefore annotations on ingress and gateway-api resources will now trigger certificate updates. ([#​8232](cert-manager/cert-manager#8232), [@​eleanor-merry](https://github.com/eleanor-merry)) - Fix an issue where ACME challenge TXT records are not cleaned up when there are many resource records in CloudDNS. ([#​8456](cert-manager/cert-manager#8456), [@​tkna](https://github.com/tkna)) - Fix unregulated retries with the DigitalOcean DNS-01 solver Add full detailed DNS-01 errors to the events attached to the Challenge, for easier debugging ([#​8221](cert-manager/cert-manager#8221), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Fixed an infinite re-issuance loop that could occur when an issuer returns a certificate with a public key that doesn't match the CSR. The issuing controller now validates the certificate before storing it and fails with backoff on mismatch. ([#​8403](cert-manager/cert-manager#8403), [@​calm329](https://github.com/calm329)) - Fixed an issue where HTTP-01 challenges failed when the Host header contains an IPv6 address. This means that users can now issue IP address certificates for IPv6 address subjects. ([#​8424](cert-manager/cert-manager#8424), [@​SlashNephy](https://github.com/SlashNephy)) - Fixed the HTTP-01 Gateway solver creating invalid HTTPRoutes by not setting spec.hostnames when the challenge DNSName is an IP address. ([#​8443](cert-manager/cert-manager#8443), [@​alviss7](https://github.com/alviss7)) - Revert API defaults for issuer reference kind and group introduced in 0.19.0 ([#​8173](cert-manager/cert-manager#8173), [@​erikgb](https://github.com/erikgb)) - Security (MODERATE): Fix a potential panic in the cert-manager controller when a DNS response in an unexpected order was cached. If an attacker was able to modify DNS responses (or if they controlled the DNS server) it was possible to cause denial of service for the cert-manager controller. ([#​8469](cert-manager/cert-manager#8469), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Update Go to `v1.25.5` to fix `CVE-2025-61727` and `CVE-2025-61729` ([#​8290](cert-manager/cert-manager#8290), [@​octo-sts](https://github.com/octo-sts)\[bot]) - When Prometheus monitoring is enabled, the metrics label is now set to the intended value of `cert-manager`. Previously, it was set depending on various factors (namespace cert-manager is installed in and/or Helm release name). ([#​8162](cert-manager/cert-manager#8162), [@​LiquidPL](https://github.com/LiquidPL)) ##### Other (Cleanup or Flake) - Promoted the OtherNames feature to Beta and enabled it by default ([#​8288](cert-manager/cert-manager#8288), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Promoting `xlistenerset` feature gate to `listenerset` ([#​8501](cert-manager/cert-manager#8501), [@​hjoshi123](https://github.com/hjoshi123)) - Rebranding of the Venafi Issuer to CyberArk ([#​8215](cert-manager/cert-manager#8215), [@​iossifbenbassat123](https://github.com/iossifbenbassat123)) - Switched to SSA for challenge finalizer updates ([#​8519](cert-manager/cert-manager#8519), [@​inteon](https://github.com/inteon)) - The default container user (UID) is now 65532 (previously 1000) and the default container group (GID) is now 65532 (previously 0) ([#​8408](cert-manager/cert-manager#8408), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - The feature-gate DefaultPrivateKeyRotationPolicyAlways moved from Beta to GA and can no longer be disabled. ([#​8287](cert-manager/cert-manager#8287), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Update cert-manager's ACME client, forked from golang/x/crypto ([#​8268](cert-manager/cert-manager#8268), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Use the latest version of Kyverno (1.16.2) in the best-practice installation tests ([#​8389](cert-manager/cert-manager#8389), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - We stopped testing with Coutour due to it not supporting the new XListenerSet resource, and moved to kgateway. ([#​8426](cert-manager/cert-manager#8426), [@​hjoshi123](https://github.com/hjoshi123)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4581 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [cert-manager](https://cert-manager.io) ([source](https://github.com/cert-manager/cert-manager)) | minor | `v1.19.4` → `v1.20.0` | --- ### Release Notes <details> <summary>cert-manager/cert-manager (cert-manager)</summary> ### [`v1.20.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.20.0) [Compare Source](cert-manager/cert-manager@v1.19.4...v1.20.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. v1.20.0 adds support for the new ListenerSet resource, adds support for Azure Private DNS; parentRefs are no longer required when using ACME with Gateway API, and OtherNames was promoted to Beta. #### Changes by Kind ##### Feature - Added a set of flags to permit setting NetworkPolicy across all deployed containers. Remove redundant global IP ranges from example policies. ([#​8370](cert-manager/cert-manager#8370), [@​jcpunk](https://github.com/jcpunk)) - Added selectable fields to custom resource definitions for .spec.issuerRef.{group, kind, name} ([#​8256](cert-manager/cert-manager#8256), [@​tareksha](https://github.com/tareksha)) - Added support for specifying `imagePullSecrets` in the `startupapicheck-job` Helm template to enable pulling images from private registries. ([#​8186](cert-manager/cert-manager#8186), [@​mathieu-clnk](https://github.com/mathieu-clnk)) - Added 'extraContainers' helm chart value, allowing the deployment of arbitrary sidecar containers within the cert-manager operator pod. This can be used to support, for e.g., AWS IAM Roles Anywhere for Route53 DNS01 verification. ([#​8355](cert-manager/cert-manager#8355), [@​dancmeyers](https://github.com/dancmeyers)) - Added `parentRef` override annotations on the Certificate resource. ([#​8518](cert-manager/cert-manager#8518), [@​hjoshi123](https://github.com/hjoshi123)) - Added support for azure private zones for dns01 issuer. ([#​8494](cert-manager/cert-manager#8494), [@​hjoshi123](https://github.com/hjoshi123)) - Added support for configuring PEM decoding size limits, allowing operators to handle larger certificates and keys. ([#​7642](cert-manager/cert-manager#7642), [@​robertlestak](https://github.com/robertlestak)) - Added support for unhealthyPodEvictionPolicy in PodDisruptionBudget ([#​7728](cert-manager/cert-manager#7728), [@​jcpunk](https://github.com/jcpunk)) - For Venafi provider, read `venafi.cert-manager.io/custom-fields` annotation on Issuer/ClusterIssuer and use it as base with override/append capabilities on Certificate level. ([#​8301](cert-manager/cert-manager#8301), [@​k0da](https://github.com/k0da)) - Improve error message when CA issuers are misconfigured to use a clashing secret name ([#​8374](cert-manager/cert-manager#8374), [@​majiayu000](https://github.com/majiayu000)) - Introduce a new Ingress annotation `acme.cert-manager.io/http01-ingress-ingressclassname` to override `http01.ingress.ingressClassName` field in HTTP-01 challenge solvers. ([#​8244](cert-manager/cert-manager#8244), [@​lunarwhite](https://github.com/lunarwhite)) - Update `global.nodeSelector` to helm chart to perform a `merge` and allow for a single `nodeSelector` to be set across all services. ([#​8195](cert-manager/cert-manager#8195), [@​StingRayZA](https://github.com/StingRayZA)) - Vault issuers will now include the Vault server address as one of the default audiences on generated service account tokens. ([#​8228](cert-manager/cert-manager#8228), [@​terinjokes](https://github.com/terinjokes)) - Added experimental `XListenerSet` feature gate ([#​8394](cert-manager/cert-manager#8394), [@​hjoshi123](https://github.com/hjoshi123)) ##### Documentation - Add GWAPI documentation to NOTES.TXT in helm chart ([#​8353](cert-manager/cert-manager#8353), [@​jaxels10](https://github.com/jaxels10)) ##### Bug or Regression - Adds logs for cases when acme server returns us a fatal error in the order controller ([#​8199](cert-manager/cert-manager#8199), [@​Peac36](https://github.com/Peac36)) - Fixed an issue where kind or group in the issuerRef of a Certificate was omitted, upgrading to 1.19.x incorrectly caused the certificate to be renewed ([#​8160](cert-manager/cert-manager#8160), [@​inteon](https://github.com/inteon)) - Changes to the Duration and RenewBefore annotations on ingress and gateway-api resources will now trigger certificate updates. ([#​8232](cert-manager/cert-manager#8232), [@​eleanor-merry](https://github.com/eleanor-merry)) - Fix an issue where ACME challenge TXT records are not cleaned up when there are many resource records in CloudDNS. ([#​8456](cert-manager/cert-manager#8456), [@​tkna](https://github.com/tkna)) - Fix unregulated retries with the DigitalOcean DNS-01 solver Add full detailed DNS-01 errors to the events attached to the Challenge, for easier debugging ([#​8221](cert-manager/cert-manager#8221), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Fixed an infinite re-issuance loop that could occur when an issuer returns a certificate with a public key that doesn't match the CSR. The issuing controller now validates the certificate before storing it and fails with backoff on mismatch. ([#​8403](cert-manager/cert-manager#8403), [@​calm329](https://github.com/calm329)) - Fixed an issue where HTTP-01 challenges failed when the Host header contains an IPv6 address. This means that users can now issue IP address certificates for IPv6 address subjects. ([#​8424](cert-manager/cert-manager#8424), [@​SlashNephy](https://github.com/SlashNephy)) - Fixed the HTTP-01 Gateway solver creating invalid HTTPRoutes by not setting spec.hostnames when the challenge DNSName is an IP address. ([#​8443](cert-manager/cert-manager#8443), [@​alviss7](https://github.com/alviss7)) - Revert API defaults for issuer reference kind and group introduced in 0.19.0 ([#​8173](cert-manager/cert-manager#8173), [@​erikgb](https://github.com/erikgb)) - Security (MODERATE): Fix a potential panic in the cert-manager controller when a DNS response in an unexpected order was cached. If an attacker was able to modify DNS responses (or if they controlled the DNS server) it was possible to cause denial of service for the cert-manager controller. ([#​8469](cert-manager/cert-manager#8469), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Update Go to `v1.25.5` to fix `CVE-2025-61727` and `CVE-2025-61729` ([#​8290](cert-manager/cert-manager#8290), [@​octo-sts](https://github.com/octo-sts)\[bot]) - When Prometheus monitoring is enabled, the metrics label is now set to the intended value of `cert-manager`. Previously, it was set depending on various factors (namespace cert-manager is installed in and/or Helm release name). ([#​8162](cert-manager/cert-manager#8162), [@​LiquidPL](https://github.com/LiquidPL)) ##### Other (Cleanup or Flake) - Promoted the OtherNames feature to Beta and enabled it by default ([#​8288](cert-manager/cert-manager#8288), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Promoting `xlistenerset` feature gate to `listenerset` ([#​8501](cert-manager/cert-manager#8501), [@​hjoshi123](https://github.com/hjoshi123)) - Rebranding of the Venafi Issuer to CyberArk ([#​8215](cert-manager/cert-manager#8215), [@​iossifbenbassat123](https://github.com/iossifbenbassat123)) - Switched to SSA for challenge finalizer updates ([#​8519](cert-manager/cert-manager#8519), [@​inteon](https://github.com/inteon)) - The default container user (UID) is now 65532 (previously 1000) and the default container group (GID) is now 65532 (previously 0) ([#​8408](cert-manager/cert-manager#8408), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - The feature-gate DefaultPrivateKeyRotationPolicyAlways moved from Beta to GA and can no longer be disabled. ([#​8287](cert-manager/cert-manager#8287), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - Update cert-manager's ACME client, forked from golang/x/crypto ([#​8268](cert-manager/cert-manager#8268), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Use the latest version of Kyverno (1.16.2) in the best-practice installation tests ([#​8389](cert-manager/cert-manager#8389), [@​wallrj-cyberark](https://github.com/wallrj-cyberark)) - We stopped testing with Coutour due to it not supporting the new XListenerSet resource, and moved to kgateway. ([#​8426](cert-manager/cert-manager#8426), [@​hjoshi123](https://github.com/hjoshi123)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhcnQiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4582 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Pull Request Motivation
Relates to #3640
Cloud DNS’s
resourceRecordSets.listAPI returns only a fixed number of records per request (1000 at the time I checked).https://cloud.google.com/dns/docs/reference/rest/v1/resourceRecordSets/list
func (r *ResourceRecordSetsService) List(), which uses this API, therefore returns only the first 1000 records. As a result, ACME TXT records are not always cleaned up when the total number of resource records exceeds 1000.This PR fixes the issue by querying only the target record instead of listing all records, avoiding pagination.
Kind
/kind bug
Release Note