Skip to content

Add defaulting to Certificate - CertificateRequest comparison#8160

Merged
cert-manager-prow[bot] merged 3 commits intocert-manager:masterfrom
inteon:fix_compare
Oct 15, 2025
Merged

Add defaulting to Certificate - CertificateRequest comparison#8160
cert-manager-prow[bot] merged 3 commits intocert-manager:masterfrom
inteon:fix_compare

Conversation

@inteon
Copy link
Copy Markdown
Member

@inteon inteon commented Oct 10, 2025

This should prevent the unexpected renewals after upgrading to 1.19.x (see #8158).

How to test:

  1. install cert-manager 1.18.2 and create a certificate
  2. upgrade to cert-manager 1.19.0 (keep the CRDs @ 1.18.2)
  3. upgrade the CRDs to 1.19.0 (start with Certificate CRD)

Kind

/kind bug

Release Note

BUGFIX: in case kind or group in the issuerRef of a Certificate was omitted, upgrading to 1.19.x incorrectly caused the certificate to be renewed

CyberArk tracker: VC-46054

…ting mismatches when upgrading

Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com>
@cert-manager-prow cert-manager-prow bot added kind/bug Categorizes issue or PR as related to a bug. release-note Denotes a PR that will be considered when it comes time to generate release notes. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. labels Oct 10, 2025
@inteon inteon requested a review from erikgb October 10, 2025 10:28
@cert-manager-prow cert-manager-prow bot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Oct 10, 2025
Copy link
Copy Markdown
Member

@erikgb erikgb left a comment

Choose a reason for hiding this comment

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

Have you checked if this fixes #8158, @inteon?

/approve

@cert-manager-prow cert-manager-prow bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Oct 10, 2025
@inteon
Copy link
Copy Markdown
Member Author

inteon commented Oct 10, 2025

Have you checked if this fixes #8158, @inteon?

/approve

No, I have not had the time yet, could you verify?

@erikgb
Copy link
Copy Markdown
Member

erikgb commented Oct 10, 2025

Have you checked if this fixes #8158, @inteon?
/approve

No, I have not had the time yet, could you verify?

I have no idea on how to install/upgrade to a c-m version from a feature branch.

@erikgb erikgb requested a review from Copilot October 12, 2025 09:36
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes a bug where cert-manager 1.19.x incorrectly renewed certificates during upgrades when the issuerRef's kind or group fields were omitted in the original Certificate. The fix replaces a simple reflect.DeepEqual comparison with custom logic that handles default values for issuerRef fields.

  • Replaces reflect.DeepEqual with explicit field-by-field comparison for IssuerRef
  • Adds helper functions to handle default values for issuer kind and group fields
  • Removes unused reflect import

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Copy link
Copy Markdown
Member

@erikgb erikgb left a comment

Choose a reason for hiding this comment

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

Thanks, @inteon! Even if this issue doesn't fully resolve #8158, I think it's a good change. I also think we should cherry-pick this to the release-1.19 branch. Adding a hold in case you want to implement the suggestion from Copilot.

/lgtm
/approve
/hold
/cherry-pick release-1.19

@cert-manager-prow cert-manager-prow bot added do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. lgtm Indicates that a PR is ready to be merged. labels Oct 12, 2025
@maelvls maelvls added the cybr Used by CyberArk-employed maintainers to report to line management what's being worked on. label Oct 14, 2025
@maelvls
Copy link
Copy Markdown
Member

maelvls commented Oct 14, 2025

We plan on merging this fix before releasing v1.19.1, and backport it to v1.18.3. @wallrj proposed to work on this.

@cert-manager-prow cert-manager-prow bot added dco-signoff: no Indicates that at least one commit in this pull request is missing the DCO sign-off message. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed lgtm Indicates that a PR is ready to be merged. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Oct 14, 2025
@cert-manager-prow cert-manager-prow bot added dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. and removed dco-signoff: no Indicates that at least one commit in this pull request is missing the DCO sign-off message. labels Oct 14, 2025
@wallrj-cyberark
Copy link
Copy Markdown
Member

I've pushed the following changes to Tim's branch:

  • added some unit-tests
  • added explanatory comments.
  • documented the new default constants and used the same sources as are used in the CertificateRequest controller.

- Add TestRequestMatchesSpecIssuerRef covering name, kind, and group
- Include cases for defaulted Kind/Group vs empty fields in CRs
- Treat empty Kind/Group in CertificateRequest as 'Issuer' and
- 'cert-manager.io' to avoid re-issuing certificates after 1.19

Signed-off-by: Richard Wall <richard.wall@cyberark.com>
@wallrj-cyberark
Copy link
Copy Markdown
Member

We plan on merging this fix before releasing v1.19.1, and backport it to v1.18.3. @wallrj proposed to work on this.

This PR alone doesn't fix the problem. We think the original problem occurs when user upgrade to the 1.19 CRDs before upgrading the cert-manager controller causing the still running 1.18 controller to re-establish API watches and end up with inconsistent caches, where the cache contains Certificates that have the new API defaults, but CertificateRequests which have not yet been refreshed and do not have the new defaults.

@erikgb
Copy link
Copy Markdown
Member

erikgb commented Oct 14, 2025

We plan on merging this fix before releasing v1.19.1, and backport it to v1.18.3. @wallrj proposed to work on this.

This PR alone doesn't fix the problem. We think the original problem occurs when user upgrade to the 1.19 CRDs before upgrading the cert-manager controller causing the still running 1.18 controller to re-establish API watches and end up with inconsistent caches, where the cache contains Certificates that have the new API defaults, but CertificateRequests which have not yet been refreshed and do not have the new defaults.

I agree, but this PR will allow us to reintroduce the API defaults in a future release - if we want. I have created a PR to revert the problematic API defaults, #8173, and think we should merge both PRs and cherry-pick them to the 1.19 release branch. This PR can even be cherry-picked to the 1.18 release branch, as I think it also fixes a bug unrelated to the API defaulting problem.

})
}
}

Copy link
Copy Markdown
Member

@wallrj-cyberark wallrj-cyberark Oct 15, 2025

Choose a reason for hiding this comment

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

I cherry picked these new tests on top of #8173 and ran them to demonstrate the problem. Here's the output:

-*- mode: compilation; default-directory: "~/projects/cert-manager/cert-manager/pkg/util/pki/" -*-
Compilation started at Wed Oct 15 09:47:25

go test -run='TestRequestMatchesSpecIssuerRef$' 
--- FAIL: TestRequestMatchesSpecIssuerRef (0.69s)
    --- FAIL: TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest's_are_empty (0.00s)
        match_test.go:477: 
            	Error Trace:	/home/richard/projects/cert-manager/cert-manager/pkg/util/pki/match_test.go:477
            	Error:      	Not equal: 
            	            	expected: []string(nil)
            	            	actual  : []string{"spec.issuerRef"}
            	            	
            	            	Diff:
            	            	--- Expected
            	            	+++ Actual
            	            	@@ -1,2 +1,4 @@
            	            	-([]string) <nil>
            	            	+([]string) (len=1) {
            	            	+ (string) (len=14) "spec.issuerRef"
            	            	+}
            	            	 
            	Test:       	TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest's_are_empty
    --- FAIL: TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest_issuerRef_Group_is_empty (0.00s)
        match_test.go:477: 
            	Error Trace:	/home/richard/projects/cert-manager/cert-manager/pkg/util/pki/match_test.go:477
            	Error:      	Not equal: 
            	            	expected: []string(nil)
            	            	actual  : []string{"spec.issuerRef"}
            	            	
            	            	Diff:
            	            	--- Expected
            	            	+++ Actual
            	            	@@ -1,2 +1,4 @@
            	            	-([]string) <nil>
            	            	+([]string) (len=1) {
            	            	+ (string) (len=14) "spec.issuerRef"
            	            	+}
            	            	 
            	Test:       	TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest_issuerRef_Group_is_empty
    --- FAIL: TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest_issuerRef_Kind_is_empty (0.00s)
        match_test.go:477: 
            	Error Trace:	/home/richard/projects/cert-manager/cert-manager/pkg/util/pki/match_test.go:477
            	Error:      	Not equal: 
            	            	expected: []string(nil)
            	            	actual  : []string{"spec.issuerRef"}
            	            	
            	            	Diff:
            	            	--- Expected
            	            	+++ Actual
            	            	@@ -1,2 +1,4 @@
            	            	-([]string) <nil>
            	            	+([]string) (len=1) {
            	            	+ (string) (len=14) "spec.issuerRef"
            	            	+}
            	            	 
            	Test:       	TestRequestMatchesSpecIssuerRef/should_not_report_any_violation_if_Certificate_issuerRef_Kind_and_Group_are_defaulted_and_CertificateRequest_issuerRef_Kind_is_empty
FAIL
exit status 1
FAIL	github.com/cert-manager/cert-manager/pkg/util/pki	0.745s

Compilation exited abnormally with code 1 at Wed Oct 15 09:47:27, duration 2.48 s

// These defaults are also applied at runtime by the cert-manager
// CertificateRequest controller.
//
// TODO(wallrj): Move this runtime defaulting to `internal/apis/certmanager/v1/defaults.go`
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@erikgb Removed TODO comment as agreed during standup. I made my point. And we hope that in future the API defaults will be used. Not runtime defaults.

//
// ... to the API struct.
//
// TODO(wallrj): Set the issuerRef defaults here too.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Removed TODO comment as agreed during standup. I made my point. And we hope that in future the API defaults will be used. Not runtime defaults.

@wallrj wallrj requested a review from Copilot October 15, 2025 09:59
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.


Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

…esSpec

- Explain that IssuerRef comparisons ignore default group and kind
- Describe upgrades where CRD defaults can cause transient mismatches
- Document issuerKindsEqual and issuerGroupsEqual behavior
- Update test comment to describe the equivalence rationale

Signed-off-by: Richard Wall <richard.wall@cyberark.com>
Copy link
Copy Markdown
Member

@erikgb erikgb left a comment

Choose a reason for hiding this comment

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

/lgtm
/approve

Thanks for picking this up, @wallrj! And for the initial work, @inteon! 🚀

We should attempt an automated cherry-pick of this to a supported release branches.

@cert-manager-prow cert-manager-prow bot added the lgtm Indicates that a PR is ready to be merged. label Oct 15, 2025
@cert-manager-prow
Copy link
Copy Markdown
Contributor

[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

Details 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

@wallrj-cyberark
Copy link
Copy Markdown
Member

Thanks @erikgb

/unhold
/cherry-pick release-1.18
/cherry-pick release-1.19

@cert-manager-bot
Copy link
Copy Markdown
Contributor

@wallrj-cyberark: once the present PR merges, I will cherry-pick it on top of release-1.18, release-1.19 in new PRs and assign them to you.

Details

In response to this:

Thanks @erikgb

/unhold
/cherry-pick release-1.18
/cherry-pick release-1.19

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-sigs/prow repository.

@cert-manager-prow cert-manager-prow bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Oct 15, 2025
@cert-manager-prow cert-manager-prow bot merged commit 1514131 into cert-manager:master Oct 15, 2025
6 checks passed
@cert-manager-bot
Copy link
Copy Markdown
Contributor

@wallrj-cyberark: new pull request created: #8174

Details

In response to this:

Thanks @erikgb

/unhold
/cherry-pick release-1.18
/cherry-pick release-1.19

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-sigs/prow repository.

@cert-manager-bot
Copy link
Copy Markdown
Contributor

@wallrj-cyberark: new pull request created: #8175

Details

In response to this:

Thanks @erikgb

/unhold
/cherry-pick release-1.18
/cherry-pick release-1.19

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-sigs/prow repository.

alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 10, 2026
…#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. ([#&#8203;8370](cert-manager/cert-manager#8370), [@&#8203;jcpunk](https://github.com/jcpunk))
- Added selectable fields to custom resource definitions for .spec.issuerRef.{group, kind, name} ([#&#8203;8256](cert-manager/cert-manager#8256), [@&#8203;tareksha](https://github.com/tareksha))
- Added support for specifying `imagePullSecrets` in the `startupapicheck-job` Helm template to enable pulling images from private registries. ([#&#8203;8186](cert-manager/cert-manager#8186), [@&#8203;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. ([#&#8203;8355](cert-manager/cert-manager#8355), [@&#8203;dancmeyers](https://github.com/dancmeyers))
- Added `parentRef` override annotations on the Certificate resource. ([#&#8203;8518](cert-manager/cert-manager#8518), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Added support for azure private zones for dns01 issuer. ([#&#8203;8494](cert-manager/cert-manager#8494), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Added support for configuring PEM decoding size limits, allowing operators to handle larger certificates and keys. ([#&#8203;7642](cert-manager/cert-manager#7642), [@&#8203;robertlestak](https://github.com/robertlestak))
- Added support for unhealthyPodEvictionPolicy in PodDisruptionBudget ([#&#8203;7728](cert-manager/cert-manager#7728), [@&#8203;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. ([#&#8203;8301](cert-manager/cert-manager#8301), [@&#8203;k0da](https://github.com/k0da))
- Improve error message when CA issuers are misconfigured to use a clashing secret name ([#&#8203;8374](cert-manager/cert-manager#8374), [@&#8203;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. ([#&#8203;8244](cert-manager/cert-manager#8244), [@&#8203;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. ([#&#8203;8195](cert-manager/cert-manager#8195), [@&#8203;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. ([#&#8203;8228](cert-manager/cert-manager#8228), [@&#8203;terinjokes](https://github.com/terinjokes))
- Added experimental `XListenerSet` feature gate ([#&#8203;8394](cert-manager/cert-manager#8394), [@&#8203;hjoshi123](https://github.com/hjoshi123))

##### Documentation

- Add GWAPI documentation to NOTES.TXT in helm chart ([#&#8203;8353](cert-manager/cert-manager#8353), [@&#8203;jaxels10](https://github.com/jaxels10))

##### Bug or Regression

- Adds logs for cases when acme server returns us a fatal error in the order controller ([#&#8203;8199](cert-manager/cert-manager#8199), [@&#8203;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 ([#&#8203;8160](cert-manager/cert-manager#8160), [@&#8203;inteon](https://github.com/inteon))
- Changes to the Duration and RenewBefore annotations on ingress and gateway-api resources will now trigger certificate updates. ([#&#8203;8232](cert-manager/cert-manager#8232), [@&#8203;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. ([#&#8203;8456](cert-manager/cert-manager#8456), [@&#8203;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 ([#&#8203;8221](cert-manager/cert-manager#8221), [@&#8203;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. ([#&#8203;8403](cert-manager/cert-manager#8403), [@&#8203;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. ([#&#8203;8424](cert-manager/cert-manager#8424), [@&#8203;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. ([#&#8203;8443](cert-manager/cert-manager#8443), [@&#8203;alviss7](https://github.com/alviss7))
- Revert API defaults for issuer reference kind and group introduced in 0.19.0 ([#&#8203;8173](cert-manager/cert-manager#8173), [@&#8203;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. ([#&#8203;8469](cert-manager/cert-manager#8469), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
- Update Go to `v1.25.5` to fix `CVE-2025-61727` and `CVE-2025-61729` ([#&#8203;8290](cert-manager/cert-manager#8290), [@&#8203;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). ([#&#8203;8162](cert-manager/cert-manager#8162), [@&#8203;LiquidPL](https://github.com/LiquidPL))

##### Other (Cleanup or Flake)

- Promoted the OtherNames feature to Beta and enabled it by default ([#&#8203;8288](cert-manager/cert-manager#8288), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- Promoting `xlistenerset` feature gate to `listenerset` ([#&#8203;8501](cert-manager/cert-manager#8501), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Rebranding of the Venafi Issuer to CyberArk ([#&#8203;8215](cert-manager/cert-manager#8215), [@&#8203;iossifbenbassat123](https://github.com/iossifbenbassat123))
- Switched to SSA for challenge finalizer updates ([#&#8203;8519](cert-manager/cert-manager#8519), [@&#8203;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) ([#&#8203;8408](cert-manager/cert-manager#8408), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- The feature-gate DefaultPrivateKeyRotationPolicyAlways moved from Beta to GA and can no longer be disabled. ([#&#8203;8287](cert-manager/cert-manager#8287), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- Update cert-manager's ACME client, forked from golang/x/crypto ([#&#8203;8268](cert-manager/cert-manager#8268), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
- Use the latest version of Kyverno (1.16.2) in the best-practice installation tests ([#&#8203;8389](cert-manager/cert-manager#8389), [@&#8203;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. ([#&#8203;8426](cert-manager/cert-manager#8426), [@&#8203;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>
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 10, 2026
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. ([#&#8203;8370](cert-manager/cert-manager#8370), [@&#8203;jcpunk](https://github.com/jcpunk))
- Added selectable fields to custom resource definitions for .spec.issuerRef.{group, kind, name} ([#&#8203;8256](cert-manager/cert-manager#8256), [@&#8203;tareksha](https://github.com/tareksha))
- Added support for specifying `imagePullSecrets` in the `startupapicheck-job` Helm template to enable pulling images from private registries. ([#&#8203;8186](cert-manager/cert-manager#8186), [@&#8203;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. ([#&#8203;8355](cert-manager/cert-manager#8355), [@&#8203;dancmeyers](https://github.com/dancmeyers))
- Added `parentRef` override annotations on the Certificate resource. ([#&#8203;8518](cert-manager/cert-manager#8518), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Added support for azure private zones for dns01 issuer. ([#&#8203;8494](cert-manager/cert-manager#8494), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Added support for configuring PEM decoding size limits, allowing operators to handle larger certificates and keys. ([#&#8203;7642](cert-manager/cert-manager#7642), [@&#8203;robertlestak](https://github.com/robertlestak))
- Added support for unhealthyPodEvictionPolicy in PodDisruptionBudget ([#&#8203;7728](cert-manager/cert-manager#7728), [@&#8203;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. ([#&#8203;8301](cert-manager/cert-manager#8301), [@&#8203;k0da](https://github.com/k0da))
- Improve error message when CA issuers are misconfigured to use a clashing secret name ([#&#8203;8374](cert-manager/cert-manager#8374), [@&#8203;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. ([#&#8203;8244](cert-manager/cert-manager#8244), [@&#8203;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. ([#&#8203;8195](cert-manager/cert-manager#8195), [@&#8203;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. ([#&#8203;8228](cert-manager/cert-manager#8228), [@&#8203;terinjokes](https://github.com/terinjokes))
- Added experimental `XListenerSet` feature gate ([#&#8203;8394](cert-manager/cert-manager#8394), [@&#8203;hjoshi123](https://github.com/hjoshi123))

##### Documentation

- Add GWAPI documentation to NOTES.TXT in helm chart ([#&#8203;8353](cert-manager/cert-manager#8353), [@&#8203;jaxels10](https://github.com/jaxels10))

##### Bug or Regression

- Adds logs for cases when acme server returns us a fatal error in the order controller ([#&#8203;8199](cert-manager/cert-manager#8199), [@&#8203;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 ([#&#8203;8160](cert-manager/cert-manager#8160), [@&#8203;inteon](https://github.com/inteon))
- Changes to the Duration and RenewBefore annotations on ingress and gateway-api resources will now trigger certificate updates. ([#&#8203;8232](cert-manager/cert-manager#8232), [@&#8203;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. ([#&#8203;8456](cert-manager/cert-manager#8456), [@&#8203;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 ([#&#8203;8221](cert-manager/cert-manager#8221), [@&#8203;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. ([#&#8203;8403](cert-manager/cert-manager#8403), [@&#8203;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. ([#&#8203;8424](cert-manager/cert-manager#8424), [@&#8203;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. ([#&#8203;8443](cert-manager/cert-manager#8443), [@&#8203;alviss7](https://github.com/alviss7))
- Revert API defaults for issuer reference kind and group introduced in 0.19.0 ([#&#8203;8173](cert-manager/cert-manager#8173), [@&#8203;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. ([#&#8203;8469](cert-manager/cert-manager#8469), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
- Update Go to `v1.25.5` to fix `CVE-2025-61727` and `CVE-2025-61729` ([#&#8203;8290](cert-manager/cert-manager#8290), [@&#8203;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). ([#&#8203;8162](cert-manager/cert-manager#8162), [@&#8203;LiquidPL](https://github.com/LiquidPL))

##### Other (Cleanup or Flake)

- Promoted the OtherNames feature to Beta and enabled it by default ([#&#8203;8288](cert-manager/cert-manager#8288), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- Promoting `xlistenerset` feature gate to `listenerset` ([#&#8203;8501](cert-manager/cert-manager#8501), [@&#8203;hjoshi123](https://github.com/hjoshi123))
- Rebranding of the Venafi Issuer to CyberArk ([#&#8203;8215](cert-manager/cert-manager#8215), [@&#8203;iossifbenbassat123](https://github.com/iossifbenbassat123))
- Switched to SSA for challenge finalizer updates ([#&#8203;8519](cert-manager/cert-manager#8519), [@&#8203;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) ([#&#8203;8408](cert-manager/cert-manager#8408), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- The feature-gate DefaultPrivateKeyRotationPolicyAlways moved from Beta to GA and can no longer be disabled. ([#&#8203;8287](cert-manager/cert-manager#8287), [@&#8203;wallrj-cyberark](https://github.com/wallrj-cyberark))
- Update cert-manager's ACME client, forked from golang/x/crypto ([#&#8203;8268](cert-manager/cert-manager#8268), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
- Use the latest version of Kyverno (1.16.2) in the best-practice installation tests ([#&#8203;8389](cert-manager/cert-manager#8389), [@&#8203;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. ([#&#8203;8426](cert-manager/cert-manager#8426), [@&#8203;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>
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. cybr Used by CyberArk-employed maintainers to report to line management what's being worked on. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. kind/bug Categorizes issue or PR as related to a bug. lgtm Indicates that a PR is ready to be merged. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants