Skip to content

Reduce memory usage of cainjector by only caching the metadata of Secret resources#7161

Merged
cert-manager-prow[bot] merged 3 commits intocert-manager:masterfrom
wallrj:7147-cainjector-metadata-only-cache
Jul 12, 2024
Merged

Reduce memory usage of cainjector by only caching the metadata of Secret resources#7161
cert-manager-prow[bot] merged 3 commits intocert-manager:masterfrom
wallrj:7147-cainjector-metadata-only-cache

Conversation

@wallrj
Copy link
Copy Markdown
Member

@wallrj wallrj commented Jul 9, 2024

Update cainjector to use metadata-only caching for Secret resources:

  1. To reduce memory use of cainjector, by only caching metadata of Secret resources in-memory.
  2. To reduce the load on the K8S API server when cainjector starts up, caused by the initial listing of full Secret resources in the cluster.

With 100M of Secrets in the cluster, this reduces the maximum memory usage from ~290M to ~46M:

  • Before: "rss_max_kilobytes": 289268
  • After: "rss_max_kilobytes": 45652

Behind the scenes the reflector is asking the server for a PartialObjectMetadataList projection instead of the full data SecretList.
You can see the reduction in the response size using curl as follows:

# Create 1Mi file. The maximum size of a Secret
dd if=/dev/zero bs=1048576 count=1 of=f1

# Create 100M of secrets
echo -n {0..99} | xargs -d ' ' -P5 -I{} kubectl create secret generic s-$RANDOM-{} --from-file=f1

# Get API server connection parameters
kubectl get cm -n kube-public kube-root-ca.crt  -o jsonpath='{ .data.ca\.crt }' > ca.crt
export URL="$(kubectl cluster-info | grep 'Kubernetes control plane' | egrep -o 'https://[a-z0-9.]+:[0-9]+')"
export TOKEN="$(kubectl create token -n cert-manager cert-manager-cainjector)"
curl "${URL}/api/v1/secrets" \
     -fsSL \
     --cacert ca.crt \
     -H "Authorization: Bearer ${TOKEN}" \
     -H "Accept: application/json" \
    | dd of=/dev/null
...
274790+1 records in
274790+1 records out
140692829 bytes (141 MB, 134 MiB) copied, 1.76449 s, 79.7 MB/s
curl "${URL}/api/v1/secrets" \
     -fsSL \
     --cacert ca.crt \
     -H "Authorization: Bearer ${TOKEN}" \
     -H "Accept: application/json;as=PartialObjectMetadataList;g=meta.k8s.io;v=v1" \
    | dd of=/dev/null
...
167+1 records in
167+1 records out
85806 bytes (86 kB, 84 KiB) copied, 0.404721 s, 212 kB/s

📖 Read about Alternate representations of resources
and Graduate Server-side Get and Partial Objects to GA

Background

Fixes: #7147, #3748

/kind feature

Reduce the memory usage of `cainjector`, by only caching the metadata of Secret resources.
Reduce the load on the K8S API server when `cainjector` starts up, by only listing the metadata of Secret resources.

Testing

Measuring peak memory use at startup

I used time to measure the maximum resident set size of cainjector when it starts up with a cluster containing 100M of Secrets.
I create a cluster, load it with 100M of Secrets and then run time cainjector on my laptop to measure its resource usage for a few seconds, as it starts up.
Leader election is disabled, so that cainjector can immediately begin listing and watching resources.

# Create cluster
kind create cluster

# Install cert-manager CRDs only (cainjector watches Certificate resources)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.1/cert-manager.crds.yaml

# Create 1Mi file. The maximum size of a Secret
dd if=/dev/zero bs=1048576 count=1 of=f1

# Create ~100Mi of Secrets, 5 at a time
echo -n {0..99} | xargs -d ' ' -P5 -I{} kubectl create secret generic s-$RANDOM-{} --from-file=f1

# Configure `time` to record the maximum resident set size and a bunch of other measurements
# https://www.man7.org/linux/man-pages/man1/time.1.html#GNU_VERSION
export TIME='{
    "cpu_seconds_user": %U,
    "cpu_seconds_system": %S,
    "time_elapsed": "%E",
    "cpu_percent": "%P",
    "text_kilobytes": %X,
    "data_kilobytes": %D,
    "rss_max_kilobytes": %M,
    "fs_inputs": %I,
    "fs_outputs": %O,
    "page_faults_major": %F,
    "page_faults_minor": %R,
    "swaps": %W
}'

function measure() {
    gitref=$1
    outfile=$2

    # Checkout the git reference
    # https://stackoverflow.com/a/45967995
    git fetch origin "$gitref" && git checkout FETCH_HEAD
    # Build the cainjector
    make _bin/server/cainjector-linux-amd64

    # Run it locally for 3 seconds and measure resource usage using time.
    /usr/bin/time -o "$outfile" -- \
                  _bin/server/cainjector-linux-amd64 --kubeconfig ~/.kube/config -v1 --leader-elect=false &
    sleep 3
    killall cainjector-linux-amd64
    wait
}

measure master master.json
measure pull/7161/head branch.json

diff -u master.json branch.json
--- master.json 2024-07-10 12:14:07.863996263 +0100
+++ branch.json 2024-07-10 12:14:13.354828683 +0100
@@ -1,14 +1,14 @@
 {
-    "cpu_seconds_user": 0.30,
-    "cpu_seconds_system": 0.09,
+    "cpu_seconds_user": 0.05,
+    "cpu_seconds_system": 0.02,
     "time_elapsed": "0:03.00",
-    "cpu_percent": "13%",
+    "cpu_percent": "2%",
     "text_kilobytes": 0,
     "data_kilobytes": 0,
-    "rss_max_kilobytes": 289268,
+    "rss_max_kilobytes": 45652,
     "fs_inputs": 0,
     "fs_outputs": 0,
     "page_faults_major": 0,
-    "page_faults_minor": 3486,
+    "page_faults_minor": 2008,
     "swaps": 0
 }

Benchmarks

I ran tlspk-bench to create 1000 RSA 2048 Certificates to compare the memory usage of cert-manager from master and this branch.
1000 RSA 2048 Secrets amounts to ~6MB of data so the difference in memory usage is not dramatic.

$ kubectl get secret -l controller.cert-manager.io/fao -A -o json | dd bs=1M of=/dev/null
0+95 records in
0+95 records out
6200133 bytes (6.2 MB, 5.9 MiB) copied, 0.621156 s, 10.0 MB/s

But it is visible in the graphs below.

  • master
    image

  • branch
    image

@cert-manager-prow cert-manager-prow bot added release-note Denotes a PR that will be considered when it comes time to generate release notes. kind/feature Categorizes issue or PR as related to a new feature. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Jul 9, 2024
@wallrj wallrj force-pushed the 7147-cainjector-metadata-only-cache branch from 04f1386 to a376b7b Compare July 9, 2024 21:03
wallrj added 2 commits July 10, 2024 10:07
Signed-off-by: Richard Wall <richard.wall@venafi.com>
Signed-off-by: Richard Wall <richard.wall@venafi.com>
@wallrj wallrj force-pushed the 7147-cainjector-metadata-only-cache branch from a376b7b to 15084fd Compare July 10, 2024 09:07
@cert-manager-prow cert-manager-prow bot 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 Jul 10, 2024
Signed-off-by: Richard Wall <richard.wall@venafi.com>
@cert-manager-prow cert-manager-prow bot added the kind/design Categorizes issue or PR as related to design. label Jul 10, 2024
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

📖 Documentation for builder.OnlyMetadata

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.

This documentation brings back memories... I might have been the one who added these two emojis in the comments: kubernetes-sigs/controller-runtime#1747 😅

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

📖 Documentation for client.CacheOptions.DisableFor.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I changed the signature of owningCertForSecret so that it can be passed

  • a metav1.PartialObjectMetadata when called from the Watch map function, which is now operating on a metadata-only informer cache
  • a corev1.Secret when called from the certificateSource.ReadCA function, where the full Secret (including data) has been read direct from the API server.

@wallrj wallrj changed the title WIP: Reduce memory usage by only caching the metadata of Secret resources Reduce memory usage by only caching the metadata of Secret resources Jul 10, 2024
@cert-manager-prow cert-manager-prow bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 10, 2024
@wallrj wallrj requested a review from maelvls July 10, 2024 13:06
@maelvls
Copy link
Copy Markdown
Member

maelvls commented Jul 11, 2024

Hey, well done with the benchmarks on this PR. Super happy to see more data-driven approaches like this one. And thank you for providing the detailed instructions for reproducing your experiments. 👏

To reduce the load on the K8S API server when cainjector starts up, caused by the initial listing of Secret resources in the cluster.

Are there any downsides to disabling caching? When using Upbound's Crossplane, at least 900 CRDs are installed and are expected to be CA-injected by cert-manager's cainjector. Would disabling be less favorable in that case? I imagine that on startup all the secrets will need to be listed to check that they match the contents of the CA injected in the CRDs.

1000 RSA 2048 Secrets amounts to ~6MB of data so the difference in memory usage is not dramatic.

I think the improvement would be much more dramatic in a cluster with lots of large Helm release secrets hanging around. This is something you will often see in prod clusters.

kubectl get secret -l controller.cert-manager.io/fao -A -o json | dd bs=1M of=/dev/null

Are you sure the controller.cert-manager.io/fao annotation trick was implemented in the cert-manager cainjector? I think it was only implemented in the cert-manager controller.

I haven't reviewed the code yet, I'll come back to it later.

@wallrj
Copy link
Copy Markdown
Member Author

wallrj commented Jul 12, 2024

@maelvls I added some example curl commands to the description showing the difference in response size when you send the PartialObjectMetadataList content negotiation header.

@maelvls
Copy link
Copy Markdown
Member

maelvls commented Jul 12, 2024

Richard presented this PR to yesterday's dev biweekly, some notes:

  • Richard made me aware of the accept header:

    accept: application/json;as= PartialObjectMetadataList;g=meta.k8s.io;v=v1
    

    (side note: this feature isn't documented anywhere... I had to dig into the PR that introduced the feature to learn its syntax)

  • Although cainjector lists all the secrets during the initial "list" HTTP call, it doesn't have to process the contents of these secrets, just their metadata. That should prevent the cainjector from getting oomkilled due to the memory surge that only happens on startup.

  • On the topic of the downsides of disabling caching, I agree that even with over 1000 CRDs, the decrease in memory usage is much preferable over having a cache. Caching would only be useful in case we were accessing or listing the secrets often, which we realistically don't do.

Comment on lines +170 to +172
// NOTE: "owning" here does not mean [ownerReference][1], because
// cert-manager does not set the ownerReference of the Secret,
// unless the [`--enable-certificate-owner-ref` flag is true][2].
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.

Thanks for the clarification!!

Comment on lines +120 to +122
// Only use Secrets that have been created by this Certificate.
// The Secret must have a `cert-manager.io/certificate-name` annotation
// value matching the name of this Certificate..
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.

Thanks again for adding these bits of information! Nit:

Suggested change
// Only use Secrets that have been created by this Certificate.
// The Secret must have a `cert-manager.io/certificate-name` annotation
// value matching the name of this Certificate..
// Only use Secrets that have been created by this Certificate.
// The Secret must have a `cert-manager.io/certificate-name` annotation
// value matching the name of this Certificate.

Copy link
Copy Markdown
Member

@maelvls maelvls left a comment

Choose a reason for hiding this comment

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

I have reviewed the changes, the changes look straightforward. Thank you again for having spent the time writing additional comments. These are super useful, especially regarding "owners" vs. ownerReferences.

/lgtm
/approve
/hold in case you want to fix the nit

@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 Jul 12, 2024
@cert-manager-prow
Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: maelvls

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

@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 Jul 12, 2024
@wallrj
Copy link
Copy Markdown
Member Author

wallrj commented Jul 12, 2024

Thanks @maelvls

I'll fix that nit in another PR to save another round of e2e tests and review.

/unhold

@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 Jul 12, 2024
@cert-manager-prow cert-manager-prow bot merged commit c746fdf into cert-manager:master Jul 12, 2024
@wallrj wallrj changed the title Reduce memory usage by only caching the metadata of Secret resources Reduce memory usage of cainjector by only caching the metadata of Secret resources Jul 12, 2024
@wallrj wallrj deleted the 7147-cainjector-metadata-only-cache branch July 12, 2024 13:42
chris-sanders pushed a commit to chris-sanders/argocd that referenced this pull request Jun 23, 2025
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.14.7` -> `v1.18.1` |

---

### Release Notes

<details>
<summary>cert-manager/cert-manager (cert-manager)</summary>

### [`v1.18.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.18.1)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.18.0...v1.18.1)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

We have added a new feature gate `ACMEHTTP01IngressPathTypeExact`, to allow `ingress-nginx` users to turn off the new default Ingress `PathType: Exact` behavior, in ACME HTTP01 Ingress challenge solvers.
This change fixes the following issue: [#&#8203;7791](https://github.com/cert-manager/cert-manager/issues/7791)

We have increased the ACME challenge authorization timeout to two minutes, which we hope will fix a timeout error (`error waiting for authorization`), which has been reported by multiple users, since the release of cert-manager `v1.16.0`.
This change should fix the following issues: [#&#8203;7337](https://github.com/cert-manager/cert-manager/issues/7337), [#&#8203;7444](https://github.com/cert-manager/cert-manager/issues/7444), and [#&#8203;7685](https://github.com/cert-manager/cert-manager/issues/7685).

> ℹ️ Be sure to review all new features and changes below, and read the [full release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.18) carefully before upgrading.

Changes since `v1.18.0`:

##### Feature

-   Added a new feature gate `ACMEHTTP01IngressPathTypeExact`, to allow `ingress-nginx` users to turn off the new default Ingress `PathType: Exact` behavior, in ACME HTTP01 Ingress challenge solvers. ([`#7810`](https://github.com/cert-manager/cert-manager/pull/7810), [@&#8203;sspreitzer](https://github.com/sspreitzer))

##### Bug or Regression

-   ACME: Increased challenge authorization timeout to 2 minutes to fix `error waiting for authorization`. ([`#7801`](https://github.com/cert-manager/cert-manager/pull/7801), [@&#8203;hjoshi123](https://github.com/hjoshi123))

##### Other (Cleanup or Flake)

-   Use the latest version of ingress-nginx in E2E tests to ensure compatibility ([`#7807`](https://github.com/cert-manager/cert-manager/pull/7807), [@&#8203;wallrj](https://github.com/wallrj))

### [`v1.18.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.18.0)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.17.3...v1.18.0)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

cert-manager 1.18 introduces several new features and breaking changes. Highlights include support for ACME certificate profiles, a new default for `Certificate.Spec.PrivateKey.RotationPolicy` now set to `Always` (breaking change), and the default `Certificate.Spec.RevisionHistoryLimit` now set to `1` (potentially breaking).

> ℹ️ Be sure to review all new features and changes below, and read the [full release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.18) carefully before upgrading.

##### Known Issues

-   ACME HTTP01 challenge paths are rejected by the ingress-nginx validating webhook ([#&#8203;7791](https://github.com/cert-manager/cert-manager/issues/7791))

Changes since `v1.17.2`:

##### Feature

-   Add config to the Vault issuer to allow the server-name to be specified when validating the certificates the Vault server presents. ([#&#8203;7663](https://github.com/cert-manager/cert-manager/issues/7663), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot))
-   Added `app.kubernetes.io/managed-by: cert-manager` label to the created Let's Encrypt account keys ([#&#8203;7577](https://github.com/cert-manager/cert-manager/issues/7577), [@&#8203;terinjokes](https://github.com/terinjokes))
-   Added certificate issuance and expiration time metrics (`certmanager_certificate_not_before_timestamp_seconds`, `certmanager_certificate_not_after_timestamp_seconds`). ([#&#8203;7612](https://github.com/cert-manager/cert-manager/issues/7612), [@&#8203;solidDoWant](https://github.com/solidDoWant))
-   Added ingress-shim option: `--extra-certificate-annotations`,  which sets a list of annotation keys to be copied from Ingress-like to resulting Certificate object ([#&#8203;7083](https://github.com/cert-manager/cert-manager/issues/7083), [@&#8203;k0da](https://github.com/k0da))
-   Added the `iss` short name for the cert-manager `Issuer` resource. ([#&#8203;7373](https://github.com/cert-manager/cert-manager/issues/7373), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Added the `ciss` short name for the cert-manager `ClusterIssuer` resource ([#&#8203;7373](https://github.com/cert-manager/cert-manager/issues/7373), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Adds the `global.rbac.disableHTTPChallengesRole` helm value to disable HTTP-01 ACME challenges. This allows cert-manager to drop its permission to create pods, improving security when HTTP-01 challenges are not required. ([#&#8203;7666](https://github.com/cert-manager/cert-manager/issues/7666), [@&#8203;ali-hamza-noor](https://github.com/ali-hamza-noor))
-   Allow customizing signature algorithm ([#&#8203;7591](https://github.com/cert-manager/cert-manager/issues/7591), [@&#8203;tareksha](https://github.com/tareksha))
-   Cache the full DNS response and handle TTL expiration in `FindZoneByFqdn` ([#&#8203;7596](https://github.com/cert-manager/cert-manager/issues/7596), [@&#8203;ThatsIvan](https://github.com/ThatsIvan))
-   Cert-manager now uses a local fork of the golang.org/x/crypto/acme package ([#&#8203;7752](https://github.com/cert-manager/cert-manager/issues/7752), [@&#8203;wallrj](https://github.com/wallrj))
-   Add support for [ACME profiles extension](https://datatracker.ietf.org/doc/draft-aaron-acme-profiles/). ([#&#8203;7777](https://github.com/cert-manager/cert-manager/issues/7777), [@&#8203;wallrj](https://github.com/wallrj))
-   Promote the `UseDomainQualifiedFinalizer` feature to GA. ([#&#8203;7735](https://github.com/cert-manager/cert-manager/issues/7735), [@&#8203;jsoref](https://github.com/jsoref))
-   Switched service/servicemon definitions to use port names instead of numbers. ([#&#8203;7727](https://github.com/cert-manager/cert-manager/issues/7727), [@&#8203;jcpunk](https://github.com/jcpunk))
-   The default value of `Certificate.Spec.PrivateKey.RotationPolicy` changed from `Never` to `Always`. ([#&#8203;7723](https://github.com/cert-manager/cert-manager/issues/7723), [@&#8203;wallrj](https://github.com/wallrj))
-   Potentially breaking: Set the default revisionHistoryLimit to 1 for the CertificateRequest revisions ([#&#8203;7758](https://github.com/cert-manager/cert-manager/issues/7758), [@&#8203;ali-hamza-noor](https://github.com/ali-hamza-noor))

##### Documentation

-   Fix some comments ([#&#8203;7620](https://github.com/cert-manager/cert-manager/issues/7620), [@&#8203;teslaedison](https://github.com/teslaedison))

##### Bug or Regression

-   Bump `go-jose` dependency to address `CVE-2025-27144`. ([#&#8203;7606](https://github.com/cert-manager/cert-manager/issues/7606), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Bump `golang.org/x/oauth2` to patch `CVE-2025-22868`. ([#&#8203;7638](https://github.com/cert-manager/cert-manager/issues/7638), [@&#8203;NicholasBlaskey](https://github.com/NicholasBlaskey))
-   Bump `golang.org/x/crypto` to patch `GHSA-hcg3-q754-cr77`. ([#&#8203;7638](https://github.com/cert-manager/cert-manager/issues/7638), [@&#8203;NicholasBlaskey](https://github.com/NicholasBlaskey))
-   Bump `github.com/golang-jwt/jwt` to patch `GHSA-mh63-6h87-95cp`. ([#&#8203;7638](https://github.com/cert-manager/cert-manager/issues/7638), [@&#8203;NicholasBlaskey](https://github.com/NicholasBlaskey))
-   Change of the Kubernetes Ingress pathType from `ImplementationSpecific` to `Exact` for a reliable handling of ingress controllers and enhanced security. ([#&#8203;7767](https://github.com/cert-manager/cert-manager/issues/7767), [@&#8203;sspreitzer](https://github.com/sspreitzer))
-   Fix AWS Route53 error detection for not-found errors during deletion of DNS records. ([#&#8203;7690](https://github.com/cert-manager/cert-manager/issues/7690), [@&#8203;wallrj](https://github.com/wallrj))
-   Fix behavior when running with `--namespace=<namespace>`: limit the scope of cert-manager to a single namespace and disable cluster-scoped controllers. ([#&#8203;7678](https://github.com/cert-manager/cert-manager/issues/7678), [@&#8203;tsaarni](https://github.com/tsaarni))
-   Fix handling of certificates with IP addresses in the `commonName` field; IP addresses are no longer added to the DNS `subjectAlternativeName` list and are instead added to the `ipAddresses` field as expected. ([#&#8203;7081](https://github.com/cert-manager/cert-manager/issues/7081), [@&#8203;johnjcool](https://github.com/johnjcool))
-   Fix issuing of certificates via DNS01 challenges on Cloudflare after a breaking change to the Cloudflare API ([#&#8203;7549](https://github.com/cert-manager/cert-manager/issues/7549), [@&#8203;LukeCarrier](https://github.com/LukeCarrier))
-   Fixed the `certmanager_certificate_renewal_timestamp_seconds` metric help text indicating that the metric is relative to expiration time, rather than Unix epoch time. ([#&#8203;7609](https://github.com/cert-manager/cert-manager/issues/7609), [@&#8203;solidDoWant](https://github.com/solidDoWant))
-   Fixing the service account template to incorporate boolean values for the annotations. ([#&#8203;7698](https://github.com/cert-manager/cert-manager/issues/7698), [@&#8203;ali-hamza-noor](https://github.com/ali-hamza-noor))
-   Quote nodeSelector values in Helm Chart ([#&#8203;7579](https://github.com/cert-manager/cert-manager/issues/7579), [@&#8203;tobiasbp](https://github.com/tobiasbp))
-   Skip Gateway TLS listeners in `Passthrough` mode. ([#&#8203;6986](https://github.com/cert-manager/cert-manager/issues/6986), [@&#8203;vehagn](https://github.com/vehagn))
-   Upgrade `golang.org/x/net` fixing `CVE-2025-22870`. ([#&#8203;7619](https://github.com/cert-manager/cert-manager/issues/7619), [@&#8203;dependabot](https://github.com/dependabot)\[bot])

##### Other (Cleanup or Flake)

-   ACME E2E Tests: Upgraded Pebble to v2.7.0 and modified the ACME tests to match latest Pebble behaviour. ([#&#8203;7771](https://github.com/cert-manager/cert-manager/issues/7771), [@&#8203;wallrj](https://github.com/wallrj))
-   Patch the `third_party/forked/acme` package with support for the ACME profiles extension. ([#&#8203;7776](https://github.com/cert-manager/cert-manager/issues/7776), [@&#8203;wallrj](https://github.com/wallrj))
-   Promote the `AdditionalCertificateOutputFormats` feature to GA, making additional formats always enabled. ([#&#8203;7744](https://github.com/cert-manager/cert-manager/issues/7744), [@&#8203;erikgb](https://github.com/erikgb))
-   Remove deprecated feature gate `ValidateCAA`. Setting this feature gate is now a no-op which does nothing but print a warning log line ([#&#8203;7553](https://github.com/cert-manager/cert-manager/issues/7553), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Update kind images to include the Kubernetes 1.33 node image ([#&#8203;7787](https://github.com/cert-manager/cert-manager/issues/7787), [@&#8203;cert-manager-bot](https://github.com/cert-manager-bot))
-   Upgrade Go to `v1.24.4` ([#&#8203;7785](https://github.com/cert-manager/cert-manager/issues/7785), [@&#8203;wallrj](https://github.com/wallrj))
-   Use slices.Contains to simplify code ([#&#8203;7753](https://github.com/cert-manager/cert-manager/issues/7753), [@&#8203;cuinix](https://github.com/cuinix))

### [`v1.17.3`](https://github.com/cert-manager/cert-manager/releases/tag/v1.17.3)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.17.2...v1.17.3)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This patch release addresses several vulnerabilities reported by the Trivy security scanner. It is built with the latest version of Go 1.23.

We have increased the ACME challenge authorization timeout to two minutes, which we hope will fix a timeout error (`error waiting for authorization`), which has been reported by multiple users, in: [#&#8203;7337](https://github.com/cert-manager/cert-manager/issues/7337), [#&#8203;7444](https://github.com/cert-manager/cert-manager/issues/7444), and [#&#8203;7685](https://github.com/cert-manager/cert-manager/issues/7685).

> ℹ️ Be sure to review all new features and changes below, and read the [full release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.17) carefully before upgrading.

Changes since `v1.17.2`:

##### Bug or Regression

-   Bump Go to 1.23.10 to fix GO-2025-3749, GO-2025-3750, and GO-2025-3751 ([#&#8203;7799](https://github.com/cert-manager/cert-manager/issues/7799), [@&#8203;wallrj](https://github.com/wallrj))
-   ACME: Increased challenge authorization timeout to 2 minutes to fix error `waiting for authorization` ([#&#8203;7798](https://github.com/cert-manager/cert-manager/issues/7798), [@&#8203;hjoshi123](https://github.com/hjoshi123))

##### Other (Cleanup or Flake)

-   Use the latest version of ingress-nginx in E2E tests to ensure compatibility ([#&#8203;7808](https://github.com/cert-manager/cert-manager/issues/7808), [@&#8203;wallrj](https://github.com/wallrj))

### [`v1.17.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.17.2)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.17.1...v1.17.2)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This patch release addresses several vulnerabilities reported by the Trivy security scanner. It is built with the latest version of Go 1.23 and includes various dependency updates.

> 📖 Read the full [cert-manager 1.17 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.17), before installing or upgrading.

#### Changes since `v1.17.1`

##### Bug or Regression

-   Bump Go to `v1.23.8` to fix `CVE-2025-22871` ([#&#8203;7701](https://github.com/cert-manager/cert-manager/pull/7701), [`@wallrj`](https://github.com/wallrj))
-   Bump `go-jose` dependency to address `CVE-2025-27144` ([#&#8203;7603](https://github.com/cert-manager/cert-manager/pull/7603), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Bump `golang.org/x/net` to address `CVE-2025-22870` reported by Trivy ([#&#8203;7622](https://github.com/cert-manager/cert-manager/pull/7622), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Bump `golang.org/x/net` to fix `CVE-2025-22872` ([#&#8203;7703](https://github.com/cert-manager/cert-manager/pull/7703), [`@wallrj`](https://github.com/wallrj))
-   Bump `golang.org/x/oauth2` to patch `CVE-2025-22868` ([#&#8203;7692](https://github.com/cert-manager/cert-manager/pull/7692), [`@lentzi90`](https://github.com/lentzi90))
-   Bump `golang.org/x/crypto` to patch `GHSA-hcg3-q754-cr77` ([#&#8203;7692](https://github.com/cert-manager/cert-manager/pull/7692), [`@lentzi90`](https://github.com/lentzi90))
-   Bump `github.com/golang-jwt/jwt` to patch `GHSA-mh63-6h87-95cp` ([#&#8203;7692](https://github.com/cert-manager/cert-manager/pull/7692), [`@lentzi90`](https://github.com/lentzi90))

### [`v1.17.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.17.1)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.17.0...v1.17.1)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This release is primarily intended to address [a breaking change in Cloudflare's API](https://github.com/cert-manager/cert-manager/issues/7540) which impacted ACME DNS-01 challenges using Cloudflare.

Many thanks to the community members who reported this issue!

#### Changes by Kind

##### Bug or Regression

-   ❗ Fix issuing of certificates via DNS01 challenges on Cloudflare after a breaking change to the Cloudflare API ([#&#8203;7565](https://github.com/cert-manager/cert-manager/issues/7565), [@&#8203;LukeCarrier](https://github.com/LukeCarrier))
-   Bump go to 1.23.6 to address CVE-2025-22866 reported by Trivy ([#&#8203;7563](https://github.com/cert-manager/cert-manager/issues/7563), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish)

### [`v1.17.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.17.0)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.5...v1.17.0)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

v1.17.0 is a feature release with several improvements, including:

-   A helpful compliance change to RSA signatures on certificates
-   An easier way to specify passwords for [PKCS#12](https://github.com/PKCS/cert-manager/issues/12) and JKS keystores
-   A few feature flag promotions (and a deprecation)
-   Dependency bumps and other smaller improvements

#### Major Themes

##### RSA Certificate Compliance

The United States Department of Defense published [a memo](https://dl.dod.cyber.mil/wp-content/uploads/pki-pke/pdf/unclass-memo_dodcryptoalgorithms.pdf) in 2022 which introduced some requirements on the kinds of cryptography they require to be supported in software they use.

In effect, the memo requires that software be able to support larger RSA keys (3072-bit and 4096-bit) and hashing algorithms (SHA-384 at a minimum).

cert-manager supported large RSA keys long before the memo was published, but a quirk in implementation meant that cert-manager always used SHA-256 when signing with RSA.

In v1.17.0, cert-manager will choose a hash algorithm based on the RSA key length: 3072-bit keys will use SHA-384, and 4096-bit keys will use SHA-512. This matches similar behavior already present for ECDSA signatures.

Our expectation is that this change will have minimal impact beyond a slight increase to security and better compliance; we're not aware of Kubernetes based environments which support RSA 2048 with SHA-256 but fail with RSA 4096 and SHA-512. However, if you're using larger RSA keys, you should be aware of the change.

##### Easier Keystore Passwords for [PKCS#12](https://github.com/PKCS/cert-manager/issues/12) and JKS

Specifying passwords on [PKCS#12](https://github.com/PKCS/cert-manager/issues/12) and JKS keystores is supported in cert-manager
for compatibility reasons with software which expects or requires passwords to be set; however, these passwords are [not relevant to security](https://cert-manager.io/docs/faq/#why-are-passwords-on-jks-or-pkcs12-files-not-helpful) and never have been in cert-manager.

The initial implementation of the `keystores` feature required these "passwords" to be stored in a Kubernetes secret, which would then be read by cert-manager when creating the keystore after a certificate was issued. This is cumbersome, especially when many passwords are set to default values such as `changeit` or `password`.

In cert-manager v1.17, it's now possible to set a keystore password using a literal string value inside the `Certificate` resource itself, making this process much easier with no change to security.

For example:

```yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-cert-password
spec:
  secretName: my-cert-password
  issuerRef:
    name: my-issuer
    kind: ClusterIssuer
  keystores:
    jks:
      create: true
      password: "abc123"
    pkcs12:
      create: true
      password: "password"
  dnsNames:
  - example.com
```

The new `password` field is mutually exclusive with the `passwordSecretRef` field, so be sure to only set one.

##### Feature Flag Promotions / Deprecations

cert-manager's feature flags allow for easier testing and adoption of new features with a reduced risk of breaking changes. In cert-manager v1.17, two feature gates have been promoted to "beta", and as such are now enabled by default in all installations:

-   `NameConstraints`, allowing users to specify the name constraints extension which can be helpful when creating CA certificates for private PKI
-   `UseDomainQualifiedFinalizer`, which stops a Kubernetes warning from being printed in logs

In addition, we added a new feature gate: `CAInjectorMerging`, which intelligently combines certificates used by the [`CAInjector`](../../concepts/ca-injector.md) component, making it safer to use when issuing certificates are rotated. If you're making heavy use of the CA injector, you should consider enabling this feature gate.

Finally, we deprecated the `ValidateCAA` feature gate which will be removed entirely in cert-manager v1.18.0. This feature gate aimed to validate the `CAA` DNS record during ACME issuance, but has seen low adoption and limited testing since its introduction back in 2019.

##### Other Changes

There are many other PRs which were merged in this release cycle and we'd encourage you to read the release notes below. One PR that's worth highlighting is a change to add more structured logging information to certain log lines.

If you were previously filtering logs using `grep` or similar tools (which is highly discouraged!) be aware that some log lines have changed format.

#### Community

As always, we'd like to thank all of the community members who helped in this release cycle, including all below who merged a PR and anyone that helped by commenting on issues, testing, or getting involved in cert-manager meetings. We're lucky to have you involved.

A special thanks to:

-   [@&#8203;hawksight](https://github.com/hawksight)
-   [@&#8203;aidy](https://github.com/aidy)
-   [@&#8203;bashlion](https://github.com/bashlion)
-   [@&#8203;7ing](https://github.com/7ing)
-   [@&#8203;fadecore](https://github.com/fadecore)
-   [@&#8203;schedin](https://github.com/schedin)
-   [@&#8203;jkroepke](https://github.com/jkroepke)
-   [@&#8203;sdarwin](https://github.com/sdarwin)

for their contributions, comments and support!

Also, thanks to the cert-manager maintainer team for their help in this release:

-   [@&#8203;inteon](https://github.com/inteon)
-   [@&#8203;erikgb](https://github.com/erikgb)
-   [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish)
-   [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot)
-   [@&#8203;munnerz](https://github.com/munnerz)
-   [@&#8203;maelvls](https://github.com/maelvls)

And finally, thanks to the cert-manager steering committee for their feedback in this release cycle:

-   [@&#8203;FlorianLiebhart](https://github.com/FlorianLiebhart)
-   [@&#8203;ssyno](https://github.com/ssyno)
-   [@&#8203;ianarsenault](https://github.com/ianarsenault)
-   [@&#8203;TrilokGeer](https://github.com/TrilokGeer)

#### Changes by Kind

##### Feature

-   Potentially BREAKING: The CA and SelfSigned issuers now use SHA-512 when signing with RSA keys 4096 bits and above, and SHA-384 when signing with RSA keys 3072 bits and above. If you were previously using a larger RSA key as a CA, be sure to check that your systems support the new hash algorithms. ([#&#8203;7368](https://github.com/cert-manager/cert-manager/issues/7368), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Add CAInjectorMerging feature gate to the ca-injector, enabling this will change the behaviour of the ca-injector to merge in new CA certificates instead of outright replacing the existing one. ([#&#8203;7469](https://github.com/cert-manager/cert-manager/issues/7469), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot))
-   Added image pull secrets to deployments when service accounts aren't created ([#&#8203;7411](https://github.com/cert-manager/cert-manager/issues/7411), [@&#8203;TheHenrick](https://github.com/TheHenrick))
-   Added the ability to customize client ID when using username/password authentication for Venafi client ([#&#8203;7484](https://github.com/cert-manager/cert-manager/issues/7484), [@&#8203;ilyesAj](https://github.com/ilyesAj))
-   Helm: New value `webhook.extraEnv` allows you to set custom environment variables in the webhook Pod.
    Helm: New value `cainjector.extraEnv` allows you to set custom environment variables in the cainjector Pod.
    Helm: New value `startupapicheck.extraEnv` allows you to set custom environment variables in the startupapicheck Pod. ([#&#8203;7317](https://github.com/cert-manager/cert-manager/issues/7317), [@&#8203;wallrj](https://github.com/wallrj))
-   Increase the amount of PEM data `pki.DecodeX509CertificateSetBytes` is able to parse, to enable reading larger TLS trust bundles ([#&#8203;7464](https://github.com/cert-manager/cert-manager/issues/7464), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   New configuration option tenantID for the AzureDNS provider when using managed identities with service principals. This enhancement allows users to specify the tenant ID when using managed identities, offering better flexibility in multi-tenant environments. ([#&#8203;7376](https://github.com/cert-manager/cert-manager/issues/7376), [@&#8203;jochenrichter](https://github.com/jochenrichter))
-   Promote the `UseDomainQualifiedFinalizer` feature to Beta. ([#&#8203;7488](https://github.com/cert-manager/cert-manager/issues/7488), [@&#8203;jsoref](https://github.com/jsoref))
-   Allow JKS/PKCS12 keystore passwords to be set as literal values in Certificate resources, mutually exclusive with the existing passwordSecretRef field ([#&#8203;6657](https://github.com/cert-manager/cert-manager/issues/6657), [@&#8203;rquinio1A](https://github.com/rquinio1A))
-   Allow templating ServiceAccount annotations by running the built-in Helm `tpl` function on keys and values, to aid with workload identity configuration ([#&#8203;7501](https://github.com/cert-manager/cert-manager/issues/7501), [@&#8203;fcrespofastly](https://github.com/fcrespofastly))
-   Promote CA NameConstraints feature gate to Beta (enabled by default) ([#&#8203;7494](https://github.com/cert-manager/cert-manager/issues/7494), [@&#8203;tanujd11](https://github.com/tanujd11))

##### Documentation

-   Add example for IPv6 in `--dns01-recursive-nameservers` ([#&#8203;7367](https://github.com/cert-manager/cert-manager/issues/7367), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Updated the chart documentation to show `enableGatewayAPI` in the config example. ([#&#8203;7354](https://github.com/cert-manager/cert-manager/issues/7354), [@&#8203;puerco](https://github.com/puerco))

##### Bug or Regression

-   BUGFIX: A change in v1.16.0 caused cert-manager's ACME ClusterIssuer to look in the wrong namespace for resources required for the issuance (eg. credential Secrets). This is now fixed in v1.16.1+ and v1.17.0+ ([#&#8203;7339](https://github.com/cert-manager/cert-manager/issues/7339), [@&#8203;inteon](https://github.com/inteon))
-   BUGFIX: Helm will now accept percentages for the `podDisruptionBudget.minAvailable` and `podDisruptionBudget.maxAvailable` values. ([#&#8203;7343](https://github.com/cert-manager/cert-manager/issues/7343), [@&#8203;inteon](https://github.com/inteon))
-   Fix ACME HTTP-01 solver for IPv6 endpoints ([#&#8203;7391](https://github.com/cert-manager/cert-manager/issues/7391), [@&#8203;Peac36](https://github.com/Peac36))
-   Fix the behavior of `renewBeforePercentage` to comply with its spec ([#&#8203;7421](https://github.com/cert-manager/cert-manager/issues/7421), [@&#8203;adam-sroka](https://github.com/adam-sroka))
-   Helm: allow `enabled` to be set as a value to toggle cert-manager as a dependency. ([#&#8203;7350](https://github.com/cert-manager/cert-manager/issues/7350), [@&#8203;inteon](https://github.com/inteon))
-   SECURITY (low risk): Limit maximum allowed PEM size to prevent potential DoS in cert-manager controller from attacker-controlled PEM. See [GHSA-r4pg-vg54-wxx4](https://github.com/cert-manager/cert-manager/security/advisories/GHSA-r4pg-vg54-wxx4) ([#&#8203;7400](https://github.com/cert-manager/cert-manager/issues/7400), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   The Certificate object will no longer create CertificateRequest or Secret objects while being deleted ([#&#8203;7361](https://github.com/cert-manager/cert-manager/issues/7361), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot))
-   The issuer will now more quickly retry when its linked Secret is updated to fix an issue that caused a high back-off timeout. ([#&#8203;7455](https://github.com/cert-manager/cert-manager/issues/7455), [@&#8203;inteon](https://github.com/inteon))
-   Upgrades Venafi vCert library fixing a bug which caused the RSA 3072 bit key size for TPP certificate enrollment to not work. ([#&#8203;7498](https://github.com/cert-manager/cert-manager/issues/7498), [@&#8203;inteon](https://github.com/inteon))

##### Other (Cleanup or Flake)

-   ⚠️ Potentially BREAKING: Log messages that were not structured have now been replaced with structured logs. If you were matching on specific log strings, this could break your setup. ([#&#8203;7461](https://github.com/cert-manager/cert-manager/issues/7461), [@&#8203;inteon](https://github.com/inteon))
-   DEPRECATION: The `ValidateCAA` feature gate is now deprecated, with removal scheduled for cert-manager 1.18. In 1.17, enabling this feature gate will print a warning. ([#&#8203;7491](https://github.com/cert-manager/cert-manager/issues/7491), [@&#8203;jsoref](https://github.com/jsoref))
-   Remove `Neither --kubeconfig nor --master was specified` warning message when the controller and the webhook services boot ([#&#8203;7457](https://github.com/cert-manager/cert-manager/issues/7457), [@&#8203;Peac36](https://github.com/Peac36))
-   Move 'live' DNS tests into a separate package to contain test flakiness and improve developer UX ([#&#8203;7530](https://github.com/cert-manager/cert-manager/issues/7530), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.16.5`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.5)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.4...v1.16.5)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This patch release addresses several vulnerabilities reported by the Trivy security scanner. It is built with the latest version of Go 1.23 and includes various dependency updates.

> 📖 Read the full [cert-manager 1.16 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.16), before installing or upgrading.

#### Changes since `v1.16.4`:

##### Bug or Regression

-   Bump Go to `v1.23.8` to fix `CVE-2025-22871` ([#&#8203;7706](https://github.com/cert-manager/cert-manager/pull/7706), [`@wallrj`](https://github.com/wallrj))
-   Bump `github.com/golang-jwt/jwt/v5` to `v5.2.2` to fix `CVE-2025-30204` ([#&#8203;7708](https://github.com/cert-manager/cert-manager/pull/7708), [`@wallrj`](https://github.com/wallrj))
-   Bump `golang.org/x/net` to fix `CVE-2025-22872` ([#&#8203;7707](https://github.com/cert-manager/cert-manager/pull/7707), [`@wallrj`](https://github.com/wallrj))
-   Bump `go-jose` dependency to address `CVE-2025-27144` ([#&#8203;7602](https://github.com/cert-manager/cert-manager/pull/7602), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Bump `golang.org/x/net` to address `CVE-2025-22870` reported by Trivy ([#&#8203;7623](https://github.com/cert-manager/cert-manager/pull/7623), [`@SgtCoDFish`](https://github.com/SgtCoDFish))

### [`v1.16.4`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.4)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.3...v1.16.4)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This release is primarily intended to address [a breaking change in Cloudflare's API](https://github.com/cert-manager/cert-manager/issues/7540) which impacted ACME DNS-01 challenges using Cloudflare.

Many thanks to the community members who reported this issue!

#### Changes by Kind

##### Bug or Regression

-   ❗ Fix issuing of certificates via DNS01 challenges on Cloudflare after a breaking change to the Cloudflare API ([#&#8203;7566](https://github.com/cert-manager/cert-manager/issues/7566), [@&#8203;LukeCarrier](https://github.com/LukeCarrier))
-   Bump go to 1.23.6 to address CVE-2025-22866 reported by Trivy ([#&#8203;7562](https://github.com/cert-manager/cert-manager/issues/7562), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Update go to 1.23.5 ([#&#8203;7533](https://github.com/cert-manager/cert-manager/issues/7533), [@&#8203;tareksha](https://github.com/tareksha))

### [`v1.16.3`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.3)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.2...v1.16.3)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

v1.16.3 is a patch release mainly focused around bumping dependencies to address reported CVEs: CVE-2024-45337 and CVE-2024-45338.

We don't believe that cert-manager is actually vulnerable; this release is instead intended to satisfy vulnerability scanners.

It also includes a bug fix to the new `renewBeforePercentage` field. If you were using `renewBeforePercentage`, see PR [#&#8203;7421](https://github.com/cert-manager/cert-manager/issues/7421) for more information.

#### Changes

##### Bug

-   Bump `golang.org/x/net` and `golang.org/x/crypto` to address CVE-2024-45337 and CVE-2024-45338 ([#&#8203;7485](https://github.com/cert-manager/cert-manager/issues/7485), [@&#8203;erikgb](https://github.com/erikgb))
-   Fix the behaviour of `renewBeforePercentage` to comply with its spec ([#&#8203;7441](https://github.com/cert-manager/cert-manager/issues/7441), [@&#8203;cert-manager-bot](https://github.com/cert-manager-bot))

##### Other

-   Bump go to 1.23.4 ([#&#8203;7489](https://github.com/cert-manager/cert-manager/issues/7489), [@&#8203;erikgb](https://github.com/erikgb))
-   Bump base images to latest available ([#&#8203;7508](https://github.com/cert-manager/cert-manager/issues/7508), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.16.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.2)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.1...v1.16.2)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This patch release of cert-manager 1.16 makes [several changes](https://github.com/cert-manager/cert-manager/pull/7401) to how PEM input is validated, adding maximum sizes appropriate to the type of PEM data which is being parsed.

This is to prevent an unacceptable slow-down in parsing specially crafted PEM data. The issue was found by Google's OSS-Fuzz project.

The issue is low severity; to exploit the PEM issue would require privileged access which would likely allow Denial-of-Service through other methods.

Note also that since most PEM data parsed by cert-manager comes from `ConfigMap` or `Secret` resources which have a max size limit of approximately 1MB, it's difficult to force cert-manager to parse large amounts of PEM data.

Further information is available in https://github.com/cert-manager/cert-manager/security/advisories/GHSA-r4pg-vg54-wxx4

In addition, the version of Go used to build cert-manager 1.16 was updated along with the base images.

#### Changes by Kind

##### Bug or Regression

-   Set a maximum size for PEM inputs which cert-manager will accept to remove possibility of taking a long time to process an input ([#&#8203;7401](https://github.com/cert-manager/cert-manager/issues/7401), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

##### Other (Cleanup or Flake)

-   Bump go to 1.23.3 and bump base images to latest available ([#&#8203;7431](https://github.com/cert-manager/cert-manager/issues/7431), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.16.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.1)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.16.0...v1.16.1)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

The cert-manager 1.16 release includes: new Helm chart features, more Prometheus metrics, memory optimizations, and various improvements and bug fixes for the ACME issuer and Venafi Issuer.

📖 Read the [complete 1.16 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.16) before upgrading.

#### 📜Changes since `v1.16.0`

##### Bug or Regression

-   BUGFIX: Helm schema validation: the new schema validation was too strict for the "global" section. Since the global section is shared across all charts and sub-charts, we must also allow unknown fields. ([#&#8203;7348](https://github.com/cert-manager/cert-manager/pull/7348), [`@inteon`](https://github.com/inteon))
-   BUGFIX: Helm will now accept percentages for the `podDisruptionBudget.minAvailable` and `podDisruptionBudget.maxAvailable` values. ([#&#8203;7345](https://github.com/cert-manager/cert-manager/pull/7345), [`@inteon`](https://github.com/inteon))
-   Helm: allow `enabled` to be set as a value to toggle cert-manager as a dependency. ([#&#8203;7356](https://github.com/cert-manager/cert-manager/pull/7356), [`@inteon`](https://github.com/inteon))
-   BUGFIX: A change in `v1.16.0` caused cert-manager's ACME ClusterIssuer to look in the wrong namespace for resources required for the issuance (e.g. credential Secrets). This is now fixed in `v1.16.1`. ([#&#8203;7342](https://github.com/cert-manager/cert-manager/pull/7342), [`@inteon`](https://github.com/inteon))

### [`v1.16.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.16.0)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.5...v1.16.0)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

The cert-manager 1.16 release includes: new Helm chart features, more Prometheus metrics, memory optimizations, and various improvements and bug fixes for the ACME issuer and Venafi Issuer.

📖 Read the [complete 1.16 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.16) at cert-manager.io.

#### ⚠️ Known issues

1.  [Helm Chart: JSON schema prevents the chart being used as a sub-chart on Rancher RKE](https://github.com/cert-manager/cert-manager/issues/7329).
2.  [ACME DNS01 **ClusterIssuer** fail while loading credentials from Secret resources](https://github.com/cert-manager/cert-manager/issues/7331).

#### ❗ Breaking changes

1.  Helm schema validation may reject your existing Helm values files if they contain typos or unrecognized fields.
2.  Venafi Issuer may fail to renew certificates if the requested duration conflicts with the CA’s minimum or maximum policy settings in Venafi.
3.  Venafi Issuer may fail to renew Certificates if the issuer has been configured for TPP with username-password authentication.

📖 Read the [complete 1.16 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.16) at cert-manager.io.

#### 📜 Changes since v1.15.0

📖 Read the [complete 1.16 release notes](https://cert-manager.io/docs/releases/release-notes/release-notes-1.16) at cert-manager.io.

##### Feature

-   Add `SecretRef` support for Venafi TPP issuer CA Bundle ([#&#8203;7036](https://github.com/cert-manager/cert-manager/pull/7036), [`@sankalp-at-gh`](https://github.com/sankalp-at-gh))
-   Add `renewBeforePercentage` alternative to `renewBefore` ([#&#8203;6987](https://github.com/cert-manager/cert-manager/pull/6987), [`@cbroglie`](https://github.com/cbroglie))
-   Add a metrics server to the cainjector ([#&#8203;7194](https://github.com/cert-manager/cert-manager/pull/7194), [`@wallrj`](https://github.com/wallrj))
-   Add a metrics server to the webhook ([#&#8203;7182](https://github.com/cert-manager/cert-manager/pull/7182), [`@wallrj`](https://github.com/wallrj))
-   Add client certificate auth method for Vault issuer ([#&#8203;4330](https://github.com/cert-manager/cert-manager/pull/4330), [`@joshmue`](https://github.com/joshmue))
-   Add process and go runtime metrics for controller ([#&#8203;6966](https://github.com/cert-manager/cert-manager/pull/6966), [`@mindw`](https://github.com/mindw))
-   Added `app.kubernetes.io/managed-by: cert-manager` label to the cert-manager-webhook-ca Secret ([#&#8203;7154](https://github.com/cert-manager/cert-manager/pull/7154), [`@jrcichra`](https://github.com/jrcichra))
-   Allow the user to specify a Pod template when using GatewayAPI HTTP01 solver, this mirrors the behavior when using the Ingress HTTP01 solver. ([#&#8203;7211](https://github.com/cert-manager/cert-manager/pull/7211), [`@ThatsMrTalbot`](https://github.com/ThatsMrTalbot))
-   Create token request RBAC for the cert-manager ServiceAccount by default ([#&#8203;7213](https://github.com/cert-manager/cert-manager/pull/7213), [`@Jasper-Ben`](https://github.com/Jasper-Ben))
-   Feature: Append cert-manager user-agent string to all AWS API requests, including IMDS and STS requests. ([#&#8203;7295](https://github.com/cert-manager/cert-manager/pull/7295), [`@wallrj`](https://github.com/wallrj))
-   Feature: Log AWS SDK warnings and API requests at cert-manager debug level to help debug AWS Route53 problems in the field. ([#&#8203;7292](https://github.com/cert-manager/cert-manager/pull/7292), [`@wallrj`](https://github.com/wallrj))
-   Feature: The Route53 DNS solver of the ACME Issuer will now use regional STS endpoints computed from the region that is supplied in the Issuer spec or in the `AWS_REGION` environment variable.
    Feature: The Route53 DNS solver of the ACME Issuer now uses the "ambient" region (`AWS_REGION` or `AWS_DEFAULT_REGION`) if `issuer.spec.acme.solvers.dns01.route53.region` is empty; regardless of the flags `--issuer-ambient-credentials` and `--cluster-issuer-ambient-credentials`. ([#&#8203;7299](https://github.com/cert-manager/cert-manager/pull/7299), [`@wallrj`](https://github.com/wallrj))
-   Helm: adds JSON schema validation for the Helm values. ([#&#8203;7069](https://github.com/cert-manager/cert-manager/pull/7069), [`@inteon`](https://github.com/inteon))
-   If the `--controllers` flag only specifies disabled controllers, the default controllers are now enabled implicitly.
    Added `disableAutoApproval` and `approveSignerNames` Helm chart options. ([#&#8203;7049](https://github.com/cert-manager/cert-manager/pull/7049), [`@inteon`](https://github.com/inteon))
-   Make it easier to configure cert-manager using Helm by defaulting `config.apiVersion` and `config.kind` within the Helm chart. ([#&#8203;7126](https://github.com/cert-manager/cert-manager/pull/7126), [`@ThatsMrTalbot`](https://github.com/ThatsMrTalbot))
-   Now passes down specified duration to Venafi client instead of using the CA default only. ([#&#8203;7104](https://github.com/cert-manager/cert-manager/pull/7104), [`@Guitarkalle`](https://github.com/Guitarkalle))
-   Reduce the memory usage of `cainjector`, by only caching the metadata of Secret resources.
    Reduce the load on the K8S API server when `cainjector` starts up, by only listing the metadata of Secret resources. ([#&#8203;7161](https://github.com/cert-manager/cert-manager/pull/7161), [`@wallrj`](https://github.com/wallrj))
-   The Route53 DNS01 solver of the ACME Issuer can now detect the AWS region from the `AWS_REGION` and `AWS_DEFAULT_REGION` environment variables, which is set by the IAM for Service Accounts (IRSA) webhook and by the Pod Identity webhook.
    The `issuer.spec.acme.solvers.dns01.route53.region` field is now optional.
    The API documentation of the `region` field has been updated to explain when and how the region value is used. ([#&#8203;7287](https://github.com/cert-manager/cert-manager/pull/7287), [`@wallrj`](https://github.com/wallrj))
-   Venafi TPP issuer can now be used with a username & password combination with OAuth. Fixes [#&#8203;4653](https://github.com/cert-manager/cert-manager/issues/4653).
    Breaking: cert-manager will no longer use the API Key authentication method which was deprecated in 20.2 and since removed in 24.1 of TPP. ([#&#8203;7084](https://github.com/cert-manager/cert-manager/pull/7084), [`@hawksight`](https://github.com/hawksight))
-   You can now configure the pod security context of HTTP-01 solver pods. ([#&#8203;5373](https://github.com/cert-manager/cert-manager/pull/5373), [`@aidy`](https://github.com/aidy))
-   Helm: New value `webhook.extraEnv`, allows you to set custom environment variables in the webhook Pod.
    Helm: New value `cainjector.extraEnv`, allows you to set custom environment variables in the cainjector Pod.
    Helm: New value `startupapicheck.extraEnv`, allows you to set custom environment variables in the startupapicheck Pod. ([#&#8203;7319](https://github.com/cert-manager/cert-manager/pull/7319), [`@wallrj`](https://github.com/wallrj))

##### Bug or Regression

-   Adds support (behind a flag) to use a domain qualified finalizer. If the feature is enabled (which is not by default), it should prevent Kubernetes from reporting: `metadata.finalizers: "finalizer.acme.cert-manager.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers` ([#&#8203;7273](https://github.com/cert-manager/cert-manager/pull/7273), [`@jsoref`](https://github.com/jsoref))
-   BUGFIX Route53: explicitly set the `aws-global` STS region which is now required by the `github.com/aws/aws-sdk-go-v2` library. ([#&#8203;7108](https://github.com/cert-manager/cert-manager/pull/7108), [`@inteon`](https://github.com/inteon))
-   BUGFIX: fix issue that caused Vault issuer to not retry signing when an error was encountered. ([#&#8203;7105](https://github.com/cert-manager/cert-manager/pull/7105), [`@inteon`](https://github.com/inteon))
-   BUGFIX: the dynamic certificate source used by the webhook TLS server failed to detect a root CA approaching expiration, due to a calculation error. This will cause the webhook TLS server to fail renewing its CA certificate. Please upgrade before the expiration of this CA certificate is reached. ([#&#8203;7230](https://github.com/cert-manager/cert-manager/pull/7230), [`@inteon`](https://github.com/inteon))
-   Bugfix: Prevent aggressive Route53 retries caused by IRSA authentication failures by removing the Amazon Request ID from errors wrapped by the default credential cache. ([#&#8203;7291](https://github.com/cert-manager/cert-manager/pull/7291), [`@wallrj`](https://github.com/wallrj))
-   Bugfix: Prevent aggressive Route53 retries caused by STS authentication failures by removing the Amazon Request ID from STS errors. ([#&#8203;7259](https://github.com/cert-manager/cert-manager/pull/7259), [`@wallrj`](https://github.com/wallrj))
-   Bump `grpc-go` to fix `GHSA-xr7q-jx4m-x55m` ([#&#8203;7164](https://github.com/cert-manager/cert-manager/pull/7164), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Bump the `go-retryablehttp` dependency to fix `CVE-2024-6104` ([#&#8203;7125](https://github.com/cert-manager/cert-manager/pull/7125), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Fix Azure DNS causing panics whenever authentication error happens ([#&#8203;7177](https://github.com/cert-manager/cert-manager/pull/7177), [`@eplightning`](https://github.com/eplightning))
-   Fix incorrect indentation of `endpointAdditionalProperties` in the `PodMonitor` template of the Helm chart ([#&#8203;7190](https://github.com/cert-manager/cert-manager/pull/7190), [`@wallrj`](https://github.com/wallrj))
-   Fixes ACME HTTP01 challenge behavior when using Gateway API to prevent unbounded creation of HTTPRoute resources ([#&#8203;7178](https://github.com/cert-manager/cert-manager/pull/7178), [`@miguelvr`](https://github.com/miguelvr))
-   Handle errors arising from challenges missing from the ACME server ([#&#8203;7202](https://github.com/cert-manager/cert-manager/pull/7202), [`@bdols`](https://github.com/bdols))
-   Helm BUGFIX: the cainjector ConfigMap was not mounted in the cainjector deployment. ([#&#8203;7052](https://github.com/cert-manager/cert-manager/pull/7052), [`@inteon`](https://github.com/inteon))
-   Improve the startupapicheck: validate that the validating and mutating webhooks are doing their job. ([#&#8203;7057](https://github.com/cert-manager/cert-manager/pull/7057), [`@inteon`](https://github.com/inteon))
-   The `KeyUsages` X.509 extension is no longer added when there are no key usages set (in accordance to RFC 5280 Section 4.2.1.3) ([#&#8203;7250](https://github.com/cert-manager/cert-manager/pull/7250), [`@inteon`](https://github.com/inteon))
-   Update `github.com/Azure/azure-sdk-for-go/sdk/azidentity` to address `CVE-2024-35255` ([#&#8203;7087](https://github.com/cert-manager/cert-manager/pull/7087), [`@dependabot[bot]`](https://github.com/apps/dependabot))

##### Other (Cleanup or Flake)

-   Old API versions were removed from the codebase.
    Removed:
    (acme.)cert-manager.io/v1alpha2
    (acme.)cert-manager.io/v1alpha3
    (acme.)cert-manager.io/v1beta1 ([#&#8203;7278](https://github.com/cert-manager/cert-manager/pull/7278), [`@inteon`](https://github.com/inteon))
-   Upgrading to client-go `v0.31.0` removes a lot of noisy `reflector.go: unable to sync list result: internal error: cannot cast object DeletedFinalStateUnknown` errors from logs. ([#&#8203;7237](https://github.com/cert-manager/cert-manager/pull/7237), [`@inteon`](https://github.com/inteon))
-   Bump Go to `v1.23.2` ([#&#8203;7324](https://github.com/cert-manager/cert-manager/pull/7324), [`@cert-manager-bot`](https://github.com/cert-manager-bot))

### [`v1.15.5`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.5)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.4...v1.15.5)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

cert-manager v1.15.5 contains simple dependency bumps to address reported CVEs (CVE-2024-45337 and CVE-2024-45338).

We don't believe that cert-manager is actually vulnerable; this release is instead intended to satisfy vulnerability scanners.

#### Changes

##### Bug or Regression

-   Bump golang.org/x/net to address CVE-2024-45337 and CVE-2024-45338 ([#&#8203;7496](https://github.com/cert-manager/cert-manager/issues/7496), [@&#8203;wallrj](https://github.com/wallrj))

##### Other (Cleanup or Flake)

-   Bump to go 1.22.10 ([#&#8203;7507](https://github.com/cert-manager/cert-manager/issues/7507), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.15.4`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.4)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.3...v1.15.4)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

This patch release of cert-manager 1.15 makes [several changes](https://github.com/cert-manager/cert-manager/pull/7403) to how PEM input is validated, adding maximum sizes appropriate to the type of PEM data which is being parsed.

This is to prevent an unacceptable slow-down in parsing specially crafted PEM data. The issue was found by Google's OSS-Fuzz project.

The issue is low severity; to exploit the PEM issue would require privileged access which would likely allow Denial-of-Service through other methods.

Note also that since most PEM data parsed by cert-manager comes from `ConfigMap` or `Secret` resources which have a max size limit of approximately 1MB, it's difficult to force cert-manager to parse large amounts of PEM data.

Further information is available in https://github.com/cert-manager/cert-manager/security/advisories/GHSA-r4pg-vg54-wxx4

In addition, the version of Go used to build cert-manager 1.15 was updated along with the base images, and a Route53 bug fix was backported.

#### Changes by Kind

##### Bug or Regression

-   Bugfix: Prevent aggressive Route53 retries caused by STS authentication failures by removing the Amazon Request ID from STS errors. ([#&#8203;7261](https://github.com/cert-manager/cert-manager/pull/7261), [@&#8203;cert-manager-bot](https://github.com/cert-manager-bot))
-   Set a maximum size for PEM inputs which cert-manager will accept to remove possibility of taking a long time to process an input ([#&#8203;7402](https://github.com/cert-manager/cert-manager/pull/7402), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

##### Other (Cleanup or Flake)

-   Bump go to 1.22.9 ([#&#8203;7424](https://github.com/cert-manager/cert-manager/pull/7424), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Upgrade Go to 1.22.8, the latest available patch release ([#&#8203;7406](https://github.com/cert-manager/cert-manager/pull/7406), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.15.3`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.3)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.2...v1.15.3)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

**🔗 [See v1.15.0](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.0) for more information about cert-manager 1.15 and read-before-upgrade info.**

#### 📜 Changes since [`v1.15.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.2)

##### Bug or Regression

-   BUGFIX: the dynamic certificate source used by the webhook TLS server failed to detect a root CA approaching expiration, due to a calculation error. This will cause the webhook TLS server to fail renewing its CA certificate. Please upgrade before the expiration of this CA certificate is reached. ([#&#8203;7232](https://github.com/cert-manager/cert-manager/issues/7232), [@&#8203;cert-manager-bot](https://github.com/cert-manager-bot))

### [`v1.15.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.2)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.1...v1.15.2)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

**🔗 [See v1.15.0](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.0) for more information about cert-manager 1.15 and read-before-upgrade info.**

#### 📜 Changes since [`v1.15.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.1)

##### Bug or Regression

-   BUGFIX `route53`: explicitly set the `aws-global` STS region which is now required by the `github.com/aws/aws-sdk-go-v2` library. ([#&#8203;7189](https://github.com/cert-manager/cert-manager/pull/7189), [`@cert-manager-bot`](https://github.com/cert-manager-bot))
-   Bump `grpc-go` to fix `GHSA-xr7q-jx4m-x55m` ([#&#8203;7167](https://github.com/cert-manager/cert-manager/pull/7167), [`@SgtCoDFish`](https://github.com/SgtCoDFish))
-   Fix Azure DNS causing panics whenever authentication error happens ([#&#8203;7188](https://github.com/cert-manager/cert-manager/pull/7188), [`@cert-manager-bot`](https://github.com/cert-manager-bot))
-   Fix incorrect value and indentation of `endpointAdditionalProperties` in the `PodMonitor` template of the Helm chart ([#&#8203;7191](https://github.com/cert-manager/cert-manager/pull/7191), [`@inteon`](https://github.com/inteon))
-   Fixes ACME HTTP01 challenge behavior when using Gateway API to prevent unbounded creation of `HTTPRoute` resources ([#&#8203;7186](https://github.com/cert-manager/cert-manager/pull/7186), [`@cert-manager-bot`](https://github.com/cert-manager-bot))
-   Upgrade `golang` from `1.22.3` to `1.22.5` ([#&#8203;7165](https://github.com/cert-manager/cert-manager/pull/7165), [`@github-actions`](https://github.com/github-actions))

### [`v1.15.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.1)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.15.0...v1.15.1)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

**🔗 [See v1.15.0](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.0) for more information about cert-manager 1.15 and read-before-upgrade info.**

#### 📜 Changes since [v1.15.0](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.0)

##### Bug or Regression

-   BUGFIX: fix issue that caused Vault issuer to not retry signing when an error was encountered. ([#&#8203;7111](https://github.com/cert-manager/cert-manager/issues/7111), [@&#8203;inteon](https://github.com/inteon))

##### Other (Cleanup or Flake)

-   Update github.com/Azure/azure-sdk-for-go/sdk/azidentity to address CVE-2024-35255 ([#&#8203;7092](https://github.com/cert-manager/cert-manager/issues/7092), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot))
-   Bump the go-retryablehttp dependency to fix CVE-2024-6104 ([#&#8203;7130](https://github.com/cert-manager/cert-manager/issues/7130), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))

### [`v1.15.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.15.0)

[Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.14.7...v1.15.0)

cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.

cert-manager 1.15 promotes several features to beta, including GatewayAPI support (`ExperimentalGatewayAPISupport`), the ability to provide a subject in the Certificate that will be used literally in the CertificateSigningRequest (`LiteralCertificateSubject`) and the outputting of additional certificate formats (`AdditionalCertificateOutputFormats`).

> \[!NOTE]
>
> The `cmctl` binary have been moved to https://github.com/cert-manager/cmctl/releases.
> For the startupapicheck Job you should update references to point at `quay.io/jetstack/cert-manager-startupapicheck`

> \[!NOTE]
>
> From this release, the Helm chart will no longer uninstall the CRDs when the chart is uninstalled. If you want the CRDs to be removed on uninstall use `crds.keep=false` when installing the Helm chart.

#### Community

Thanks again to all open-source contributors with commits in this release, including: [@&#8203;Pionerd](https://github.com/Pionerd), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot), [@&#8203;andrey-dubnik](https://github.com/andrey-dubnik), [@&#8203;bwaldrep](https://github.com/bwaldrep), [@&#8203;eplightning](https://github.com/eplightning), [@&#8203;erikgb](https://github.com/erikgb), [@&#8203;findnature](https://github.com/findnature), [@&#8203;gplessis](https://github.com/gplessis), [@&#8203;import-shiburin](https://github.com/import-shiburin), [@&#8203;inteon](https://github.com/inteon), [@&#8203;jkroepke](https://github.com/jkroepke), [@&#8203;lunarwhite](https://github.com/lunarwhite), [@&#8203;mangeshhambarde](https://github.com/mangeshhambarde), [@&#8203;pwhitehead-splunk](https://github.com/pwhitehead-splunk) & [@&#8203;rodrigorfk](https://github.com/rodrigorfk), [@&#8203;wallrj](https://github.com/wallrj).

Thanks also to the following cert-manager maintainers for their contributions during this release: [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish), [@&#8203;SpectralHiss](https://github.com/SpectralHiss), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot), [@&#8203;hawksight](https://github.com/hawksight), [@&#8203;inteon](https://github.com/inteon), [@&#8203;maelvls](https://github.com/maelvls) & [@&#8203;wallrj](https://github.com/wallrj).

Equally thanks to everyone who provided feedback, helped users and raised issues on GitHub and Slack and joined our meetings!

Thanks also to the CNCF, which provides resources and support, and to the AWS open source team for being good community members and for their maintenance of the PrivateCA Issuer.

In addition, massive thanks to Venafi for contributing developer time and resources towards the continued maintenance of cert-manager projects.

#### Changes by Kind

##### Feature

-   GatewayAPI support has graduated to Beta. Add the `--enable-gateway-api` flag to enable the integration. ([#&#8203;6961](https://github.com/cert-manager/cert-manager/issues/6961), [@&#8203;ThatsMrTalbot](https://github.com/ThatsMrTalbot))
-   Add support to specify a custom key alias in a JKS Keystore ([#&#8203;6807](https://github.com/cert-manager/cert-manager/issues/6807), [@&#8203;bwaldrep](https://github.com/bwaldrep))
-   Add the ability to communicate with Vault via mTLS when strict client certificates is enabled at Vault server side ([#&#8203;6614](https://github.com/cert-manager/cert-manager/issues/6614), [@&#8203;rodrigorfk](https://github.com/rodrigorfk))
-   Added option to provide additional audiences in the service account auth section for vault ([#&#8203;6718](https://github.com/cert-manager/cert-manager/issues/6718), [@&#8203;andrey-dubnik](https://github.com/andrey-dubnik))
-   Venafi Issuer now sends a cert-manager HTTP User-Agent header in all Venafi Rest API requests.
    For example: `cert-manager-certificaterequests-issuer-venafi/v1.15.0+(linux/amd64)+cert-manager/ef068a59008f6ed919b98a7177921ddc9e297200`. ([#&#8203;6865](https://github.com/cert-manager/cert-manager/issues/6865), [@&#8203;wallrj](https://github.com/wallrj))
-   Add hint to validation error message to help users of external issuers more easily fix the issue if they specify a Kind but forget the Group ([#&#8203;6913](https://github.com/cert-manager/cert-manager/issues/6913), [@&#8203;SgtCoDFish](https://github.com/SgtCoDFish))
-   Add support for numeric OID types in LiteralSubject. Eg. "1.2.3.4=String Value" ([#&#8203;6775](https://github.com/cert-manager/cert-manager/issues/6775), [@&#8203;inteon](https://github.com/inteon))
-   Promote the `LiteralCertificateSubject` feature to Beta. ([#&#8203;7030](https://github.com/cert-manager/cert-manager/issues/7030), [@&#8203;inteon](https://github.com/inteon))
-   Promoted the AdditionalCertificateOutputFormats feature gate to Beta (enabled by default). ([#&#8203;6970](https://github.com/cert-manager/cert-manager/issues/6970), [@&#8203;erikgb](https://github.com/erikgb))
-   The Helm chart now allows you to supply `extraObjects`; a list of yaml manifests which will helm will install and uninstall with the cert-manager manifests. ([#&#8203;6424](https://github.com/cert-manager/cert-manager/issues/6424), [@&#8203;gplessis](https://github.com/gplessis))
-   Update the Route53 provider to support fetching credentials using AssumeRoleWithWebIdentity ([#&#8203;6878](https://github.com/cert-manager/cert-manager/issues/6878), [@&#8203;pwhitehead-splunk](https://github.com/pwhitehead-splunk))
-   Helm can now add optional hostAliases to cert-manager Pod to allow the DNS self-check to pass in custom scenarios. ([#&#8203;6456](https://github.com/cert-manager/cert-manager/issues/6456), [@&#8203;Pionerd](https://github.com/Pionerd))
-   Added a new Ingress annotation for copying specific Ingress annotations to Certificate's secretTemplate ([#&#8203;6839](https://github.com/cert-manager/cert-manager/issues/6839), [@&#8203;mangeshhambarde](https://github.com/mangeshhambarde))
-   Added option to define additional token audiences for the Vault Kubernetes auth ([#&#8203;6744](https://github.com/cert-manager/cert-manager/issues/6744), [@&#8203;andrey-dubnik](https://github.com/andrey-dubnik))
-   Allow `cert-manager.io/allow-direct-injection` in annotations ([#&#8203;6801](https://github.com/cert-manager/cert-manager/issues/6801), [@&#8203;jkroepke](https://github.com/jkroepke))

##### Design

-   Remove repetitive words ([#&#8203;6949](https://github.com/cert-manager/cert-manager/issues/6949), [@&#8203;findnature](https://github.com/findnature))

##### Bug or Regression

-   BUGFIX: Fixes issue with JSON-logging, where only a subset of the log messages were output as JSON. ([#&#8203;6779](https://github.com/cert-manager/cert-manager/issues/6779), [@&#8203;inteon](https://github.com/inteon))
-   BUGFIX: JKS and PKCS12 stores now contain the full set of CAs specified by an issuer ([#&#8203;6806](https://github.com/cert-manager/cert-manager/issues/6806), [@&#8203;bwaldrep](https://github.com/bwaldrep))
-   BUGFIX: cainjector leaderelection flag/config option defaults are missing ([#&#8203;6816](https://github.com/cert-manager/cert-manager/issues/6816), [@&#8203;inteon](https://github.com/inteon))
-   BUGFIX: cert-manager issuers incorrectly copied the critical flag from the CSR instead of re-calculating that field themselves. ([#&#8203;6724](https://github.com/cert-manager/cert-manager/issues/6724), [@&#8203;inteon](https://github.com/inteon))
-   Breaking Change: Fixed unintended certificate chain is used if `preferredChain` is configured. ([#&#8203;6755](https://github.com/cert-manager/cert-manager/issues/6755), [@&#8203;import-shiburin](https://github.com/import-shiburin))
-   Bugfix: LiteralSubjects with a #= value can result in memory issues due to faulty BER parser (github.com/go-asn1-ber/asn1-ber). ([#&#8203;6770](https://github.com/cert-manager/cert-manager/issues/6770), [@&#8203;inteon](https://github.com/inteon))
-  …
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. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. kind/design Categorizes issue or PR as related to design. kind/feature Categorizes issue or PR as related to a new feature. 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.

CAInjector entering crashloop with "timed out waiting for cache to be synced"

2 participants