Skip to content

Commit 5bfd862

Browse files
Merge pull request #2000 from maelvls/merge-master-into-release-next-second-try
[release-next] Merge master into release-next
2 parents ed5d6b9 + a824d17 commit 5bfd862

57 files changed

Lines changed: 2311 additions & 3894 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/renovate.json5

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
33
extends: [
4-
'github>cert-manager/renovate-config:default.json5',
4+
'github>cert-manager/makefile-modules:renovate-config.json5',
55
],
66
packageRules: [
77
{

.github/workflows/check.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ jobs:
88
pull-cert-manager-website-verify:
99
runs-on: ubuntu-24.04
1010
steps:
11-
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
12-
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
11+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
12+
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
1313
with:
1414
node-version: 24
1515
cache: npm

.github/workflows/make-self-upgrade.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
scope: 'cert-manager/website'
3939
identity: make-self-upgrade
4040

41-
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
41+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
4242
# Adding `fetch-depth: 0` makes sure tags are also fetched. We need
4343
# the tags so `git describe` returns a valid version.
4444
# see https://github.com/actions/checkout/issues/701 for extra info about this option
@@ -50,7 +50,7 @@ jobs:
5050
run: |
5151
make print-go-version >> "$GITHUB_OUTPUT"
5252
53-
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
53+
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
5454
with:
5555
go-version: ${{ steps.go-version.outputs.result }}
5656

.spelling

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ pinkfloydx33
5353
karlschriek
5454
cmcga1125
5555
OIDs
56+
Oleh
57+
Konko
5658
rfc4514
5759
SpectralHiss
5860
weisdd
@@ -592,11 +594,8 @@ v1.18.0.
592594
v1.19
593595
v1.19.0
594596
v1.19.1
595-
v1.20.0
596597
v1.19.2
597-
v1.20.0
598598
alpha.0
599-
beta.0
600599
v1.4.1
601600
v1.5
602601
v1.5.0
@@ -862,9 +861,6 @@ example.org
862861
experimental.cert
863862
http01-edit-in-place
864863
http01-ingress-class
865-
http01-ingress-ingressclassname
866-
http01-parentrefkind
867-
http01-parentrefname
868864
ingress.class
869865
ip-sans
870866
kubernetes.io

components/Footer.jsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import Link from 'next/link'
22
import FooterSepartor from './snippets/FooterSeparator'
33

44
export default function Footer() {
5+
const currentYear = new Date().getFullYear()
56
return (
67
<footer className="mt-[-117px]">
78
<div className="relative w-screen h-[117px] overflow-x-hidden">
89
<FooterSepartor className="absolute top-0 left-[-696px]" />
910
</div>
1011
<div className="bg-dark-2 pb-10 pt-5">
1112
<div className="container text-sm text-white">
12-
<p>&copy; 2025 The cert-manager Authors.</p>
13+
<p>&copy; {currentYear} The cert-manager Authors.</p>
1314
<p className="mb-6">
14-
&copy; 2025 The Linux Foundation. All rights reserved.
15+
&copy; {currentYear} The Linux Foundation. All rights reserved.
1516
</p>
1617
<p>
1718
The Linux Foundation has registered trademarks and uses trademarks.

content/announcements/2025-11-26-ingress-nginx-eol-and-gateway-api.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ with certificates configured on cluster-operator-owned Gateways.
1919

2020
The missing piece is Gateway API's experimental XListenerSet resource, which
2121
aims to restore per-team TLS configuration on a shared Gateway. cert-manager
22-
plans to add experimental XListenerSet support in 1.20, targeted for 10 February
22+
plans to add experimental XListenerSet support in 1.20, targeted for 24 February
2323
2026, with alpha builds in January 2026.
2424

2525
[the announcement]: https://kubernetes.io/blog/2025/11/11/ingress-nginx-retirement/
@@ -150,7 +150,7 @@ which act as the default issuer.
150150

151151
- **January 2026:** Alpha builds with XListenerSet support. We will need your
152152
help to test it out!
153-
- **10 February 2026:** cert-manager 1.20 is expected to include XListenerSet
153+
- **24 February 2026:** cert-manager 1.20 is expected to include XListenerSet
154154
support as an experimental feature gated behind a feature flag.
155155

156156
As Gateway API graduates ListenerSet to stable, we'll add support for the stable

content/docs/configuration/acme/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ metadata:
5454
spec:
5555
acme:
5656
# You must replace this email address with your own.
57-
# Let's Encrypt will use this to contact you about expiring
58-
# certificates, and issues related to your account.
5957
email: user@example.com
6058
# If the ACME server supports profiles, you can specify the profile name here.
6159
# See #acme-certificate-profiles below.

content/docs/configuration/acme/dns01/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,14 @@ Links to these supported providers along with their documentation are below:
175175
- [`cert-manager-webhook-infomaniak`](https://github.com/Infomaniak/cert-manager-webhook-infomaniak)
176176
- [`cert-manager-webhook-inwx`](https://gitlab.com/smueller18/cert-manager-webhook-inwx)
177177
- [`cert-manager-webhook-ionos-cloud`](https://github.com/ionos-cloud/cert-manager-webhook-ionos-cloud)
178-
- [`cert-manager-webhook-linode`](https://github.com/slicen/cert-manager-webhook-linode)
178+
- [`cert-manager-webhook-linode`](https://github.com/linode/cert-manager-webhook-linode)
179179
- [`cert-manager-webhook-loopia`](https://github.com/Identitry/cert-manager-webhook-loopia)
180180
- [`cert-manager-webhook-netcup`](https://github.com/aellwein/cert-manager-webhook-netcup)
181181
- [`cert-manager-webhook-oci`](https://gitlab.com/dn13/cert-manager-webhook-oci) (Oracle Cloud Infrastructure)
182182
- [`cert-manager-webhook-ovh`](https://github.com/aureq/cert-manager-webhook-ovh)
183183
- [`cert-manager-webhook-opentelekomcloud`](https://github.com/akyriako/cert-manager-webhook-opentelekomcloud)
184184
- [`cert-manager-webhook-pdns`](https://github.com/zachomedia/cert-manager-webhook-pdns)
185+
- [`cert-manager-webhook-rackspace`](https://github.com/rackerlabs/cert-manager-webhook-rackspace)
185186
- [`cert-manager-webhook-regery`](https://github.com/darioackermann/cert-manager-webhook-regery)
186187
- [`cert-manager-webhook-scaleway`](https://github.com/scaleway/cert-manager-webhook-scaleway)
187188
- [`cert-manager-webhook-selectel`](https://github.com/selectel/cert-manager-webhook-selectel)

content/docs/configuration/acme/dns01/azuredns.md

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ If you have an Azure AKS cluster you can use the following command:
2929
az aks update \
3030
--name ${CLUSTER} \
3131
--enable-oidc-issuer \
32-
--enable-workload-identity # ℹ️ This option is currently only available when using the aks-preview extension.
32+
--enable-workload-identity
3333
```
3434

3535
> ℹ️ You can [install the Azure workload identity extension on other managed and self-managed clusters](https://azure.github.io/azure-workload-identity/docs/installation.html) if you are not using Azure AKS.
@@ -38,18 +38,15 @@ az aks update \
3838
>
3939
### Reconfigure cert-manager
4040

41-
Label the cert-manager controller Pod and ServiceAccount for the attention of the Azure Workload Identity webhook,
41+
Label the cert-manager controller Pod for the attention of the Azure Workload Identity webhook,
4242
which will result in the cert-manager controller Pod having an extra volume containing a Kubernetes ServiceAccount token which it will use to authenticate with Azure.
4343

44-
If you installed cert-manager using Helm, the labels can be configured using Helm values:
44+
If you installed cert-manager using Helm, the label can be configured using Helm values:
4545

4646
```yaml
4747
# values.yaml
4848
podLabels:
4949
azure.workload.identity/use: "true"
50-
serviceAccount:
51-
labels:
52-
azure.workload.identity/use: "true"
5350
```
5451
5552
If successful, the cert-manager Pod will have some new environment variables set,
@@ -92,16 +89,17 @@ Choose a managed identity name and create the Managed Identity:
9289

9390
```bash
9491
export IDENTITY_NAME=cert-manager
95-
az identity create --name "${IDENTITY_NAME}"
92+
export IDENTITY_RESOURCE_GROUP=<your-resource-group> # ❗ Replace with your Azure resource group
93+
az identity create --name "${IDENTITY_NAME}" --resource-group "${IDENTITY_RESOURCE_GROUP}"
9694
```
9795

9896
Grant it permission to modify the DNS zone records:
9997

10098
```bash
101-
export IDENTITY_CLIENT_ID=$(az identity show --name "${IDENTITY_NAME}" --query 'clientId' -o tsv)
99+
export IDENTITY_CLIENT_ID=$(az identity show --name "${IDENTITY_NAME}" --resource-group "${IDENTITY_RESOURCE_GROUP}" --query 'clientId' -o tsv)
102100
az role assignment create \
103101
--role "DNS Zone Contributor" \
104-
--assignee IDENTITY_CLIENT_ID \
102+
--assignee $IDENTITY_CLIENT_ID \
105103
--scope $(az network dns zone show --name $DOMAIN_NAME -o tsv --query id)
106104
```
107105

@@ -125,6 +123,7 @@ export SERVICE_ACCOUNT_ISSUER=$(az aks show --resource-group $AZURE_DEFAULTS_GRO
125123
az identity federated-credential create \
126124
--name "cert-manager" \
127125
--identity-name "${IDENTITY_NAME}" \
126+
--resource-group "${IDENTITY_RESOURCE_GROUP}" \
128127
--issuer "${SERVICE_ACCOUNT_ISSUER}" \
129128
--subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"
130129
```
@@ -159,9 +158,14 @@ spec:
159158
subscriptionID: $AZURE_SUBSCRIPTION_ID
160159
environment: AzurePublicCloud
161160
managedIdentity:
161+
# client ID of the managed identity; overrides AZURE_CLIENT_ID from the environment
162162
clientID: $IDENTITY_CLIENT_ID
163+
# # optional: tenant ID of the managed identity; overrides AZURE_TENANT_ID from the environment.
164+
# tenantID: $IDENTITY_TENANT_ID
163165
```
164166

167+
> ℹ️ `managedIdentity.clientID` and `managedIdentity.tenantID` override the values that the Azure Workload Identity webhook injects via environment variables (`AZURE_CLIENT_ID` and `AZURE_TENANT_ID`).
168+
165169
The following variables need to be filled in.
166170

167171
```bash
@@ -186,7 +190,7 @@ ClusterIssuer resources are cluster scoped (not namespaced) and only platform ad
186190
If you are using this authentication mechanism and ambient credentials are not enabled, you will see this error:
187191

188192
```bash
189-
error instantiating azuredns challenge solver: ClientID is not set but neither --cluster-issuer-ambient-credentials nor --issuer-ambient-credentials are set.
193+
error instantiating azuredns challenge solver: ClientID was omitted without providing one of `--cluster-issuer-ambient-credentials` or `--issuer-ambient-credentials`. These are necessary to enable Azure Managed Identities
190194
```
191195

192196
> ⚠️ It is possible (but not recommended) to enable this authentication mechanism for `Issuer` resources, by setting the `--issuer-ambient-credentials` flag on the cert-manager controller to true.
@@ -322,12 +326,11 @@ spec:
322326
This authentication mechanism is what cert-manager considers 'ambient credentials'. Use of ambient credentials is disabled by default for cert-manager `Issuer`s. This to ensure unprivileged users who have permission to create issuers cannot issue certificates using any credentials cert-manager incidentally has access to. To enable this authentication mechanism for `Issuer`s, you will need to set `--issuer-ambient-credentials` flag on cert-manager controller to true. (There is a corresponding `--cluster-issuer-ambient-credentials` flag which is set to `true` by default).
323327

324328
If you are using this authentication mechanism and ambient credentials are not enabled, you will see this error:
329+
325330
```bash
326-
error instantiating azuredns challenge solver: ClientID is not set but neither --cluster-issuer-ambient-credentials nor --issuer-ambient-credentials are set.
331+
error instantiating azuredns challenge solver: ClientID was omitted without providing one of `--cluster-issuer-ambient-credentials` or `--issuer-ambient-credentials`. These are necessary to enable Azure Managed Identities
327332
```
328333

329-
These are necessary to enable Azure Managed Identities.
330-
331334
## Managed Identity Using AKS Kubelet Identity
332335

333336
When creating an AKS cluster in Azure there is the option to use a managed identity that is assigned to the kubelet. This identity is assigned to the underlying node pool in the AKS cluster and can then be used by the cert-manager pods to authenticate to Azure Active Directory.
@@ -420,19 +423,18 @@ To create the service principal you can use the following script (requires
420423
`azure-cli` and `jq`):
421424

422425
```bash
423-
# Choose a name for the service principal that contacts azure DNS to present
424-
# the challenge.
425-
$ AZURE_CERT_MANAGER_NEW_SP_NAME=NEW_SERVICE_PRINCIPAL_NAME
426+
# Choose a name for the service principal that contacts azure DNS to present the challenge.
427+
AZURE_CERT_MANAGER_NEW_SP_NAME=NEW_SERVICE_PRINCIPAL_NAME
426428
# This is the name of the resource group that you have your dns zone in.
427-
$ AZURE_DNS_ZONE_RESOURCE_GROUP=AZURE_DNS_ZONE_RESOURCE_GROUP
429+
AZURE_DNS_ZONE_RESOURCE_GROUP=AZURE_DNS_ZONE_RESOURCE_GROUP
428430
# The DNS zone name. It should be something like domain.com or sub.domain.com.
429-
$ AZURE_DNS_ZONE=AZURE_DNS_ZONE
431+
AZURE_DNS_ZONE=AZURE_DNS_ZONE
430432

431-
$ DNS_SP=$(az ad sp create-for-rbac --name $AZURE_CERT_MANAGER_NEW_SP_NAME --output json)
432-
$ AZURE_CERT_MANAGER_SP_APP_ID=$(echo $DNS_SP | jq -r '.appId')
433-
$ AZURE_CERT_MANAGER_SP_PASSWORD=$(echo $DNS_SP | jq -r '.password')
434-
$ AZURE_TENANT_ID=$(echo $DNS_SP | jq -r '.tenant')
435-
$ AZURE_SUBSCRIPTION_ID=$(az account show --output json | jq -r '.id')
433+
DNS_SP=$(az ad sp create-for-rbac --name $AZURE_CERT_MANAGER_NEW_SP_NAME --output json)
434+
AZURE_CERT_MANAGER_SP_APP_ID=$(echo $DNS_SP | jq -r '.appId')
435+
AZURE_CERT_MANAGER_SP_PASSWORD=$(echo $DNS_SP | jq -r '.password')
436+
AZURE_TENANT_ID=$(echo $DNS_SP | jq -r '.tenant')
437+
AZURE_SUBSCRIPTION_ID=$(az account show --output json | jq -r '.id')
436438
```
437439

438440
For security purposes, it is appropriate to utilize RBAC to ensure that you
@@ -444,37 +446,37 @@ so that it can read/write the \_acme\_challenge TXT records to the zone.
444446
Lower the Permissions of the service principal.
445447

446448
```bash
447-
$ az role assignment delete --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role Contributor
449+
az role assignment delete --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role Contributor
448450
```
449451

450452
Give Access to DNS Zone.
451453

452454
```bash
453-
$ DNS_ID=$(az network dns zone show --name $AZURE_DNS_ZONE --resource-group $AZURE_DNS_ZONE_RESOURCE_GROUP --query "id" --output tsv)
454-
$ az role assignment create --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role "DNS Zone Contributor" --scope $DNS_ID
455+
DNS_ID=$(az network dns zone show --name $AZURE_DNS_ZONE --resource-group $AZURE_DNS_ZONE_RESOURCE_GROUP --query "id" --output tsv)
456+
az role assignment create --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role "DNS Zone Contributor" --scope $DNS_ID
455457
```
456458

457459
Check Permissions. As the result of the following command, we would like to see just one object in the permissions array with "DNS Zone Contributor" role.
458460

459461
```bash
460-
$ az role assignment list --all --assignee $AZURE_CERT_MANAGER_SP_APP_ID
462+
az role assignment list --all --assignee $AZURE_CERT_MANAGER_SP_APP_ID
461463
```
462464

463465
A secret containing service principal password should be created on Kubernetes to facilitate presenting the challenge to Azure DNS. You can create the secret with the following command:
464466

465467
```bash
466-
$ kubectl create secret generic azuredns-config --from-literal=client-secret=$AZURE_CERT_MANAGER_SP_PASSWORD
468+
kubectl create secret generic azuredns-config --from-literal=client-secret=$AZURE_CERT_MANAGER_SP_PASSWORD
467469
```
468470

469471
Get the variables for configuring the issuer.
470472

471473
```bash
472-
$ echo "AZURE_CERT_MANAGER_SP_APP_ID: $AZURE_CERT_MANAGER_SP_APP_ID"
473-
$ echo "AZURE_CERT_MANAGER_SP_PASSWORD: $AZURE_CERT_MANAGER_SP_PASSWORD"
474-
$ echo "AZURE_SUBSCRIPTION_ID: $AZURE_SUBSCRIPTION_ID"
475-
$ echo "AZURE_TENANT_ID: $AZURE_TENANT_ID"
476-
$ echo "AZURE_DNS_ZONE: $AZURE_DNS_ZONE"
477-
$ echo "AZURE_DNS_ZONE_RESOURCE_GROUP: $AZURE_DNS_ZONE_RESOURCE_GROUP"
474+
echo "AZURE_CERT_MANAGER_SP_APP_ID: $AZURE_CERT_MANAGER_SP_APP_ID"
475+
echo "AZURE_CERT_MANAGER_SP_PASSWORD: $AZURE_CERT_MANAGER_SP_PASSWORD"
476+
echo "AZURE_SUBSCRIPTION_ID: $AZURE_SUBSCRIPTION_ID"
477+
echo "AZURE_TENANT_ID: $AZURE_TENANT_ID"
478+
echo "AZURE_DNS_ZONE: $AZURE_DNS_ZONE"
479+
echo "AZURE_DNS_ZONE_RESOURCE_GROUP: $AZURE_DNS_ZONE_RESOURCE_GROUP"
478480
```
479481

480482
To configure the issuer, substitute the capital cased variables with the values

content/docs/configuration/acme/http01/README.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ controllers support `ingressClassName`, with the notable exception of
6969
ingress-gce (as per the page [Configure Ingress for external load
7070
balancing](https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress)).
7171

72-
> You can override the `ingressClassName` on a per-Ingress basis using the
73-
[`acme.cert-manager.io/http01-ingress-ingressclassname`](https://cert-manager.io/docs/reference/annotations/#acmecert-manageriohttp01-ingress-ingressclassname) annotation.
74-
7572
### `class`
7673

7774
If the `class` field is specified, a new Ingress resource with a randomly
@@ -82,9 +79,6 @@ value set to the value of the `class` field.
8279
This field is only recommended with ingress-gce. ingress-gce [doesn't support the
8380
`ingressClassName` field](https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress).
8481

85-
> You can override the `class` on a per-Ingress basis using the
86-
[`acme.cert-manager.io/http01-ingress-class`](https://cert-manager.io/docs/reference/annotations/#acmecert-manageriohttp01-ingress-class) annotation.
87-
8882
### `name`
8983

9084
If the `name` field is specified, cert-manager will edit the named
@@ -225,13 +219,13 @@ improvements over the Ingress API.
225219

226220
:::info
227221

228-
📌 This feature requires the installation of the [Gateway API bundle](https://gateway-api.sigs.k8s.io/guides/#installing-a-gateway-controller) and passing an
222+
📌 This feature requires the installation of the [Gateway API bundle](https://gateway-api.sigs.k8s.io/guides/getting-started/#installing-gateway-api) and passing an
229223
additional flag to the cert-manager controller.
230224

231-
To install v1.5.1 Gateway API bundle (Gateway CRDs and webhook), run the following command:
225+
To install v1.4.1 Gateway API bundle (CRDs associated with a version of Gateway API), run the following command:
232226

233227
```sh
234-
kubectl apply -f "https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml"
228+
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.1/standard-install.yaml
235229
```
236230

237231
Since cert-manager 1.15, the Gateway API support is no longer gated behind a

0 commit comments

Comments
 (0)