-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(AzureDNS): Add support for Workload Identity #5570
feat(AzureDNS): Add support for Workload Identity #5570
Conversation
Signed-off-by: Igor Beliakov <demtis.register@gmail.com>
Signed-off-by: Igor Beliakov <demtis.register@gmail.com>
Hi @weisdd. Thanks for your PR. I'm waiting for a cert-manager member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
@wallrj you might want to review this PR as well since you worked on #5308 @pinkfloydx33 Not sure what's the best way to build images of cert-manager. I did the following:
RELEASE_VERSION := $(shell git describe --tags --match='v*' --abbrev=14) to:
make cert-manager-controller-linux
docker tag cert-manager-controller-amd64:v1.10.0-wi quay.io/weisdd/cert-manager-controller:v1.10.0-wi
docker push quay.io/weisdd/cert-manager-controller:v1.10.0-wi Unless you want to build your own image, you can use mine: |
I am dealing with hurricane and spotty internet. I cannot review nor test until probably Friday. I can use your image though, that will be easiest. Thanks |
LGTM. Verified in my sandbox cluster:
All cases behave as expected. |
@pinkfloydx33 great to see that you survived the hurricane, and thanks for the tests! :) |
Glad to help....Now now we need to get this approved! /fingers-crossed |
A general question. Don't we have to make any changes in the CRDs? |
@sathyanarays I think there's no reason for that as the implementation suggested in the PR fits the existing "ambient-credentials" model very well. - It's of the same nature, and Workload Identity is considered only in case a unique environment variable is present ( |
@weisdd looks great! Would it be possible to also add a test (I would like to see the |
@inteon thanks :) |
Signed-off-by: Igor Beliakov <demtis.register@gmail.com>
@inteon I've added the test. It's a bit monstrous in terms of its size, but that helped to cover token refresh, clientID overrides, and tenantID value. /usr/local/go/bin/go test -timeout 30s -v github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/azuredns
=== RUN TestLiveAzureDnsPresent
azuredns_test.go:53: skipping live test
--- SKIP: TestLiveAzureDnsPresent (0.00s)
=== RUN TestLiveAzureDnsCleanUp
azuredns_test.go:64: skipping live test
--- SKIP: TestLiveAzureDnsCleanUp (0.00s)
=== RUN TestInvalidAzureDns
--- PASS: TestInvalidAzureDns (0.00s)
=== RUN TestGetAuthorizationFederatedSPT
=== RUN TestGetAuthorizationFederatedSPT/token_refresh
=== RUN TestGetAuthorizationFederatedSPT/clientID_overrides_through_managedIdentity_section
--- PASS: TestGetAuthorizationFederatedSPT (0.00s)
--- PASS: TestGetAuthorizationFederatedSPT/token_refresh (0.00s)
--- PASS: TestGetAuthorizationFederatedSPT/clientID_overrides_through_managedIdentity_section (0.00s)
PASS
ok github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/azuredns 0.341s |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @weisdd for picking up this work!
And apologies for the delayed review.
I've been staring at this code today and think I'm finally understanding it.
Here are a few initial questions and comments.
I'll try and test it tomorrow.
// adal does not offer methods to dynamically replace a federated token, thus we need to have a wrapper to make sure | ||
// we're using up-to-date secret while requesting an access token |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please elaborate on this?
I looked at the default refresh function and it appears to use the RefreshToken
that accompanies the latest AccessToken
to update the AccessToken before it expires.
Why is that not desirable? Add some further explanation to the comment.
I also went looking at the azure-workload-identity msal-go example for inspiration and noticed a coupe of things:
- They used to use
autorest.NewBearerAuthorizerCallback
with a callback to load the K8S service account token from the filesystem. Does that solve the problem of missing "methods to dynamically replace a federated token" more elegantly than this? - That example has recently been updated to to use azidentity and azsecrets sdk : "removing the dependency on autorest and switching to use track 2 sdks". Would it make sense to do that here too? I note that the autorest library is deprecated. In fact I think it's been suggested in the previous PR that we should do that first:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No worries, thanks for the review! :)
Please elaborate on this?
I looked at the default refresh function and it appears to use the RefreshToken that accompanies the latest AccessToken to update the AccessToken before it expires.
Why is that not desirable? Add some further explanation to the comment.
Well, as I understand, there's no concept of RefreshToken
for Workload Identity. An app is always supposed to exchange a federated token for an access token. Before working on the PR for cert-manager, I prepared a similar patch for external-dns (sadly, stays unreviewed), and while doing so, I dumped both ServicePrincipalToken
(spt
in code) and an access token (returned by newSPT.Token()
), in both cases RefreshToken
is empty.
1. They used to use autorest.NewBearerAuthorizerCallback with a callback to load the K8S service account token from the filesystem. Does that solve the problem of missing "methods to dynamically replace a federated token" more elegantly than this?
Just by looking through the code, I'm not sure if it offers renewal. Something to be tested for more than 24h (AAD token will expire after a day).
I like my current code for the fact that it doesn't go too deep into implementation internals of the library, it rather acts as a simple wrapper. Though, I'm not a software engineer (SRE), so I'd trust your taste if you suggest to go into a different direction.
2. That example has recently been updated to to Azure/azure-workload-identity#639 : "removing the dependency on autorest and switching to use track 2 sdks". Would it make sense to do that here too? I note that the autorest library is deprecated. In fact I think it's been suggested in the previous PR that we should do that first:
#5452
Indeed, the library will be maintained only till April next year, so, in the long run, cert-manager should definitely migrate away from it.
And I saw the PR, but there's no estimate on when it'll get merged, so I hoped that an incremental change like in my PR will make it into the code sooner. And, actually, azure-sdk-for-go will also require a workaround for Workload Identity at the moment as the native supported will go beta only in December or January: Azure/azure-sdk-for-go#15615
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added more comments as requested.
// Need to call Refresh(), otherwise .Token() will be empty | ||
err = newSPT.Refresh() | ||
if err != nil { | ||
return nil, err | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Calling Refresh
sends the K8S ServiceAccountToken (JWT) to Azure's Oauth endpoint and gets back an Oauth AccessToken and RefreshToken, right?
Maybe add an additional comment explaining that this results in a roundtrip to the Azure auth API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When there's a special label in place (e.g. on a ServiceAccount
: azure.workload.identity/use: "true"
), a mutation webhook modifies a pod's spec to add a projected volume with a federated token. The path to the token is always the same, it's just a concatenation of these two constants:
TokenFilePathName = "azure-identity-token"
TokenFileMountPath = "/var/run/secrets/azure/tokens" // #nosec
https://github.com/Azure/azure-workload-identity/blob/231c6be82969efb51f0539397e6ab268c1eb8eca/pkg/webhook/consts.go#L54
To avoid hardcoding, the apps are supposed to find it through AZURE_FEDERATED_TOKEN_FILE
env.
The token gets updated once an hour by default.
This token is sent to the Oauth endpoint. Response contains only an AccessToken
(valid for 24h), RefreshToken
is not present.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added more comments as requested.
@@ -84,7 +114,7 @@ func getAuthorization(env azure.Environment, clientID, clientSecret, subscriptio | |||
} | |||
return spt, nil | |||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It took me a while to realise that the clientID
parameter will be empty in the case of ambient credentials, but that in that case, the clientID may be supplied via the managedIdentity
parameter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's just the same process as for pod managed identities :)
Signed-off-by: Igor Beliakov <demtis.register@gmail.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @weisdd
I've finally got it working and I've been documenting the steps here:
I will do some more testing before adding a lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks everyone for your efforts.
I tested this and wrote a short tutorial explaining how I test it
It works well in my simple tests and I trust that you guys have done your own testing.
Let's merge it, I'll create another cert-manager alpha release so that more people can test the feature more easily,
and in particular I'd like other to test the existing AAD ambient credentials feature,
because I couldn't get that working, probably because I don't know AKS well enough.
/lgtm
/approve
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: wallrj, weisdd The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/retest |
/kind feature |
@weisdd @pinkfloydx33 @karlschriek FYI This feature is included in our latest pre-release. Please do some testing if you have time: |
Thanks. Wont be able to to do anything until tomorrow at the earliest, but will definitely test it out |
@wallrj Alpha image working great/as expected. Thanks everyone who put effort into this! |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [cert-manager](https://github.com/cert-manager/cert-manager) | minor | `v1.10.1` -> `v1.11.0` | --- ### Release Notes <details> <summary>cert-manager/cert-manager</summary> ### [`v1.11.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.0) [Compare Source](cert-manager/cert-manager@v1.10.2...v1.11.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. `v1.11.0` includes a drastic reduction in cert-manager's runtime memory usage, a slew of improvements to AKS integrations and various other tweaks, fixes and improvements, all towards cert-manager's goal of being the best way to handle certificates in modern Cloud Native applications. #### Community Thanks again to all open-source contributors with commits in this release, including: - [@​cmcga1125](https://github.com/cmcga1125) - [@​karlschriek](https://github.com/karlschriek) - [@​lvyanru8200](https://github.com/lvyanru8200) - [@​mmontes11](https://github.com/mmontes11) - [@​pinkfloydx33](https://github.com/pinkfloydx33) - [@​sathyanarays](https://github.com/sathyanarays) - [@​weisdd](https://github.com/weisdd) - [@​yann-soubeyrand](https://github.com/yann-soubeyrand) - [@​joycebrum](https://github.com/joycebrum) - [@​Git-Jiro](https://github.com/Git-Jiro) - [@​thib-mary](https://github.com/thib-mary) - [@​yk](https://github.com/yk) - [@​RomanenkoDenys](https://github.com/RomanenkoDenys) - [@​lucacome](https://github.com/lucacome) - [@​yanggangtony](https://github.com/yanggangtony) Thanks also to the following cert-manager maintainers for their contributions during this release: - [@​wallrj](https://github.com/wallrj) - [@​irbekrm](https://github.com/irbekrm) - [@​maelvls](https://github.com/maelvls) - [@​SgtCoDFish](https://github.com/SgtCoDFish) - [@​inteon](https://github.com/inteon) - [@​jakexks](https://github.com/jakexks) - [@​JoshVanL](https://github.com/JoshVanL) Thanks also to the [CNCF](https://www.cncf.io/), 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](https://github.com/cert-manager/aws-privateca-issuer). In addition, massive thanks to [Jetstack](https://www.jetstack.io/) (by [Venafi](https://www.venafi.com/)) for contributing developer time and resources towards the continued maintenance of cert-manager projects. #### Changes since cert-manager `v1.10` For an overview of new features, see the [v1.11 release notes](https://cert-manager.io/docs/release-notes/release-notes-1.11/)! ##### Feature - Helm: allow configuring the image used by ACME HTTP-01 solver ([#​5554](cert-manager/cert-manager#5554), [@​yann-soubeyrand](https://github.com/yann-soubeyrand)) - Add the `--max-concurrent-challenges` controller flag to the helm chart ([#​5638](cert-manager/cert-manager#5638), [@​lvyanru8200](https://github.com/lvyanru8200)) - Adds the ability to specify a custom CA bundle in Issuers when connecting to an ACME server ([#​5644](cert-manager/cert-manager#5644), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Enable testing against Kubernetes 1.26 and test with Kubernetes 1.26 by default ([#​5646](cert-manager/cert-manager#5646), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Experimental make targets for pushing images to an OCI registry using `ko` and redeploying cert-manager to the cluster referenced by your current KUBECONFIG context. ([#​5655](cert-manager/cert-manager#5655), [@​wallrj](https://github.com/wallrj)) - Add ability to run acmesolver pods as root if desired. The default is still to run as non-root. ([#​5546](cert-manager/cert-manager#5546), [@​cmcga1125](https://github.com/cmcga1125)) - Add support for DC and UID in `LiteralSubject` field, all mandatory OIDs are now supported for LDAP certificates (rfc4514). ([#​5587](cert-manager/cert-manager#5587), [@​SpectralHiss](https://github.com/SpectralHiss)) - Add support for Workload Identity to AzureDNS resolver ([#​5570](cert-manager/cert-manager#5570), [@​weisdd](https://github.com/weisdd)) - Breaking: updates the gateway API integration to use the more stable v1beta1 API version. Any users of the cert-manager `ExperimentalGatewayAPISupport` alpha feature must ensure that `v1beta` of Gateway API is installed in cluster. ([#​5583](cert-manager/cert-manager#5583), [@​lvyanru8200](https://github.com/lvyanru8200)) - Certificate secrets get refreshed if the keystore format change ([#​5597](cert-manager/cert-manager#5597), [@​sathyanarays](https://github.com/sathyanarays)) - Introducing UseCertificateRequestBasicConstraints feature flag to enable Basic Constraints in the Certificate Signing Request ([#​5552](cert-manager/cert-manager#5552), [@​sathyanarays](https://github.com/sathyanarays)) - Return error when Gateway has a cross-namespace secret ref ([#​5613](cert-manager/cert-manager#5613), [@​mmontes11](https://github.com/mmontes11)) - Signers fire an event on CertificateRequests which have not been approved yet. Used for informational purposes so users understand why a request is not progressing. ([#​5535](cert-manager/cert-manager#5535), [@​JoshVanL](https://github.com/JoshVanL)) ##### Bug or Regression - Don't log errors relating to self-signed issuer checks for external issuers ([#​5681](cert-manager/cert-manager#5681), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fixed a bug in AzureDNS resolver that led to early reconciliations in misconfigured Workload Identity-enabled setups (when Federated Identity Credential is not linked with a controller's k8s service account) ([#​5663](cert-manager/cert-manager#5663), [@​weisdd](https://github.com/weisdd)) - Use manually specified temporary directory template when verifying CRDs ([#​5680](cert-manager/cert-manager#5680), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - `vcert` was upgraded to `v4.23.0`, fixing two bugs in cert-manager. The first bug was preventing the Venafi issuer from renewing certificates when using TPP has been fixed. You should no longer see your certificates getting stuck with `WebSDK CertRequest Module Requested Certificate` or `This certificate cannot be processed while it is in an error state. Fix any errors, and then click Retry.`. The second bug that was fixed prevented the use of `algorithm: Ed25519` in Certificate resources with VaaS. ([#​5674](cert-manager/cert-manager#5674), [@​maelvls](https://github.com/maelvls)) - Upgrade `golang/x/net` to fix CVE-2022-41717 ([#​5632](cert-manager/cert-manager#5632), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Bug fix: When using feature gates with the helm chart, enable feature gate flags on webhook as well as controller ([#​5584](cert-manager/cert-manager#5584), [@​lvyanru8200](https://github.com/lvyanru8200)) - Fix `golang.org/x/text` vulnerability ([#​5562](cert-manager/cert-manager#5562), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fixes a bug that caused the Vault issuer to omit the Vault namespace in requests to the Vault API. ([#​5591](cert-manager/cert-manager#5591), [@​wallrj](https://github.com/wallrj)) - The Venafi Issuer now supports TLS 1.2 renegotiation, so that it can connect to TPP servers where the vedauth API endpoints are configured to *accept* client certificates. (Note: This does not mean that the Venafi Issuer supports client certificate authentication). ([#​5568](cert-manager/cert-manager#5568), [@​wallrj](https://github.com/wallrj)) - Upgrade to go 1.19.4 to fix CVE-2022-41717 ([#​5619](cert-manager/cert-manager#5619), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Upgrade to latest go minor release ([#​5559](cert-manager/cert-manager#5559), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Ensure `extraArgs` in Helm takes precedence over the new acmesolver image options ([#​5702](cert-manager/cert-manager#5702), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fix cainjector's --namespace flag. Users who want to prevent cainjector from reading all Secrets and Certificates in all namespaces (i.e to prevent excessive memory consumption) can now scope it to a single namespace using the --namespace flag. A cainjector that is only used as part of cert-manager installation only needs access to the cert-manager installation namespace. ([#​5694](cert-manager/cert-manager#5694), [@​irbekrm](https://github.com/irbekrm)) - Fixes a bug where cert-manager controller was caching all Secrets twice ([#​5691](cert-manager/cert-manager#5691), [@​irbekrm](https://github.com/irbekrm)) ##### Other - `certificate.spec.secretName` Secrets will now be labelled with the `controller.cert-manager.io/fao` label ([#​5703](cert-manager/cert-manager#5703), [@​irbekrm](https://github.com/irbekrm)) - Upgrade to go 1.19.5 ([#​5714](cert-manager/cert-manager#5714), [@​yanggangtony](https://github.com/yanggangtony)) ##### Known issues - There is a bug in conformance tests for external DNS webhook implementations that was introduced in this release, see cert-manager/cert-manager#5725 If you are importing cert-manager as a library to run conformance tests against your DNS webhook solver implementation, please make sure that you import a version with a fix, see cert-manager/cert-manager#5725 (comment) ### [`v1.10.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.10.2) [Compare Source](cert-manager/cert-manager@v1.10.1...v1.10.2) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. v1.10.2 is primarily a performance enhancement release which might reduce memory consumption by up to 50% in some cases thanks to some brilliant work by [@​irbekrm](https://github.com/irbekrm)! 🎉 It also patches several vulnerabilities reported by scanners and updates the base images used for cert-manager containers. In addition, it removes a potentially confusing log line which had been introduced in v1.10.0 which implied that an error had occurred when using external issuers even though there'd been no error. #### Changes since `v1.10.1` ##### Feature - Enable support for Kubernetes 1.26 in tests ([#​5647](cert-manager/cert-manager#5647), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Bug or Regression - Fixes a bug where the cert-manager controller was caching all Secrets twice ([#​5704](cert-manager/cert-manager#5704), [@​irbekrm](https://github.com/irbekrm)) - Bump helm version to fix CVE-2022-23525 ([#​5676](cert-manager/cert-manager#5676), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Don't log errors relating to selfsigned issuer checks for external issuers ([#​5687](cert-manager/cert-manager#5687), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fix `golang.org/x/text` vulnerability ([#​5592](cert-manager/cert-manager#5592), [@​SgtCoDfish](https://github.com/SgtCoDfish)) - Upgrade golang/x/net to fix CVE-2022-41717 ([#​5635](cert-manager/cert-manager#5635), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Upgrade to go 1.19.4 to fix CVE-2022-41717 ([#​5620](cert-manager/cert-manager#5620), [@​SgtCoDfish](https://github.com/SgtCoDfish)) - Use manually specified tmpdir template when verifying CRDs ([#​5682](cert-manager/cert-manager#5682), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Other (Cleanup or Flake) - Bump distroless base images to latest versions ([#​5677](cert-manager/cert-manager#5677), [@​SgtCoDFish](https://github.com/SgtCoDFish)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMDEuMCIsInVwZGF0ZWRJblZlciI6IjM0LjEwMS4wIn0=--> Co-authored-by: Michael Wittig <michael.wittig@posteo.de> Co-authored-by: drone <pipeline@drone.os.sh4ke.rocks> Reviewed-on: https://gitea.sh4ke.rocks/sh4ke/k8s-projects/pulls/70
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [cert-manager](https://github.com/cert-manager/cert-manager) | minor | `v1.8.2` -> `v1.12.3` | --- ### Release Notes <details> <summary>cert-manager/cert-manager (cert-manager)</summary> ### [`v1.12.3`](https://github.com/cert-manager/cert-manager/releases/tag/v1.12.3) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.12.2...v1.12.3) #### Changes by Kind ##### Bugfixes - BUGFIX\[cainjector]: 1-character bug was causing invalid log messages and a memory leak ([#​6235](https://github.com/cert-manager/cert-manager/issues/6235), [@​jetstack-bot](https://github.com/jetstack-bot)) ### [`v1.12.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.12.2) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.12.1...v1.12.2) #### 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 by Kind ##### Bugfixes - BUGFIX: `cmctl check api --wait 0` exited without output; we now make sure we perform the API check at least once ([#​6116](https://github.com/cert-manager/cert-manager/issues/6116), [@​jetstack-bot](https://github.com/jetstack-bot)) ### [`v1.12.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.12.1) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.12.0...v1.12.1) ### v1.12.1 This release contains a couple dependency bumps and changes to ACME external webhook library. #### Known issues - [`cmctl` API check](https://cert-manager.io/docs/installation/verify/) is broken in v1.12.1. We suggest that you do not upgrade `cmctl` to this version. The fix will be released in v1.12.2. See [#​6116](https://github.com/cert-manager/cert-manager/issues/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. #### Changes by Kind ##### Other (Cleanup or Flake) - Don't run API Priority and Fairness controller in webhook's extension apiserver ([#​6085](https://github.com/cert-manager/cert-manager/pull/6085), [@​irbekrm](https://github.com/irbekrm)) - Adds a warning for folks to not use controller feature gates helm value to configure webhook feature gates ([#​6100](https://github.com/cert-manager/cert-manager/pull/6100), [@​irbekrm](https://github.com/irbekrm)) ##### Uncategorized - Updates Kubernetes libraries to `v0.27.2`. ([#​6077](https://github.com/cert-manager/cert-manager/pull/6077), [@​lucacome](https://github.com/lucacome)) - Updates controller-runtime to `v0.15.0` ([#​6098](https://github.com/cert-manager/cert-manager/pull/6098), [@​lucacome](https://github.com/lucacome)) ### [`v1.12.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.12.0) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.11.4...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. The full release notes are available at https://cert-manager.io/docs/release-notes/release-notes-1.12. #### Known issues - [`cmctl` API check](https://cert-manager.io/docs/installation/verify/) is broken in v1.12.1. We suggest that you do not upgrade `cmctl` to this version. The fix will be released in v1.12.2. See [#​6116](https://github.com/cert-manager/cert-manager/issues/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. ### Community Thanks again to all open-source contributors with commits in this release, including: - [@​malovme](https://github.com/malovme) - [@​e96wic](https://github.com/e96wic) - [@​ExNG](https://github.com/ExNG) - [@​waterfoul](https://github.com/waterfoul) - [@​jkroepke](https://github.com/jkroepke) - [@​andrewsomething](https://github.com/andrewsomething) - [@​yulng](https://github.com/yulng) - [@​tobotg](https://github.com/tobotg) - [@​maumontesilva](https://github.com/maumontesilva) - [@​avi-08](https://github.com/avi-08) - [@​vinzent](https://github.com/vinzent) - [@​TrilokGeer](https://github.com/TrilokGeer) - [@​g-gaston](https://github.com/g-gaston) - [@​james-callahan](https://github.com/james-callahan) - [@​lucacome](https://github.com/lucacome) - [@​yanggangtony](https://github.com/yanggangtony) - [@​vidarno](https://github.com/vidarno) - [@​ctrought](https://github.com/ctrought) - [@​Robfz](https://github.com/Robfz) - [@​dsonck92](https://github.com/dsonck92) - [@​rayandas](https://github.com/rayandas) - [@​olekfur](https://github.com/olekfur) - [@​ptrc-n](https://github.com/ptrc-n) - [@​bradjones1](https://github.com/bradjones1) - [@​gdvalle](https://github.com/gdvalle) Thanks also to the following cert-manager maintainers for their contributions during this release: - [@​inteon](https://github.com/inteon) - [@​wallrj](https://github.com/wallrj) - [@​maelvls](https://github.com/maelvls) - [@​SgtCoDFish](https://github.com/SgtCoDFish) - [@​irbekrm](https://github.com/irbekrm) - [@​jakexks](https://github.com/jakexks) - [@​JoshVanL](https://github.com/JoshVanL) - [@​munnerz](https://github.com/munnerz) 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](https://github.com/erikgb) for continuously great input and feedback and to [@​lucacome](https://github.com/lucacome) for always ensuring that our kube deps are up to date! Thanks also to the [CNCF](https://www.cncf.io/), 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](https://github.com/cert-manager/aws-privateca-issuer). In addition, massive thanks to [Jetstack](https://www.jetstack.io/) (by [Venafi](https://www.venafi.com/)) for contributing developer time and resources towards the continued maintenance of cert-manager projects. #### Changes by Kind ##### Feature - **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](https://github.com/cert-manager/cert-manager/pull/5880), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Added support for JSON logging (using --logging-format=json) ([#​5828](https://github.com/cert-manager/cert-manager/pull/5828), [@​malovme](https://github.com/malovme)) - Added the `--concurrent-workers` flag that lets you control the number of concurrent workers for each of our controllers. ([#​5936](https://github.com/cert-manager/cert-manager/pull/5936), [@​inteon](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5801), [@​malovme](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5766), [@​irbekrm](https://github.com/irbekrm)) - Helm: Added PodDisruptionBudgets for cert-manager components to the Helm chart (disabled by default). ([#​3931](https://github.com/cert-manager/cert-manager/pull/3931), [@​e96wic](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5788), [@​ExNG](https://github.com/ExNG)) - Helm: you can now add volumes and volume mounts via Helm variables for the cainjector, webhook, and startupapicheck. ([#​5668](https://github.com/cert-manager/cert-manager/pull/5668), [@​waterfoul](https://github.com/waterfoul)) - Helm: you can now enable the flags `--dns01-recursive-nameservers`, `--enable-certificate-owner-ref`, and `--dns01-recursive-nameservers-only` through Helm values. ([#​5614](https://github.com/cert-manager/cert-manager/pull/5614), [@​jkroepke](https://github.com/jkroepke)) - The DigitalOcean issuer now sets a cert-manager user agent string. ([#​5869](https://github.com/cert-manager/cert-manager/pull/5869), [@​andrewsomething](https://github.com/andrewsomething)) - The HTTP-01 solver can now be configured to create Ingresses with an `ingressClassName`. The credit goes to [@​dsonck92](https://github.com/dsonck92) for implementing the initial PR. ([#​5849](https://github.com/cert-manager/cert-manager/pull/5849), [@​maelvls](https://github.com/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 the `vault.auth` field when creating an Issuer or ClusterIssuer. Previously, it was possible to create an Issuer or ClusterIssuer with an invalid value for `vault.auth`. ([#​5502](https://github.com/cert-manager/cert-manager/pull/5502), [@​maelvls](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5962), [@​wallrj](https://github.com/wallrj)) - Upgraded Gateway API to v0.6.0. ([#​5768](https://github.com/cert-manager/cert-manager/pull/5768), [@​yulng](https://github.com/yulng)) - Webhook now logs requests to mutating/validating webhook (with `--v=5` flag) ([#​5975](https://github.com/cert-manager/cert-manager/pull/5975), [@​tobotg](https://github.com/tobotg)) ##### Design - 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](https://github.com/cert-manager/cert-manager/pull/5887), [@​irbekrm](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5991), [@​inteon](https://github.com/inteon)) ##### Documentation - Helm: the dead links in `values.yaml` are now working ([#​5999](https://github.com/cert-manager/cert-manager/pull/5999), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Bug or Regression - Cmctl renew now prints an error message unless Certificate name(s) or --all are supplied ([#​5896](https://github.com/cert-manager/cert-manager/pull/5896), [@​maumontesilva](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5720), [@​irbekrm](https://github.com/irbekrm)) - Fix development environment and go vendoring on Linux arm64. ([#​5810](https://github.com/cert-manager/cert-manager/pull/5810), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fix ordering of remote git tags when preparing integration tests ([#​5910](https://github.com/cert-manager/cert-manager/pull/5910), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Helm: the flag `--acme-http01-solver-image` given to the variable `acmesolver.extraArgs` now has precedence over the variable `acmesolver.image`. ([#​5693](https://github.com/cert-manager/cert-manager/pull/5693), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Ingress and Gateway resources will not be synced if deleted via [foreground cascading](https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion). ([#​5878](https://github.com/cert-manager/cert-manager/pull/5878), [@​avi-08](https://github.com/avi-08)) - The auto-retry mechanism added in VCert 4.23.0 and part of cert-manager 1.11.0 ([#​5674](https://github.com/cert-manager/cert-manager/issues/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](https://github.com/cert-manager/cert-manager/pull/5805), [@​inteon](https://github.com/inteon)) - Upgrade to go 1.19.6 along with newer helm and containerd versions and updated base images ([#​5813](https://github.com/cert-manager/cert-manager/pull/5813), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - When using the `jks` and `pkcs12` fields on a Certificate resource with a CA issuer that doesn't set the `ca.crt` in the Secret resource, cert-manager no longer loop trying to copy `ca.crt` into `truststore.jks` or `truststore.p12`. ([#​5972](https://github.com/cert-manager/cert-manager/pull/5972), [@​vinzent](https://github.com/vinzent)) - When using the `literalSubject` field on a Certificate resource, the IPs, URIs, DNS names, and email addresses segments are now properly compared. ([#​5747](https://github.com/cert-manager/cert-manager/pull/5747), [@​inteon](https://github.com/inteon)) ##### Other (Cleanup or Flake) - ACME account registration is now re-verified if account key is manually changed. ([#​5949](https://github.com/cert-manager/cert-manager/pull/5949), [@​TrilokGeer](https://github.com/TrilokGeer)) - Add `make go-workspace` target for generating a go.work file for local development ([#​5935](https://github.com/cert-manager/cert-manager/pull/5935), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Added a Makefile target to build a standalone E2E test binary: make e2e-build ([#​5804](https://github.com/cert-manager/cert-manager/pull/5804), [@​wallrj](https://github.com/wallrj)) - Bump keystore-go to v4.4.1 to work around an upstream rewrite of history ([#​5724](https://github.com/cert-manager/cert-manager/pull/5724), [@​g-gaston](https://github.com/g-gaston)) - Bump the distroless base images ([#​5929](https://github.com/cert-manager/cert-manager/pull/5929), [@​maelvls](https://github.com/maelvls)) - Bumps base images ([#​5793](https://github.com/cert-manager/cert-manager/pull/5793), [@​irbekrm](https://github.com/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 of `Certificate` resources in cluster can pass `--watch-certificates=false` to avoid cainjector from caching `Certificate` resources and save some memory. ([#​5746](https://github.com/cert-manager/cert-manager/pull/5746), [@​irbekrm](https://github.com/irbekrm)) - Cainjector now only reconciles annotated objects of injectable kind. ([#​5764](https://github.com/cert-manager/cert-manager/pull/5764), [@​irbekrm](https://github.com/irbekrm)) - Container images are have an OCI source label ([#​5722](https://github.com/cert-manager/cert-manager/pull/5722), [@​james-callahan](https://github.com/james-callahan)) - Enable cmctl to be imported by third parties ([#​6050](https://github.com/cert-manager/cert-manager/pull/6050), [@​jetstack-bot](https://github.com/jetstack-bot)) - The acmesolver pods created by cert-manager now have `automountServiceAccountToken` turned off. ([#​5754](https://github.com/cert-manager/cert-manager/pull/5754), [@​wallrj](https://github.com/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 `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 the `controller.cert-manager.io/fao: true` label. ([#​5824](https://github.com/cert-manager/cert-manager/pull/5824), [@​irbekrm](https://github.com/irbekrm)) - The controller memory usage has been further decreased by ignoring annotations, labels and managed fields when caching Secret resources. ([#​5966](https://github.com/cert-manager/cert-manager/pull/5966), [@​irbekrm](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/5901), [@​irbekrm](https://github.com/irbekrm)) - The memory usage of the controller has been reduced by only caching the metadata of Pods and Services. ([#​5976](https://github.com/cert-manager/cert-manager/pull/5976), [@​irbekrm](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/6006), [@​vidarno](https://github.com/vidarno)) - Updates Kubernetes libraries to `v0.26.2`. ([#​5820](https://github.com/cert-manager/cert-manager/pull/5820), [@​lucacome](https://github.com/lucacome)) - Updates Kubernetes libraries to `v0.26.3`. ([#​5907](https://github.com/cert-manager/cert-manager/pull/5907), [@​lucacome](https://github.com/lucacome)) - Updates Kubernetes libraries to `v0.27.1`. ([#​5961](https://github.com/cert-manager/cert-manager/pull/5961), [@​lucacome](https://github.com/lucacome)) - Updates base images ([#​5832](https://github.com/cert-manager/cert-manager/pull/5832), [@​irbekrm](https://github.com/irbekrm)) - Upgrade to Go 1.20 ([#​5969](https://github.com/cert-manager/cert-manager/pull/5969), [@​wallrj](https://github.com/wallrj)) - Upgrade to go 1.19.5 ([#​5712](https://github.com/cert-manager/cert-manager/pull/5712), [@​yanggangtony](https://github.com/yanggangtony)) - Validates that `certificate.spec.secretName` is a valid `Secret` name ([#​5967](https://github.com/cert-manager/cert-manager/pull/5967), [@​avi-08](https://github.com/avi-08)) - We are now testing with Kubernetes v1.27.1 by default. ([#​5979](https://github.com/cert-manager/cert-manager/pull/5979), [@​irbekrm](https://github.com/irbekrm)) - `certificate.spec.secretName` Secrets will now be labelled with `controller.cert-manager.io/fao` label ([#​5660](https://github.com/cert-manager/cert-manager/pull/5660), [@​irbekrm](https://github.com/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](https://github.com/cert-manager/cert-manager/pull/6000), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ### [`v1.11.4`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.4) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.11.3...v1.11.4) #### Changes by Kind ##### Other (Cleanup or Flake) - Resolved docker/docker trivy CVE alert ([#​6164](https://github.com/cert-manager/cert-manager/issues/6164), [@​inteon](https://github.com/inteon)) - Upgraded base images ([#​6128](https://github.com/cert-manager/cert-manager/issues/6128), [@​SgtCoDFish](https://github.com/SgtCoDFish)) #### Dependencies ##### Changed - github.com/docker/distribution: [v2.8.1+incompatible → v2.8.2+incompatible](https://github.com/docker/distribution/compare/v2.8.1...v2.8.2) ### [`v1.11.3`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.3) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.11.2...v1.11.3) v1.11.3 mostly contains ACME library changes. API Priority and Fairness feature is now disabled in the external webhook's extension apiserver. #### Changes by Kind ##### Other (Cleanup or Flake) - API Priority and Fairness controller is now disabled in extension apiserver for DNS webhook implementation. ([#​6092](https://github.com/cert-manager/cert-manager/pull/6092), [@​irbekrm](https://github.com/irbekrm)) - Adds a warning for folks to not use controller feature gates helm value to configure webhook feature gates ([#​6101](https://github.com/cert-manager/cert-manager/pull/6101), [@​irbekrm](https://github.com/irbekrm)) ### [`v1.11.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.2) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.11.1...v1.11.2) ### Changelog since v1.11.1 #### Changes by Kind ##### Bug or Regression - Build with go 1.19.9 ([#​6014](https://github.com/cert-manager/cert-manager/pull/6014), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Other (Cleanup or Flake) - Bump the distroless base images ([#​5930](https://github.com/cert-manager/cert-manager/pull/5930), [@​maelvls](https://github.com/maelvls)) - Bumps Docker libraries to fix vulnerability scan alert for CVE-2023-28840, CVE-2023-28841, CVE-2023-28842 ([#​6037](https://github.com/cert-manager/cert-manager/pull/6037), [@​irbekrm](https://github.com/irbekrm)) Cert-manager was not actually affected by these CVEs which are all to do with Docker daemon's overlay network. - Bumps Kube libraries v0.26.0 -> v0.26.4 ([#​6038](https://github.com/cert-manager/cert-manager/pull/6038), [@​irbekrm](https://github.com/irbekrm)) This might help with running cert-manager v1.11 on Kubernetes v1.27, see [#​6038](https://github.com/cert-manager/cert-manager/pull/6038) ### [`v1.11.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.1) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.11.0...v1.11.1) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. In v1.11.1, we updated the base images used for cert-manager containers. In addition, the users of the Venafi issuer will see less certificates repeatedly failing. If you are a user of Venafi TPP and have been having issues with the error message `This certificate cannot be processed while it is in an error state. Fix any errors, and then click Retry`, please use this version. #### Changes since v1.11.0 ##### Bug or Regression - Bump helm and other dependencies to fix CVEs, along with upgrading go and base images ([#​5815](https://github.com/cert-manager/cert-manager/issues/5815), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Bump the distroless base images ([#​5930](https://github.com/cert-manager/cert-manager/issues/5930), [@​maelvls](https://github.com/maelvls)) - The auto-retry mechanism added in VCert 4.23.0 and part of cert-manager 1.11.0 ([#​5674](https://github.com/cert-manager/cert-manager/issues/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. ([#​5819](https://github.com/cert-manager/cert-manager/issues/5819), [@​maelvls](https://github.com/maelvls)) - Use a fake-kube apiserver version when generating helm template in `cmctl x install`, to work around a hardcoded Kubernetes version in Helm. ([#​5726](https://github.com/cert-manager/cert-manager/issues/5726), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Other (Cleanup or Flake) - Bump keystore-go to v4.4.1 to work around an upstream rewrite of history ([#​5730](https://github.com/cert-manager/cert-manager/issues/5730), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ### [`v1.11.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.11.0) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.10.2...v1.11.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. `v1.11.0` includes a drastic reduction in cert-manager's runtime memory usage, a slew of improvements to AKS integrations and various other tweaks, fixes and improvements, all towards cert-manager's goal of being the best way to handle certificates in modern Cloud Native applications. #### Community Thanks again to all open-source contributors with commits in this release, including: - [@​cmcga1125](https://github.com/cmcga1125) - [@​karlschriek](https://github.com/karlschriek) - [@​lvyanru8200](https://github.com/lvyanru8200) - [@​mmontes11](https://github.com/mmontes11) - [@​pinkfloydx33](https://github.com/pinkfloydx33) - [@​sathyanarays](https://github.com/sathyanarays) - [@​weisdd](https://github.com/weisdd) - [@​yann-soubeyrand](https://github.com/yann-soubeyrand) - [@​joycebrum](https://github.com/joycebrum) - [@​Git-Jiro](https://github.com/Git-Jiro) - [@​thib-mary](https://github.com/thib-mary) - [@​yk](https://github.com/yk) - [@​RomanenkoDenys](https://github.com/RomanenkoDenys) - [@​lucacome](https://github.com/lucacome) - [@​yanggangtony](https://github.com/yanggangtony) Thanks also to the following cert-manager maintainers for their contributions during this release: - [@​wallrj](https://github.com/wallrj) - [@​irbekrm](https://github.com/irbekrm) - [@​maelvls](https://github.com/maelvls) - [@​SgtCoDFish](https://github.com/SgtCoDFish) - [@​inteon](https://github.com/inteon) - [@​jakexks](https://github.com/jakexks) - [@​JoshVanL](https://github.com/JoshVanL) Thanks also to the [CNCF](https://www.cncf.io/), 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](https://github.com/cert-manager/aws-privateca-issuer). In addition, massive thanks to [Jetstack](https://www.jetstack.io/) (by [Venafi](https://www.venafi.com/)) for contributing developer time and resources towards the continued maintenance of cert-manager projects. #### Changes since cert-manager `v1.10` For an overview of new features, see the [v1.11 release notes](https://cert-manager.io/docs/release-notes/release-notes-1.11/)! ##### Feature - Helm: allow configuring the image used by ACME HTTP-01 solver ([#​5554](https://github.com/cert-manager/cert-manager/issues/5554), [@​yann-soubeyrand](https://github.com/yann-soubeyrand)) - Add the `--max-concurrent-challenges` controller flag to the helm chart ([#​5638](https://github.com/cert-manager/cert-manager/issues/5638), [@​lvyanru8200](https://github.com/lvyanru8200)) - Adds the ability to specify a custom CA bundle in Issuers when connecting to an ACME server ([#​5644](https://github.com/cert-manager/cert-manager/issues/5644), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Enable testing against Kubernetes 1.26 and test with Kubernetes 1.26 by default ([#​5646](https://github.com/cert-manager/cert-manager/issues/5646), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Experimental make targets for pushing images to an OCI registry using `ko` and redeploying cert-manager to the cluster referenced by your current KUBECONFIG context. ([#​5655](https://github.com/cert-manager/cert-manager/issues/5655), [@​wallrj](https://github.com/wallrj)) - Add ability to run acmesolver pods as root if desired. The default is still to run as non-root. ([#​5546](https://github.com/cert-manager/cert-manager/issues/5546), [@​cmcga1125](https://github.com/cmcga1125)) - Add support for DC and UID in `LiteralSubject` field, all mandatory OIDs are now supported for LDAP certificates (rfc4514). ([#​5587](https://github.com/cert-manager/cert-manager/issues/5587), [@​SpectralHiss](https://github.com/SpectralHiss)) - Add support for Workload Identity to AzureDNS resolver ([#​5570](https://github.com/cert-manager/cert-manager/issues/5570), [@​weisdd](https://github.com/weisdd)) - Breaking: updates the gateway API integration to use the more stable v1beta1 API version. Any users of the cert-manager `ExperimentalGatewayAPISupport` alpha feature must ensure that `v1beta` of Gateway API is installed in cluster. ([#​5583](https://github.com/cert-manager/cert-manager/issues/5583), [@​lvyanru8200](https://github.com/lvyanru8200)) - Certificate secrets get refreshed if the keystore format change ([#​5597](https://github.com/cert-manager/cert-manager/issues/5597), [@​sathyanarays](https://github.com/sathyanarays)) - Introducing UseCertificateRequestBasicConstraints feature flag to enable Basic Constraints in the Certificate Signing Request ([#​5552](https://github.com/cert-manager/cert-manager/issues/5552), [@​sathyanarays](https://github.com/sathyanarays)) - Return error when Gateway has a cross-namespace secret ref ([#​5613](https://github.com/cert-manager/cert-manager/issues/5613), [@​mmontes11](https://github.com/mmontes11)) - Signers fire an event on CertificateRequests which have not been approved yet. Used for informational purposes so users understand why a request is not progressing. ([#​5535](https://github.com/cert-manager/cert-manager/issues/5535), [@​JoshVanL](https://github.com/JoshVanL)) ##### Bug or Regression - Don't log errors relating to self-signed issuer checks for external issuers ([#​5681](https://github.com/cert-manager/cert-manager/issues/5681), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fixed a bug in AzureDNS resolver that led to early reconciliations in misconfigured Workload Identity-enabled setups (when Federated Identity Credential is not linked with a controller's k8s service account) ([#​5663](https://github.com/cert-manager/cert-manager/issues/5663), [@​weisdd](https://github.com/weisdd)) - Use manually specified temporary directory template when verifying CRDs ([#​5680](https://github.com/cert-manager/cert-manager/issues/5680), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - `vcert` was upgraded to `v4.23.0`, fixing two bugs in cert-manager. The first bug was preventing the Venafi issuer from renewing certificates when using TPP has been fixed. You should no longer see your certificates getting stuck with `WebSDK CertRequest Module Requested Certificate` or `This certificate cannot be processed while it is in an error state. Fix any errors, and then click Retry.`. The second bug that was fixed prevented the use of `algorithm: Ed25519` in Certificate resources with VaaS. ([#​5674](https://github.com/cert-manager/cert-manager/issues/5674), [@​maelvls](https://github.com/maelvls)) - Upgrade `golang/x/net` to fix CVE-2022-41717 ([#​5632](https://github.com/cert-manager/cert-manager/issues/5632), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Bug fix: When using feature gates with the helm chart, enable feature gate flags on webhook as well as controller ([#​5584](https://github.com/cert-manager/cert-manager/issues/5584), [@​lvyanru8200](https://github.com/lvyanru8200)) - Fix `golang.org/x/text` vulnerability ([#​5562](https://github.com/cert-manager/cert-manager/issues/5562), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fixes a bug that caused the Vault issuer to omit the Vault namespace in requests to the Vault API. ([#​5591](https://github.com/cert-manager/cert-manager/issues/5591), [@​wallrj](https://github.com/wallrj)) - The Venafi Issuer now supports TLS 1.2 renegotiation, so that it can connect to TPP servers where the vedauth API endpoints are configured to *accept* client certificates. (Note: This does not mean that the Venafi Issuer supports client certificate authentication). ([#​5568](https://github.com/cert-manager/cert-manager/issues/5568), [@​wallrj](https://github.com/wallrj)) - Upgrade to go 1.19.4 to fix CVE-2022-41717 ([#​5619](https://github.com/cert-manager/cert-manager/issues/5619), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Upgrade to latest go minor release ([#​5559](https://github.com/cert-manager/cert-manager/issues/5559), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Ensure `extraArgs` in Helm takes precedence over the new acmesolver image options ([#​5702](https://github.com/cert-manager/cert-manager/issues/5702), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fix cainjector's --namespace flag. Users who want to prevent cainjector from reading all Secrets and Certificates in all namespaces (i.e to prevent excessive memory consumption) can now scope it to a single namespace using the --namespace flag. A cainjector that is only used as part of cert-manager installation only needs access to the cert-manager installation namespace. ([#​5694](https://github.com/cert-manager/cert-manager/issues/5694), [@​irbekrm](https://github.com/irbekrm)) - Fixes a bug where cert-manager controller was caching all Secrets twice ([#​5691](https://github.com/cert-manager/cert-manager/issues/5691), [@​irbekrm](https://github.com/irbekrm)) ##### Other - `certificate.spec.secretName` Secrets will now be labelled with the `controller.cert-manager.io/fao` label ([#​5703](https://github.com/cert-manager/cert-manager/issues/5703), [@​irbekrm](https://github.com/irbekrm)) - Upgrade to go 1.19.5 ([#​5714](https://github.com/cert-manager/cert-manager/issues/5714), [@​yanggangtony](https://github.com/yanggangtony)) ##### Known issues - There is a bug in conformance tests for external DNS webhook implementations that was introduced in this release, see https://github.com/cert-manager/cert-manager/issues/5725 If you are importing cert-manager as a library to run conformance tests against your DNS webhook solver implementation, please make sure that you import a version with a fix, see https://github.com/cert-manager/cert-manager/issues/5725#issuecomment-1397245757 ### [`v1.10.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.10.2) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.10.1...v1.10.2) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. v1.10.2 is primarily a performance enhancement release which might reduce memory consumption by up to 50% in some cases thanks to some brilliant work by [@​irbekrm](https://github.com/irbekrm)! :tada: It also patches several vulnerabilities reported by scanners and updates the base images used for cert-manager containers. In addition, it removes a potentially confusing log line which had been introduced in v1.10.0 which implied that an error had occurred when using external issuers even though there'd been no error. #### Changes since `v1.10.1` ##### Feature - Enable support for Kubernetes 1.26 in tests ([#​5647](https://github.com/cert-manager/cert-manager/issues/5647), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Bug or Regression - Fixes a bug where the cert-manager controller was caching all Secrets twice ([#​5704](https://github.com/cert-manager/cert-manager/issues/5704), [@​irbekrm](https://github.com/irbekrm)) - Bump helm version to fix CVE-2022-23525 ([#​5676](https://github.com/cert-manager/cert-manager/issues/5676), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Don't log errors relating to selfsigned issuer checks for external issuers ([#​5687](https://github.com/cert-manager/cert-manager/issues/5687), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Fix `golang.org/x/text` vulnerability ([#​5592](https://github.com/cert-manager/cert-manager/issues/5592), [@​SgtCoDfish](https://github.com/SgtCoDfish)) - Upgrade golang/x/net to fix CVE-2022-41717 ([#​5635](https://github.com/cert-manager/cert-manager/issues/5635), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Upgrade to go 1.19.4 to fix CVE-2022-41717 ([#​5620](https://github.com/cert-manager/cert-manager/issues/5620), [@​SgtCoDfish](https://github.com/SgtCoDfish)) - Use manually specified tmpdir template when verifying CRDs ([#​5682](https://github.com/cert-manager/cert-manager/issues/5682), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Other (Cleanup or Flake) - Bump distroless base images to latest versions ([#​5677](https://github.com/cert-manager/cert-manager/issues/5677), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ### [`v1.10.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.10.1) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.10.0...v1.10.1) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. cert-manager v1.10.1 is a bug fix release which fixes a problem which prevented the Venafi Issuer from connecting to TPP servers where the vedauth API endpoints were configured to accept client certificates. It is also compiled with a newer version of Go 1.19 (v1.19.3) which fixes some vulnerabilities in the Go standard library. #### Changes since `v1.10.0` ##### Bug or Regression - The Venafi Issuer now supports TLS 1.2 renegotiation, so that it can connect to TPP servers where the `vedauth` API endpoints are configured to *accept* client certificates. (Note: This does not mean that the Venafi Issuer supports client certificate authentication). ([#​5576](https://github.com/cert-manager/cert-manager/pull/5371), [@​wallrj](https://github.com/wallrj)) - Upgrade to latest go patch release ([#​5560](https://github.com/cert-manager/cert-manager/pull/5560), [@​SgtCoDFish](https://github.com/SgtCoDFish) ) ### [`v1.10.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.10.0) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.9.2...v1.10.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. Version 1.10 adds a variety of quality-of-life fixes and features including improvements to the test suite. #### Changes since v1.9.1 ##### Breaking Changes (You MUST read this before you upgrade!) ##### Container Name Changes This change is only relevant if you install cert-manager using Helm or the static manifest files. `v1.10.0` [changes the names](https://github.com/cert-manager/cert-manager/pull/5410) of containers in pods created by cert-manager. The names are changed to better reflect what they do; for example, the container in the controller pod had its name changed from `cert-manager` to `cert-manager-controller`, and the webhook pod had its container name changed from `cert-manager` to `cert-manager-webhook`. This change could cause a break if you: 1. Use Helm or the static manifests, and 2. Have scripts, tools or tasks which rely on the names of the cert-manager containers being static If both of these are true, you may need to update your automation before you upgrade. ##### On OpenShift the cert-manager Pods may fail until you modify Security Context Constraints In cert-manager 1.10 the [secure computing (seccomp) profile](https://kubernetes.io/docs/tutorials/security/seccomp/) for all the Pods is set to RuntimeDefault. (See [#​5259](https://github.com/cert-manager/cert-manager/issues/5259).) The securityContext fields of the Pod are set as follows: ```yaml ... ### ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ securityContext: seccompProfile: type: RuntimeDefault ... ``` On some versions and configurations of OpenShift this can cause the Pod to be rejected by the [Security Context Constraints admission webhook](https://docs.openshift.com/container-platform/4.10/authentication/managing-security-context-constraints.html#admission_configuring-internal-oauth). Read [full release notes](https://cert-manager.io/docs/release-notes/release-notes-1.10#on-openshift-the-cert-manager-pods-may-fail-until-you-modify-security-context-constraints) to learn if this might affect you and how to fix it. ##### Feature - Add `issuer_name`, `issuer_kind` and `issuer_group` labels to `certificate_expiration_timestamp_seconds`, `certmanager_certificate_renewal_timestamp_seconds` and `certmanager_certificate_ready_status` metrics ([#​5461](https://github.com/cert-manager/cert-manager/issues/5461), [@​dkulchinsky](https://github.com/dkulchinsky)) - Add make targets for running scans with trivy against locally built containers ([#​5358](https://github.com/cert-manager/cert-manager/issues/5358), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - CertificateRequests: requests that use the SelfSigned Issuer will be re-reconciled when the target private key Secret has been informed `cert-manager.io/private-key-secret-name`. This resolves an issue whereby a request would never be signed when the target Secret was not created or was misconfigured before the request. ([#​5336](https://github.com/cert-manager/cert-manager/issues/5336), [@​JoshVanL](https://github.com/JoshVanL)) - CertificateSigningRequests: requests that use the SelfSigned Issuer will be re-reconciled when the target private key Secret has been informed `experimental.cert-manager.io/private-key-secret-name`. This resolves an issue whereby a request would never be signed when the target Secret was not created or was misconfigured before the request. CertificateSigningRequets will also now no-longer be marked as failed when the target private key Secret is malformed- now only firing an event. When the Secret data is resolved, the request will attempt issuance. ([#​5379](https://github.com/cert-manager/cert-manager/issues/5379), [@​JoshVanL](https://github.com/JoshVanL)) - Upgraded Gateway API to v0.5.0 ([#​5376](https://github.com/cert-manager/cert-manager/issues/5376), [@​inteon](https://github.com/inteon)) - Add caBundleSecretRef to the Vault Issuer to allow referencing the Vault CA Bundle with a Secret. Cannot be used in conjunction with the in-line caBundle field. ([#​5387](https://github.com/cert-manager/cert-manager/issues/5387), [@​Tolsto](https://github.com/Tolsto)) - The feature to create certificate requests with the name being a function of certificate name and revision has been introduced under the feature flag "StableCertificateRequestName" and it is disabled by default. This helps to prevent the error "multiple CertificateRequests were found for the 'next' revision...". ([#​5487](https://github.com/cert-manager/cert-manager/issues/5487), [@​sathyanarays](https://github.com/sathyanarays)) - Helm: Added a new parameter `commonLabels` which gives you the capability to add the same label on all the resource deployed by the chart. ([#​5208](https://github.com/cert-manager/cert-manager/issues/5208), [@​thib-mary](https://github.com/thib-mary)) ##### Bug or Regression - CertificateSigningRequest: no longer mark a request as failed when using the SelfSigned issuer, and the Secret referenced in `experimental.cert-manager.io/private-key-secret-name` doesn't exist. ([#​5323](https://github.com/cert-manager/cert-manager/issues/5323), [@​JoshVanL](https://github.com/JoshVanL)) - DNS Route53: Remove incorrect validation which rejects solvers that don't define either a `accessKeyID` or `secretAccessKeyID`. ([#​5339](https://github.com/cert-manager/cert-manager/issues/5339), [@​JoshVanL](https://github.com/JoshVanL)) - Enhanced securityContext for PSS/restricted compliance. ([#​5259](https://github.com/cert-manager/cert-manager/issues/5259), [@​joebowbeer](https://github.com/joebowbeer)) **Breaking**: this might require changes for OpenShift deployments. Read [full release notes](https://cert-manager.io/docs/release-notes/release-notes-1.10#on-openshift-the-cert-manager-pods-may-fail-until-you-modify-security-context-constraints) to learn more. - Fix issue where CertificateRequests marked as InvalidRequest did not properly trigger issuance failure handling leading to 'stuck' requests ([#​5366](https://github.com/cert-manager/cert-manager/issues/5366), [@​munnerz](https://github.com/munnerz)) - `cmctl` and `kubectl cert-manager` now report their actual versions instead of "canary", fixing issue [#​5020](https://github.com/cert-manager/cert-manager/issues/5020) ([#​5022](https://github.com/cert-manager/cert-manager/issues/5022), [@​maelvls](https://github.com/maelvls)) ##### Other - Avoid hard-coding release namespace in helm chart ([#​5163](https://github.com/cert-manager/cert-manager/issues/5163), [@​james-callahan](https://github.com/james-callahan)) - Bump cert-manager's version of Go to `1.19` ([#​5466](https://github.com/cert-manager/cert-manager/issues/5466), [@​lucacome](https://github.com/lucacome)) - Remove `.bazel` and `.bzl` files from cert-manager now that bazel has been fully replaced ([#​5340](https://github.com/cert-manager/cert-manager/issues/5340), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Updates Kubernetes libraries to `v0.25.2`. ([#​5456](https://github.com/cert-manager/cert-manager/issues/5456), [@​lucacome](https://github.com/lucacome)) - Add annotations for ServiceMonitor in helm chart ([#​5401](https://github.com/cert-manager/cert-manager/issues/5401), [@​sathieu](https://github.com/sathieu)) - Helm: Add NetworkPolicy support ([#​5417](https://github.com/cert-manager/cert-manager/issues/5417), [@​mjudeikis](https://github.com/mjudeikis)) - To help troubleshooting, make the container names unique. BREAKING: this change will break scripts/ CI that depend on `cert-manager` being the container name. ([#​5410](https://github.com/cert-manager/cert-manager/issues/5410), [@​rgl](https://github.com/rgl)) #### Thank You! Thank you to the following community members who had a merged PR for this version - your contributions are at the heart of everything we do! - [@​joebowbeer](https://github.com/joebowbeer) - [@​rgl](https://github.com/rgl) - [@​lucacome](https://github.com/lucacome) - [@​sathieu](https://github.com/sathieu) - [@​mjudeikis](https://github.com/mjudeikis) - [@​james-callahan](https://github.com/james-callahan) - [@​dkulchinsky](https://github.com/dkulchinsky) - [@​thib-mary](https://github.com/thib-mary) - [@​Tolsto](https://github.com/Tolsto) - [@​sathyanarays](https://github.com/sathyanarays) Thanks also to the following maintainers who worked on cert-manager 1.10: - [@​irbekrm](https://github.com/irbekrm) - [@​SgtCoDFish](https://github.com/SgtCoDFish) - [@​jakexks](https://github.com/jakexks) - [@​wallrj](https://github.com/wallrj) - [@​maelvls](https://github.com/maelvls) - [@​JoshVanL](https://github.com/JoshVanL) - [@​jahrlin](https://github.com/jahrlin) - [@​munnerz](https://github.com/munnerz) - [@​inteon](https://github.com/inteon) ### [`v1.9.2`](https://github.com/cert-manager/cert-manager/releases/tag/v1.9.2) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.9.1...v1.9.2) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. cert-manager `v1.9.2` is a bug fix release which fixes an issue where CertificateRequests marked as InvalidRequest did not properly trigger issuance failure handling leading to 'stuck' requests, and a problem which prevented the Venafi Issuer from connecting to TPP servers where the `vedauth` API endpoints were configured to *accept* client certificates. It is also compiled with a newer version of Go 1.18 (`v1.18.8`) which fixes some vulnerabilities in the Go standard library. #### Changes since `v1.9.1` ##### Bug or Regression - Fix issue where CertificateRequests marked as InvalidRequest did not properly trigger issuance failure handling leading to 'stuck' requests. ([#​5371](https://github.com/cert-manager/cert-manager/pull/5371), [@​munnerz](https://github.com/munnerz) ) - The Venafi Issuer now supports TLS 1.2 renegotiation, so that it can connect to TPP servers where the `vedauth` API endpoints are configured to *accept* client certificates. (Note: This does not mean that the Venafi Issuer supports client certificate authentication). ([#​5577](https://github.com/cert-manager/cert-manager/pull/5577), [@​wallrj](https://github.com/wallrj)) - Upgrade to latest go patch release. ([#​5561](https://github.com/cert-manager/cert-manager/pull/5561), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ### [`v1.9.1`](https://github.com/cert-manager/cert-manager/releases/tag/v1.9.1) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.9.0...v1.9.1) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. Version 1.9.1 is a bugfix release which removes an incorrect check in the Route53 DNS solver. This accidental change prevented the use of credentials derived from instance metadata or AWS pod metadata. Thanks to [@​danquack](https://github.com/danquack) and [@​ArchiFleKs](https://github.com/ArchiFleKs) for raising this issue, and [@​danquack](https://github.com/danquack) and [@​JoshVanL](https://github.com/JoshVanL) for fixing it! ### Changes since v1.9.0 #### Bug - DNS Route53: Remove incorrect validation which rejects solvers that don't define either a `accessKeyID` or `secretAccessKeyID`. ([#​5341](https://github.com/cert-manager/cert-manager/pull/5341), [@​JoshVanL](https://github.com/JoshVanL) [@​danquack](https://github.com/danquack) ) ### [`v1.9.0`](https://github.com/cert-manager/cert-manager/releases/tag/v1.9.0) [Compare Source](https://github.com/cert-manager/cert-manager/compare/v1.8.2...v1.9.0) cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters. The new version adds alpha support for using cert-manager `Certificate`s in scenarios where the ordering of the Relative Distinguished Names (RDN) sequence that constitutes an X.509 certificate's subject needs to be preserved; improves the ability to configure the `Certificate` created via ingress-shim using annotations on the `Ingress` resource; introduces various changes/improvements in contributor flow; and finishes the new make-based contributor workflow. #### Major Themes ##### Literal Certificate Subjects cert-manager's `Certificate` allows users to configure the subject fields of the X.509 certificate via `spec.subject` and `spec.commonName` fields. The [X.509 spec](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) states that the subject is an (ordered) sequence of Relative Distinguished Names (RDN). cert-manager does not strictly abide by this spec when encoding the subject fields from the `Certificate` spec. For example, the order of the RDN sequence may not be preserved. This is because cert-manager uses Go's libraries for X.509 certificates, and the Go libraries don't preserve ordering. For the vast majority of users this does not matter, but there are specific cases that require defining the exact ordered RDN sequence. For example, if the certificate is used for LDAP authentication and the RDN sequence represents a [location in LDAP directory tree](https://ldapwiki.com/wiki/Directory%20Information%20Tree). See [`cert-manager#3203`](https://github.com/cert-manager/cert-manager/issues/3203). For these use cases, a new alpha `LiteralSubject` field has been added to the `Certificate` spec where users can pass a literal RDN sequence: ```yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: test spec: secretName: test literalSubject: "C=US,O=myOrg,CN=someName" ``` To use this field, the alpha feature gate `LiteralCertificateSubject` needs to be enabled on both the cert-manager controller and webhook. Bear in mind that `spec.literalSubject` is mutually exclusive with `spec.commonName` and `spec.subject`. This feature is aimed at the specific scenario where an exact RDN sequence needs to be defined. We do not intend to deprecate the existing `spec.subject` and `spec.commonName` fields and we recommend that folks keep using those fields in all other cases; they're simpler, have better validation and are more obvious to read and change. ##### ingress-shim `Certificate` Configuration cert-manager 1.9 adds the ability to configure an ingress-shim `Certificate`'s `spec.revisionHistoryLimit` and `spec.privateKey` via [annotations on the `Ingress` resource](https://cert-manager.io/docs/usage/ingress/#supported-annotations). This should allow folks to configure ingress-shim `Certificate`s according to best practices (i.e by setting `Certificate`'s `spec.privateKey.rotationPolicy` to `Always`). In the future we would like to design a better mechanism to configure these `Certificate`s. We advise caution when using `Ingress` annotations as there is no validation of the annotations at `Ingress` creation time. ##### Contribution Workflow Over the past couple of months there have been a number of discussions in regards to contributor experience and project health, partially triggered by the awesome community discussions in cert-manager's KubeCon booth and also by the work done to move cert-manager to CNCF's incubating stage. For example, we've [clarified our feature policy](https://cert-manager.io/docs/contributing/policy/) and discussed the process of building cert-manager's [roadmap](https://github.com/cert-manager/cert-manager/blob/master/ROADMAP.md). If you're interested in these topics, we're happy to chat about them! ##### `make` Workflow cert-manager 1.8 introduced a new `make` based workflow alongside the existing Bazel workflow. The work to improve the `make` workflow was continued in 1.9 and our [contributor documentation](https://cert-manager.io/docs/contributing/building/) has been redefined to use `make` commands. This should make building and testing cert-manager easier with faster build and test times, easier debugging and less complexity. As part of this, Bazel has now been fully deprecated for building and testing cert-manager. As usual, we welcome any feedback in regards to further improving contributor experience. #### Thank You! Thank you to the following community members who had a merged PR for this version - your contributions are at the heart of everything we do! - [@​AcidLeroy](https://github.com/AcidLeroy) - [@​oGi4i](https://github.com/oGi4i) - [@​spockz](https://github.com/spockz) (and [@​yongk802](https://github.com/yongk802) who raised a similar PR) - [@​andrewgkew](https://github.com/andrewgkew) - [@​sveba](https://github.com/sveba) - [@​rodrigorfk](https://github.com/rodrigorfk) - [@​craigminihan](https://github.com/craigminihan) - [@​lucacome](https://github.com/lucacome) - [@​Dean-Coakley](https://github.com/Dean-Coakley) - [@​Compy](https://github.com/Compy) Thanks also to the following maintainers who worked on cert-manager 1.9: - [@​irbekrm](https://github.com/irbekrm) - [@​SgtCoDFish](https://github.com/SgtCoDFish) - [@​jakexks](https://github.com/jakexks) - [@​wallrj](https://github.com/wallrj) - [@​maelvls](https://github.com/maelvls) - [@​JoshVanL](https://github.com/JoshVanL) - [@​jahrlin](https://github.com/jahrlin) - [@​munnerz](https://github.com/munnerz) #### Changes since v1.8.0 ##### Feature - Added support for pulling both AWS access key IDs and secret keys from Kubernetes secrets ([#​5194](https://github.com/cert-manager/cert-manager/issues/5194), [@​Compy](https://github.com/Compy)) - Adds `make clean-all` for starting a fresh development environment and `make which-go` for getting go version information when developing cert-manager ([#​5118](https://github.com/cert-manager/cert-manager/issues/5118), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Adds `make upload-release` target for publishing cert-manager releases to GCS, simplifying the cert-manager release process simpler and making it easier to change ([#​5205](https://github.com/cert-manager/cert-manager/issues/5205), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Adds a new alpha Prometheus summary vector metric `certmanager_http_venafi_client_request_duration_seconds` which allows tracking the latency of Venafi API calls. The metric is labelled by the type of API call. Example PromQL query: `certmanager_http_venafi_client_request_duration_seconds{api_call="request_certificate"}` will show the average latency of calls to the Venafi certificate request endpoint ([#​5053](https://github.com/cert-manager/cert-manager/issues/5053), [@​irbekrm](https://github.com/irbekrm)) - Adds more verbose logging info for certificate renewal in the DynamicSource webhook to include DNSNames ([#​5142](https://github.com/cert-manager/cert-manager/issues/5142), [@​AcidLeroy](https://github.com/AcidLeroy)) - Adds new LICENSES format and ability to verify and update licenses through make ([#​5243](https://github.com/cert-manager/cert-manager/issues/5243), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Adds private key Ingress annotations to set private key properties for Certificate ([#​5239](https://github.com/cert-manager/cert-manager/issues/5239), [@​oGi4i](https://github.com/oGi4i)) - Adds the `cert-manager.io/revision-history-limit` annotation for Ingress resources, to limit the number of CertificateRequests which are kept for a Certificate ([#​5221](https://github.com/cert-manager/cert-manager/issues/5221), [@​oGi4i](https://github.com/oGi4i)) - Adds the `literalSubject` field for Certificate resources. This is an alpha feature, enabled by passing the flag `--feature-gates=LiteralCertificateSubject=true` to the cert-manager controller and webhook. `literalSubject` allows fine-grained control of the subject a certificate should have when issued and is intended for power-users with specific use cases in mind ([#​5002](https://github.com/cert-manager/cert-manager/issues/5002), [@​spockz](https://github.com/spockz)) - Change default build dir from `bin` to `_bin`, which plays better with certain tools which might treat `bin` as just another source directory ([#​5130](https://github.com/cert-manager/cert-manager/issues/5130), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Helm: Adds a new `namespace` parameter which allows users to override the namespace in which resources will be created. This also allows users to set the namespace of the chart when using cert-manager as a sub chart. ([#​5141](https://github.com/cert-manager/cert-manager/issues/5141), [@​andrewgkew](https://github.com/andrewgkew)) - Helm: Allow for users to not auto-mount service account tokens [see also k/k#57601](https://github.com/kubernetes/kubernetes/issues/57601) ([#​5016](https://github.com/cert-manager/cert-manager/issues/5016), [@​sveba](https://github.com/sveba)) - Use multiple retries when provisioning tools using `curl`, to reduce flakes in tests and development environments ([#​5272](https://github.com/cert-manager/cert-manager/issues/5272), [@​SgtCoDFish](https://github.com/SgtCoDFish)) ##### Bug or Regression - CertificateRequests controllers must wait for the core secrets informer to be synced ([#​5224](https://github.com/cert-manager/cert-manager/issues/5224), [@​rodrigorfk](https://github.com/rodrigorfk)) - Ensure that `make release-artifacts` only builds unsigned artifacts as intended ([#​5181](https://github.com/cert-manager/cert-manager/issues/5181), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Ensure the startupapicheck is only scheduled on Linux nodes in the helm chart ([#​5136](https://github.com/cert-manager/cert-manager/issues/5136), [@​craigminihan](https://github.com/craigminihan)) - Fixed a bug where the Venafi Issuer would not verify its access token (TPP) or API key (Cloud) before becoming ready. Venafi Issuers now remotely verify the access token or API key ([#​5212](https://github.com/cert-manager/cert-manager/issues/5212), [@​jahrlin](https://github.com/jahrlin)) - Fixed release artifact archives generated by Make so that a leading `./` is stripped from paths. This ensures that behaviour is the same as v1.7 and earlier ([#​5050](https://github.com/cert-manager/cert-manager/issues/5050), [@​jahrlin](https://github.com/jahrlin)) - Increase timeouts for issuer and clusterissuer controllers to 2 minutes and increase ACME client HTTP timeouts to 90 seconds, in order to enable the use of slower ACME issuers which take a long time to process certain requests. ([#​5226](https://github.com/cert-manager/cert-manager/issues/5226), [@​SgtCoDFish](https://github.com/SgtCoDFish)) - Increases Venafi Issuer timeout for retrieving a certificate increased to 60 seconds, up from 10. This gives TPP i…
Pull Request Motivation
This PR brings support for Workload Identity to AzureDNS issuer.
There's another PR #5308, which also introduces support for Workload Identity, though it has two drawbacks:
adal
doesn't read federated tokens from disk itself and doesn't expose any methods to dynamically replacejwt
. Thus, token renewal would fail due to stale federated token;@karlschriek, the author of that PR, does not currently have enough time to fix those, so we agreed that I'll drive it all further (discussion).
Closes: #5085
Kind
/kind feature
Release Note
Extra information
The feature can be tested by deploying the updated image with these parameters supplied to the official helm chart:
ClientID can be overridden through
Issuer
orClusterIssuer
:Running tool: /usr/local/go/bin/go test -timeout 30s -coverprofile=/var/folders/rt/68xkylrx55j9zxpvxrggn53h0000gn/T/vscode-goTJGj6K/go-code-cover github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/azuredns ok github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/azuredns 0.295s coverage: 20.6% of statements