Release 1.12
cert-manager 1.12 brings support for JSON logging, a lower memory footprint,
support for ephemeral service account tokens with Vault, and the support of the
ingressClassName
field. We also improved on our ability to patch
vulnerabilities.
Known Issues
These known issues apply to all releases of cert-manager v1.12
. Some patch releases may have other specific issues, which are called out in the notes for the respective release below.
-
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if
preferredChain
is configured: see 1.14 release notes for more information. -
If two Certificate resources are incorrectly configured to have the same target Secret resource, cert-manager will generate a MANY CertificateRequests, possibly causing high CPU usage and/ or high costs due to the large number of certificates issued (see https://github.com/cert-manager/cert-manager/pull/6406). This problem was resolved in v1.13.2 and other later versions, but the fix cannot be easily backported to
v1.12.x
. We recommend usingv1.12.x
with caution (avoid misconfigured Certificate resources) or upgrading to a newer version.
Major Themes
Support for JSON logging
JSON logs are now available in cert-manager! A massive thank you to @malovme for going the extra mile to get #5828 merged!
To enable JSON logs, add the flag --logging-format=json
to the three
deployments (cert-manager
, cert-manager-webhook
, and
cert-manager-cainjector
).
For example, if you are using the Helm chart:
helm repo add --force-update jetstack https://charts.jetstack.iohelm upgrade --install cert-manager jetstack/cert-manager --namespace cert-manager \--set extraArgs='{--logging-format=json}' \--set webhook.extraArgs='{--logging-format=json}' \--set cainjector.extraArgs='{--logging-format=json}'
Lower memory footprint
In 1.12 we continued the work started in 1.11 to reduce cert-manager component's memory consumption.
Controller
Caching of the full contents of all cluster Secret
s can now be disabled by
setting a SecretsFilteredCaching
alpha feature gate to true. This will ensure
that only Secret
resources that are labelled with
controller.cert-manager.io/fao
label 1 are cached in full. Cert-manager
automatically adds this label to all Certificate
Secret
s.
This change has been placed behind alpha feature gate as it could potentially
slow down large scale issuance because issuer credentials Secret
s will now be
retrieved from kube-apiserver instead of local cache. To prevent the slow down,
users can manually label issuer Secret
s with a
controller.cert-manager.io/fao
label.
See the
design
and implementation for
additional details.
We would like to gather some feedback on this change before
it can graduate- please leave your comments on
(cert-manager#6074
)[https://github.com/cert-manager/cert-manager/issues/6074].
Additionally, controller no longer watches and caches all Pod
and Service
resources.
See cert-manager#5976
for implementation.
Cainjector
Cainjector's control loops have been refactored, so by default it should
consume up to half as much memory as before, see
cert-manager#5746
.
Additionally, a number of flags have been added to cainjector that can be used to scope down what resources it watches and caches.
If cainjector is only used as part of cert-manager installation, it only needs
to inject CA certs to cert-manager's MutatingWebhookConfiguration
and
ValidatingWebhookConfiguration
from a Secret
in cert-manager's installation
namespace so all the other injectable/source types can be turned off and
cainjector can be scoped to a single namespace, see the relevant flags below:
// cainjector flags--namespace=<cert-manager-installation-namespace> \--enable-customresourcedefinitions-injectable=false \--enable-certificates-data-source=false \--enable-apiservices-injectable=false
See cert-manager#5766
for more detail.
A big thanks to everyone who put in time reporting and writing up issues describing performance problems in large scale installations.
Faster Response to CVEs By Reducing Transitive Dependencies
In cert-manager 1.12, we have worked on reducing the impacts that unsupported dependencies have on our ability to patch CVEs.
Each binary now has its own go.mod
file. When a CVE is declared in an
unsupported minor version of a dependency, and that the only solution is to bump
the minor version of the dependency, we can now choose to make an exception and
bump that minor version but limit the impact to a single binary.
For example, in cert-manager 1.10, we chose not to fix a CVE reported in Helm
because it was forcing us to bump the minor versions of k8s.io/api
and many
other dependencies.
A side effect of the new go.mod
layout is that it's now easier to import
cert-manager in Go, in terms of transitive dependencies that might show up in
your go.mod
files or potential version conflicts between cert-manager and your
other dependencies.
The caveat here is that we still only recommend importing cert-manager in very
specific circumstances, and the module changes
mean that if you imported some paths (specifically under cmd
or some paths
under test
) you might see broken imports when you try to upgrade.
If you experience a break as part of this, we're sorry and we'd be interested to chat about it. The vast majority of projects using cert-manager should notice no impact, and there should be no runtime impact either.
You can read more about this change in the design document
20230302.gomod.md
.
Support for ephemeral service account tokens in Vault
cert-manager can now authenticate to Vault using ephemeral service account tokens (JWT). cert-manager already knew to authenticate to Vault using the Vault Kubernetes Auth Method but relied on insecure service account tokens stored in Secrets. You can now configure cert-manager in a secretless manner. With this new feature, cert-manager will create an ephemeral service account token on your behalf and use that to authenticate to Vault.
📖 Read about Secretless Authentication with a Service Account.
This change was implemented in the pull request
cert-manager#5502
.
Support for ingressClassName
in the HTTP-01 solver
cert-manager now supports the ingressClassName
field in the HTTP-01 solver. We
recommend using ingressClassName
instead of the field class
in your Issuers
and ClusterIssuers.
📖 Read more about
ingressClassName
in the documentation page HTTP01.
Liveness probe and healthz endpoint in the controller
A healthz HTTP server has been added to the controller component.
It serves a /livez
endpoint, which reports the health status of the leader election system.
If the leader process has failed to renew its lease but has unexpectedly failed to exit,
the /livez
endpoint will return an error code and an error message.
In conjunction with a new liveness probe in the controller Pod,
this will cause the controller to be restarted by the kubelet.
📖 Read more about this new feature in Best Practice: Use Liveness Probes.
Community
We extend our gratitude to all the open-source contributors who have made commits in this release, including:
- @andrewsomething
- @avi-08
- @dsonck92
- @e96wic
- @ExNG
- @erikgb
- @g-gaston
- @james-callahan
- @jkroepke
- @lucacome
- @malovme
- @maumontesilva
- @tobotg
- @TrilokGeer
- @vidarno
- @vinzent
- @waterfoul
- @yanggangtony
- @yulng
- @BobyMCbobs
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!
And special thanks to @erikgb for continuously great input and feedback and to @lucacome for always ensuring that our Kubernetes dependencies 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 Private CA Issuer.
In addition, massive thanks to Jetstack (by Venafi) for contributing developer time and resources towards the continued maintenance of cert-manager projects. Venafi has sponsored cert-manager 1.12 as a long term support release, meaning it will be maintained for much longer than other releases to provide a stable platform for enterprises to build upon.
v1.12.13
This patch release fixes the following vulnerabilities:
CVE-2024-6104
,
CVE-2024-24791
,
CVE-2024-25620
,
CVE-2024-26147
, and
CVE-2024-41110
.
ℹ️ This version contains an unusually large number of Go dependency changes for a patch release. The cert-manager maintainers are confident that it is stable because it has passed the same extensive suite of tests as previous
1.12
releases. But if you are importing cert-manager1.12
as a Go module you will notice that the minimum Go version is1.21
, and thek8s.io
modules are now updated to0.29
.This reason for the large number of Go dependency changes is that the Helm SDK has been updated to fix security vulnerabilities in
cmctl
. This required thek8s.io
modules to be updated from0.27
to0.29
in all components. Those newer minor versions of the Kubernetes modules pulled in new transitive dependencies, and incremented the minimum Go version from1.20
to1.21
.
Bugfixes
- Bump the
go-retryablehttp
dependency to fixCVE-2024-6104
(#7128, @SgtCoDFish) - Updated Helm dependency to resolve
CVE-2024-25620
andCVE-2024-26147
and Docker dependency to resolveCVE-2024-41110
(#7214, @ThatsMrTalbot) - Updates Go to
1.21.13
to resolveCVE-2024-24791
(#7216, @ThatsMrTalbot)
Dependencies
Added
github.com/antlr/antlr4/runtime/Go/antlr/v4
:8188dc5
github.com/google/gnostic-models
:v0.6.8
github.com/xhit/go-str2duration/v2
:v2.1.0
Changed
github.com/BurntSushi/toml
:v1.2.1 → v0.3.1
github.com/alecthomas/kingpin/v2
:v2.3.1 → v2.3.2
github.com/asaskevich/govalidator
:f61b66f → 21a406d
github.com/coreos/go-oidc
:v2.1.0+incompatible → v2.2.1+incompatible
github.com/coreos/go-semver
:v0.3.0 → v0.3.1
github.com/coreos/go-systemd/v22
:v22.4.0 → v22.5.0
github.com/cpuguy83/go-md2man/v2
:v2.0.2 → v2.0.3
github.com/davecgh/go-spew
:v1.1.1 → d8f796a
github.com/dustin/go-humanize
:v1.0.0 → v1.0.1
github.com/emicklei/go-restful/v3
:v3.9.0 → v3.11.0
github.com/evanphx/json-patch
:v5.6.0+incompatible → v5.7.0+incompatible
github.com/fatih/color
:v1.15.0 → v1.16.0
github.com/frankban/quicktest
:v1.10.0 → v1.14.3
github.com/fsnotify/fsnotify
:v1.6.0 → v1.7.0
github.com/go-openapi/jsonreference
:v0.20.1 → v0.20.2
github.com/golang-jwt/jwt/v4
:v4.4.2 → v4.5.0
github.com/golang/protobuf
:v1.5.3 → v1.5.4
github.com/google/cel-go
:v0.12.6 → v0.17.7
github.com/google/gnostic
:v0.6.9 → v0.5.7-v3refs
github.com/gorilla/websocket
:v1.4.2 → v1.5.0
github.com/hashicorp/go-hclog
:v1.2.0 → v1.6.3
github.com/hashicorp/go-retryablehttp
:v0.7.2 → v0.7.7
github.com/imdario/mergo
:v0.3.12 → v0.3.13
github.com/mattn/go-isatty
:v0.0.17 → v0.0.20
github.com/onsi/ginkgo/v2
:v2.9.5 → v2.13.0
github.com/onsi/gomega
:v1.27.7 → v1.29.0
github.com/prometheus/client_golang
:v1.15.1 → v1.16.0
github.com/prometheus/common
:v0.42.0 → v0.44.0
github.com/prometheus/procfs
:v0.9.0 → v0.10.1
github.com/sirupsen/logrus
:v1.9.0 → v1.9.3
github.com/spf13/cobra
:v1.7.0 → v1.8.0
go.etcd.io/bbolt
:v1.3.6 → v1.3.8
go.etcd.io/etcd/api/v3
:v3.5.7 → v3.5.10
go.etcd.io/etcd/client/pkg/v3
:v3.5.7 → v3.5.10
go.etcd.io/etcd/client/v2
:v2.305.7 → v2.305.10
go.etcd.io/etcd/client/v3
:v3.5.7 → v3.5.10
go.etcd.io/etcd/pkg/v3
:v3.5.7 → v3.5.10
go.etcd.io/etcd/raft/v3
:v3.5.7 → v3.5.10
go.etcd.io/etcd/server/v3
:v3.5.7 → v3.5.10
go.uber.org/atomic
:v1.9.0 → v1.10.0
go.uber.org/multierr
:v1.6.0 → v1.11.0
golang.org/x/exp
:a1ab85d → a9213ee
gopkg.in/natefinch/lumberjack.v2
:v2.0.0 → v2.2.1
k8s.io/api
:v0.27.2 → v0.29.7
k8s.io/apiextensions-apiserver
:v0.27.2 → v0.29.7
k8s.io/apimachinery
:v0.27.2 → v0.29.7
k8s.io/apiserver
:v0.27.2 → v0.29.7
k8s.io/client-go
:v0.27.2 → v0.29.7
k8s.io/code-generator
:v0.27.2 → v0.29.7
k8s.io/component-base
:v0.27.2 → v0.29.7
k8s.io/gengo
:c0856e2 → 9cce18d
k8s.io/klog/v2
:v2.100.1 → v2.110.1
k8s.io/kms
:v0.27.2 → v0.29.7
k8s.io/kube-aggregator
:v0.27.2 → v0.29.7
k8s.io/kube-openapi
:54b630e → 2dd684a
k8s.io/utils
:9f67429 → 3b25d92
sigs.k8s.io/apiserver-network-proxy/konnectivity-client
:v0.1.2 → v0.28.0
sigs.k8s.io/structured-merge-diff/v4
:v4.2.3 → v4.4.1
Removed
github.com/antlr/antlr4/runtime/Go/antlr
:v1.4.10
github.com/buger/jsonparser
:v1.1.1
github.com/docopt/docopt-go
:ee0de3b
github.com/flowstack/go-jsonschema
:v0.1.1
github.com/xhit/go-str2duration
:v1.2.0
go.opentelemetry.io/otel/exporters/otlp/internal/retry
:v1.10.0
v1.12.12
Bugfixes
- BUGFIX: fix issue that caused Vault issuer to not retry signing when an error was encountered. (#7113, @cert-manager-bot)
Other (Cleanup or Flake)
- Update
github.com/Azure/azure-sdk-for-go/sdk/azidentity
to addressCVE-2024-35255
(#7093, @ThatsMrTalbot)
v1.12.11
Other (Cleanup or Flake)
- Updated Go to
1.21.11
bringing in security fixes forarchive/zip
andnet/netip
. (#7077, @ThatsMrTalbot) - Upgrade Go to
1.21.10
, fixingGO-2024-2824
(https://github.com/advisories/GHSA-2jwv-jmq4-4j3r). (#7010, @inteon)
v1.12.10
Special thanks to @BobyMCbobs for reporting and testing the DigitalOcean issue!
Changes
Bug or Regression
- DigitalOcean: Ensure that only TXT records are considered for deletion when cleaning up after an ACME challenge (#6894, @SgtCoDFish)
- Bump
golang.org/x/net
to addressCVE-2023-45288
(#6933, @SgtCoDFish)
v1.12.9
Changes
Bug or Regression
- Allow
cert-manager.io/allow-direct-injection
in annotations (#6811, @jetstack-bot) - BUGFIX: JKS and PKCS12 stores now contain the full set of CAs specified by an issuer (#6813, @inteon)
- BUGFIX: fix race condition due to registering and using global
runtime.Scheme
variables (#6833, @inteon)
Other (Cleanup or Flake)
- Bump base images to the latest version. (#6843, @jetstack-bot)
- Upgrade go to 1.21.8: fixes
CVE-2024-24783
(#6826, @jetstack-bot) - Upgrade
google.golang.org/protobuf
: fixingGO-2024-2611
(#6830, @inteon)
v1.12.8
Changes
Bug or Regression
- BUGFIX:
LiteralSubjects
with a #= value can result in memory issues due to faulty BER parser (github.com/go-asn1-ber/asn1-ber
). (#6773, @jetstack-bot)
Other (Cleanup or Flake)
- Bump go to 1.20.14 (#6733, @SgtCoDFish)
- Cert-manager is now built with Go 1.20.13 (#6629, @SgtCoDFish)
- Fix CVE 2023 48795 by upgrading to golang.org/x/crypto@v0.17.0 (#6678, @wallrj)
- Fix
GHSA-7ww5-4wqc-m92c
by upgrading togithub.com/containerd/containerd@v1.7.12
(#6689, @wallrj)
v1.12.7
This patch release contains fixes for the following security vulnerabilities in the cert-manager-controller:
GO-2023-2382
: Denial of service via chunk extensions innet/http
If you use ArtifactHub Security report or trivy, this patch will also silence the following warning about a vulnerability in code which is imported but not used by the cert-manager-controller:
CVE-2023-47108
: DoS vulnerability inotelgrpc
due to unbound cardinality metrics.
An ongoing security audit of cert-manager suggested some changes to the webhook code to mitigate DoS attacks, and these are included in this patch release.
Changes
Feature
Bug or Regression
- The webhook server now returns HTTP error 413 (Content Too Large) for requests with body size
>= 3MiB
. This is to mitigate DoS attacks that attempt to crash the webhook process by sending large requests that exceed the available memory (#6506, @inteon). - The webhook server now returns HTTP error 400 (Bad Request) if the request contains an empty body (#6506, @inteon).
- The webhook server now returns HTTP error 500 (Internal Server Error) rather than crashing, if the code panics while handling a request (#6506, @inteon).
- Mitigate potential Slowloris attacks by setting
ReadHeaderTimeout
in allhttp.Server
instances (#6539, @wallrj). - Upgrade
otel
anddocker
to fix:CVE-2023-47108
andGHSA-jq35-85cj-fj4p
(#6513, @inteon).
Dependencies
Added
cloud.google.com/go/dataproc/v2
:v2.0.1
Changed
cloud.google.com/go/aiplatform
:v1.45.0 → v1.48.0
cloud.google.com/go/analytics
:v0.21.2 → v0.21.3
cloud.google.com/go/baremetalsolution
:v0.5.0 → v1.1.1
cloud.google.com/go/batch
:v0.7.0 → v1.3.1
cloud.google.com/go/beyondcorp
:v0.6.1 → v1.0.0
cloud.google.com/go/bigquery
:v1.52.0 → v1.53.0
cloud.google.com/go/cloudbuild
:v1.10.1 → v1.13.0
cloud.google.com/go/cloudtasks
:v1.11.1 → v1.12.1
cloud.google.com/go/compute
:v1.21.0 → v1.23.0
cloud.google.com/go/contactcenterinsights
:v1.9.1 → v1.10.0
cloud.google.com/go/container
:v1.22.1 → v1.24.0
cloud.google.com/go/datacatalog
:v1.14.1 → v1.16.0
cloud.google.com/go/dataplex
:v1.8.1 → v1.9.0
cloud.google.com/go/datastore
:v1.12.1 → v1.13.0
cloud.google.com/go/datastream
:v1.9.1 → v1.10.0
cloud.google.com/go/deploy
:v1.11.0 → v1.13.0
cloud.google.com/go/dialogflow
:v1.38.0 → v1.40.0
cloud.google.com/go/documentai
:v1.20.0 → v1.22.0
cloud.google.com/go/eventarc
:v1.12.1 → v1.13.0
cloud.google.com/go/firestore
:v1.11.0 → v1.12.0
cloud.google.com/go/gkebackup
:v0.4.0 → v1.3.0
cloud.google.com/go/gkemulticloud
:v0.6.1 → v1.0.0
cloud.google.com/go/kms
:v1.12.1 → v1.15.0
cloud.google.com/go/maps
:v0.7.0 → v1.4.0
cloud.google.com/go/metastore
:v1.11.1 → v1.12.0
cloud.google.com/go/policytroubleshooter
:v1.7.1 → v1.8.0
cloud.google.com/go/pubsub
:v1.32.0 → v1.33.0
cloud.google.com/go/run
:v0.9.0 → v1.2.0
cloud.google.com/go/servicedirectory
:v1.10.1 → v1.11.0
cloud.google.com/go/speech
:v1.17.1 → v1.19.0
cloud.google.com/go/translate
:v1.8.1 → v1.8.2
cloud.google.com/go/video
:v1.17.1 → v1.19.0
cloud.google.com/go/vmwareengine
:v0.4.1 → v1.0.0
cloud.google.com/go
:v0.110.4 → v0.110.7
github.com/felixge/httpsnoop
:v1.0.3 → v1.0.4
github.com/go-logr/logr
:v1.2.4 → v1.3.0
github.com/golang/glog
:v1.1.0 → v1.1.2
github.com/google/go-cmp
:v0.5.9 → v0.6.0
github.com/google/uuid
:v1.3.0 → v1.3.1
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
:v0.45.0 → v0.46.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
:v0.44.0 → v0.46.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
:v1.19.0 → v1.20.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace
:v1.19.0 → v1.20.0
go.opentelemetry.io/otel/metric
:v1.19.0 → v1.20.0
go.opentelemetry.io/otel/sdk
:v1.19.0 → v1.20.0
go.opentelemetry.io/otel/trace
:v1.19.0 → v1.20.0
go.opentelemetry.io/otel
:v1.19.0 → v1.20.0
go.uber.org/goleak
:v1.2.1 → v1.3.0
golang.org/x/oauth2
:v0.10.0 → v0.11.0
golang.org/x/sys
:v0.13.0 → v0.14.0
google.golang.org/genproto/googleapis/api
:782d3b1 → b8732ec
google.golang.org/genproto/googleapis/rpc
:782d3b1 → b8732ec
google.golang.org/genproto
:782d3b1 → b8732ec
google.golang.org/grpc
:v1.58.3 → v1.59.0
Removed
cloud.google.com/go/dataproc
:v1.12.0
v1.12.6
v1.12.6 fixes some CVE alerts and a Venafi issuer bug
Changes
Bug or Regression
- Bump
golang.org/x/net v0.15.0 => v0.17.0
as part of addressingCVE-2023-44487
/CVE-2023-39325
(#6431, @SgtCoDFish) - The Venafi issuer now properly resets the certificate and should no longer get stuck with
WebSDK CertRequest Module Requested Certificate
orThis certificate cannot be processed while it is in an error state. Fix any errors, and then click Retry.
. (#6401, @jetstack-bot)
Other (Cleanup or Flake)
- Bump go to 1.20.10 to address
CVE-2023-39325
. Also bumps base images. (#6412, @SgtCoDFish)
v1.12.5
v1.12.5 contains a backport for a name collision bug that was found in v1.13.0
Changes
Bug or Regression
- BUGFIX: fix CertificateRequest name collision bug in StableCertificateRequestName feature. (#6359, @jetstack-bot)
Other (Cleanup or Flake)
- Updated base images to the latest version. (#6372, @inteon)
- Upgrade Go from 1.20.7 to 1.20.8. (#6371, @jetstack-bot)
v1.12.4
v1.12.4 contains an important security fix that addresses CVE-2023-29409.
Changes
- Fixes an issue where cert-manager would incorrectly reject two IP addresses as
being unequal when they should have compared equal. This would be most
noticeable when using an IPv6 address which doesn't match how Go's
net.IP.String()
function would have printed that address. (#6297, @SgtCoDFish) - Use Go 1.20.7 to fix a security issue in Go's
crypto/tls
library. (#6318, @maelvls)
v1.12.3
v1.12.3 contains a bug fix for the cainjector which addresses a memory leak!
Changes
- BUGFIX[cainjector]: 1-character bug was causing invalid log messages and a memory leak (#6235, @jetstack-bot)
v1.12.2
v1.12.2 is a bugfix release, but includes a known issue. You should prefer upgrading to the latest patch version available for 1.12.
Known issues
- cainjector contains a memory leak due to re-assignment of a log variable (see https://github.com/cert-manager/cert-manager/issues/6217). The fix will be released in v1.12.3. See https://github.com/cert-manager/cert-manager/pull/6232 for context.
Changes
- BUGFIX:
cmctl check api --wait 0
exited without output; we now make sure we perform the API check at least once (#6116, @jetstack-bot)
v1.12.1
The v1.12.1 release contains a couple dependency bumps and changes to ACME external webhook library. Note that v1.12.1 contains a known issue, and you should prefer upgrading to the latest patch version available for 1.12.
Known issues
cmctl
API check is broken in v1.12.1. We suggest that you do not upgradecmctl
to this version. The fix will be released in v1.12.2. See #6116 for context.- cainjector contains a memory leak due to re-assignment of a log variable (see https://github.com/cert-manager/cert-manager/issues/6217). The fix will be released in v1.12.3. See https://github.com/cert-manager/cert-manager/pull/6232 for context.
Other
- Don't run API Priority and Fairness controller in webhook's extension apiserver (#6085, @irbekrm)
- Adds a warning for folks to not use controller feature gates helm value to configure webhook feature gates (#6100, @irbekrm)
Uncategorized
- Updates Kubernetes libraries to
v0.27.2
. (#6077, @lucacome) - Updates controller-runtime to
v0.15.0
(#6098, @lucacome)
v1.12.0
Changes
Feature
- Helm: Added PodDisruptionBudgets for cert-manager components to the Helm chart (disabled by default). (#3931, @e96wic)
- Added support for JSON logging (using
--logging-format=json
) (#5828, @malovme) - Added the --concurrent-workers flag that lets you control the number of concurrent workers for each of our controllers. (#5936, @inteon)
- Adds
acme.solvers.http01.ingress.podTemplate.spec.imagePullSecrets
field to issuer spec to allow to specify image pull secrets for the ACME HTTP01 solver pod. (#5801, @malovme) - cainjector:
- 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.
- The
--watch-certs
flag was renamed to--enable-certificates-data-source
. (#5766, @irbekrm)
- 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
,--enable-certificate-owner-ref
, and--dns01-recursive-nameservers-only
through Helm values. (#5614, @jkroepke) - 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)
- 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
serviceAccountRef
field, 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 thevault.auth
field when creating an Issuer or ClusterIssuer. Previously, it was possible to create an Issuer or ClusterIssuer with an invalid value forvault.auth
. (#5502, @maelvls) - The cert-manager controller container of the controller Pod now has a
/livez
endpoint 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=5
flag) (#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: 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)
Documentation
- Helm: the dead links in
values.yaml
are now working (#5999, @SgtCoDFish)
Bug or Regression
- When using the
literalSubject
field on a Certificate resource, the IPs, URIs, DNS names, and email addresses segments are now properly compared. (#5747, @inteon) - When using the
jks
andpkcs12
fields on a Certificate resource with a CA issuer that doesn't set theca.crt
in the Secret resource, cert-manager no longer loop trying to copyca.crt
intotruststore.jks
ortruststore.p12
. (#5972, @vinzent) - Cmctl renew now prints an error message unless Certificate name(s) or --all are supplied (#5896, @maumontesilva)
- 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-image
given to the variableacmesolver.extraArgs
now has precedence over the variableacmesolver.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)
- 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)
Other (Cleanup or Flake)
- ACME account registration is now re-verified if account key is manually changed. (#5949, @TrilokGeer)
- Add
make go-workspace
target 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)
- The memory usage of the controller has been reduced by only caching the metadata of Pods and Services. (#5976, @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.io
CRD is not installed in the cluster, now need to pass--watch-certificates=false
flag to cainjector else it will not start. Users who only use cainjector as cert-manager's internal component and have a large number ofCertificate
resources in cluster can pass--watch-certificates=false
to avoid cainjector from cachingCertificate
resources 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)
- The acmesolver pods created by cert-manager now have
automountServiceAccountToken
turned off. (#5754, @wallrj) - The controller memory usage has been further decreased by ignoring annotations, labels and managed fields when caching Secret resources. (#5966, @irbekrm)
- 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
SecretsFilteredCaching
feature 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 thecontroller.cert-manager.io/fao: true
label. (#5824, @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 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)
- We are now testing with Kubernetes v1.27.1 by default. (#5979, @irbekrm)
- 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.secretName
is a validSecret
name (#5967, @avi-08) certificate.spec.secretName
Secrets will now be labelled withcontroller.cert-manager.io/fao
label (#5660, @irbekrm)
Uncategorized
- 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)
Footnotes
-
fao = 'for attention of' ↩