cert-manager - v1.12.0
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager v1.12 brings support for JSON logging, a lower memory footprint, support for ephemeral service account tokens with Vault, improved dependency management and support for the ingressClassName field.
Thanks again to all open-source contributors with commits in this release, including:
Thanks also to the following cert-manager maintainers for their contributions during this release:
Equally thanks to everyone who provided feedback, helped users and raised issues on Github and Slack, joined our meetings and talked to us at Kubecon!
Special thanks to @erikgb for continuously great input and feedback and to @lucacome for always ensuring that our kube deps are up to date!
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 Jetstack (by Venafi) for contributing developer time and resources towards the continued maintenance of cert-manager projects.
Changes by Kind
- POTENTIALLY BREAKING: the cert-manager binaries and some tests have been split into separate Go modules, allowing them to be easily patched independently. This should have no impact if you simply run cert-manager in your cluster. If you import cert-manager binaries, integration tests or end-to-end tests in Go, you may need to make code changes in response to this. See https://cert-manager.io/docs/contributing/importing/ for more details. (#5880, @SgtCoDFish)
- Added support for JSON logging (using --logging-format=json) (#5828, @malovme)
- Added the
--concurrent-workersflag that lets you control the number of concurrent workers for each of our controllers. (#5936, @inteon)
acme.solvers.http01.ingress.podTemplate.spec.imagePullSecretsfield to issuer spec to allow to specify image pull secrets for the ACME HTTP01 solver pod. (#5801, @malovme)
- New flags were added to the cainjector binary. They can be used to modify what injectable kinds are enabled. If cainjector is only used as a cert-manager's internal component it is sufficient to only enable validatingwebhookconfigurations and mutatingwebhookconfigurations injectable resources; disabling the rest can improve memory consumption. By default all are enabled.
--watch-certsflag was renamed to
--enable-certificates-data-source. (#5766, @irbekrm)
- Helm: Added PodDisruptionBudgets for cert-manager components to the Helm chart (disabled by default). (#3931, @e96wic)
- Helm: Egress 6443/TCP is now allowed in the webhook. This is required for OpenShift and OKD clusters for which the Kubernetes API server listens on port 6443 instead of 443. (#5788, @ExNG)
- Helm: you can now add volumes and volume mounts via Helm variables for the cainjector, webhook, and startupapicheck. (#5668, @waterfoul)
- Helm: you can now enable the flags
--dns01-recursive-nameservers-onlythrough Helm values. (#5614, @jkroepke)
- The DigitalOcean issuer now sets a cert-manager user agent string. (#5869, @andrewsomething)
- The HTTP-01 solver can now be configured to create Ingresses with an
ingressClassName. The credit goes to @dsonck92 for implementing the initial PR. (#5849, @maelvls)
- The Vault issuer can now be used with ephemeral Kubernetes tokens. With the new
serviceAccountReffield, cert-manager generates a short-lived token associated to the service account to authenticate to Vault. Along with this new feature, we have added validation logic in the webhook in order to check the
vault.authfield when creating an Issuer or ClusterIssuer. Previously, it was possible to create an Issuer or ClusterIssuer with an invalid value for
vault.auth. (#5502, @maelvls)
- The cert-manager controller container of the controller Pod now has a
/livezendpoint and a default liveness probe, which fails if leader election has been lost and for some reason the process has not exited. The liveness probe is disabled by default. (#5962, @wallrj)
- Upgraded Gateway API to v0.6.0. (#5768, @yulng)
- Webhook now logs requests to mutating/validating webhook (with
--v=5flag) (#5975, @tobotg)
- Certificate issuances are always failed (and retried with a backoff) for denied or invalid CertificateRequests.
This is not necessarily a breaking change as due to a race condition this may already have been the case. (#5887, @irbekrm)
- The cainjector controller can now use server-side apply to patch mutatingwebhookconfigurations, validatingwebhookconfigurations, apiservices, and customresourcedefinitions. This feature is currently in alpha and is not enabled by default. To enable server-side apply for the cainjector, add the flag --feature-gates=ServerSideApply=true to the deployment. (#5991, @inteon)
- Helm: the dead links in
values.yamlare now working (#5999, @SgtCoDFish)
Bug or Regression
- Cmctl renew now prints an error message unless Certificate name(s) or --all are supplied (#5896, @maumontesilva)
- Cmctl: In order work around a hardcoded Kubernetes version in Helm, we now use a fake kube-apiserver version when generating the helm template when running
cmctl x install. (#5720, @irbekrm)
- Fix development environment and go vendoring on Linux arm64. (#5810, @SgtCoDFish)
- Fix ordering of remote git tags when preparing integration tests (#5910, @SgtCoDFish)
- Helm: the flag
--acme-http01-solver-imagegiven to the variable
acmesolver.extraArgsnow has precedence over the variable
acmesolver.image. (#5693, @SgtCoDFish)
- Ingress and Gateway resources will not be synced if deleted via foreground cascading. (#5878, @avi-08)
- The auto-retry mechanism added in VCert 4.23.0 and part of cert-manager 1.11.0 (#5674) has been found to be faulty. Until this issue is fixed upstream, we now use a patched version of VCert. This patch will slowdown the issuance of certificates by 9% in case of heavy load on TPP. We aim to release at an ulterior date a patch release of cert-manager to fix this slowdown. (#5805, @inteon)
- Upgrade to go 1.19.6 along with newer helm and containerd versions and updated base images (#5813, @SgtCoDFish)
- When using the
pkcs12fields on a Certificate resource with a CA issuer that doesn't set the
ca.crtin the Secret resource, cert-manager no longer loop trying to copy
truststore.p12. (#5972, @vinzent)
- When using the
literalSubjectfield on a Certificate resource, the IPs, URIs, DNS names, and email addresses segments are now properly compared. (#5747, @inteon)
Other (Cleanup or Flake)
- ACME account registration is now re-verified if account key is manually changed. (#5949, @TrilokGeer)
make go-workspacetarget for generating a go.work file for local development (#5935, @SgtCoDFish)
- Added a Makefile target to build a standalone E2E test binary: make e2e-build (#5804, @wallrj)
- Bump keystore-go to v4.4.1 to work around an upstream rewrite of history (#5724, @g-gaston)
- Bump the distroless base images (#5929, @maelvls)
- Bumps base images (#5793, @irbekrm)
- Cainjector memory improvements: removes second cache of secrets, CRDs, validating/mutatingwebhookconfigurations and APIServices that should reduce memory consumption by about half.
*BREAKING:- users who are relying on cainjector to work when
certificates.cert-manager.ioCRD is not installed in the cluster, now need to pass
--watch-certificates=falseflag to cainjector else it will not start.
Users who only use cainjector as cert-manager's internal component and have a large number of
Certificateresources in cluster can pass
--watch-certificates=falseto avoid cainjector from caching
Certificateresources and save some memory. (#5746, @irbekrm)
- Cainjector now only reconciles annotated objects of injectable kind. (#5764, @irbekrm)
- Container images are have an OCI source label (#5722, @james-callahan)
- Enable cmctl to be imported by third parties (#6050, @jetstack-bot)
- The acmesolver pods created by cert-manager now have
automountServiceAccountTokenturned off. (#5754, @wallrj)
- The controller binary now uses much less memory on Kubernetes clusters with large or numerous Secret resources. The controller now ignores the contents of Secrets that aren't relevant to cert-manager. This functionality is currently placed behind
SecretsFilteredCachingfeature flag. The filtering mechanism might, in some cases, slightly slow down issuance or cause additional requests to kube-apiserver because unlabelled Secret resources that cert-manager controller needs will now be retrieved from kube-apiserver instead of being cached locally. To prevent this from happening, users can label all issuer Secret resources with the
controller.cert-manager.io/fao: truelabel. (#5824, @irbekrm)
- The controller memory usage has been further decreased by ignoring annotations, labels and managed fields when caching Secret resources. (#5966, @irbekrm)
- The controller now makes fewer calls to the ACME server.
POTENTIALLY BREAKING: this PR slightly changes how the name of the Challenge resources are calculated. To avoid duplicate issuances due to the Challenge resource being recreated, ensure that there is no in-progress ACME certificate issuance when you upgrade to this version of cert-manager. (#5901, @irbekrm)
- The memory usage of the controller has been reduced by only caching the metadata of Pods and Services. (#5976, @irbekrm)
- The number of calls made to the ACME server during the controller startup has been reduced by storing the private key hash in the Issuer's status. (#6006, @vidarno)
- Updates Kubernetes libraries to
v0.26.2. (#5820, @lucacome)
- Updates Kubernetes libraries to
v0.26.3. (#5907, @lucacome)
- Updates Kubernetes libraries to
v0.27.1. (#5961, @lucacome)
- Updates base images (#5832, @irbekrm)
- Upgrade to Go 1.20 (#5969, @wallrj)
- Upgrade to go 1.19.5 (#5712, @yanggangtony)
- Validates that
certificate.spec.secretNameis a valid
Secretname (#5967, @avi-08)
- We are now testing with Kubernetes v1.27.1 by default. (#5979, @irbekrm)
certificate.spec.secretNameSecrets will now be labelled with
controller.cert-manager.io/faolabel (#5660, @irbekrm)
- We have replaced our python boilerplate checker with an installed Go version, removing the need to have Python installed when developing or building cert-manager. (#6000, @SgtCoDFish)
- 🔍View and search all cert-manager releases.
- 🛠️Create and share lists to track your tools.
- 🚨Setup notifications for major, security, feature or patch updates.
- 🚀Much more coming soon!