blob: 18fc9ed2a075e53313db49b7d827e6c3260a4000 [file] [log] [blame] [view]
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +04001# cert-manager
2
giod55d03a2026-07-23 16:57:48 +04003cert-manager creates TLS certificates for workloads in your Kubernetes or OpenShift cluster and renews the certificates before they expire.
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +04004
giod55d03a2026-07-23 16:57:48 +04005cert-manager can obtain certificates from a [variety of certificate authorities](https://cert-manager.io/docs/configuration/issuers/), including:
6[Let's Encrypt](https://cert-manager.io/docs/configuration/acme/), [HashiCorp Vault](https://cert-manager.io/docs/configuration/vault/),
gio15aa6632026-07-23 17:14:23 +04007[CyberArk](https://cert-manager.io/docs/configuration/venafi/) and [private PKI](https://cert-manager.io/docs/configuration/ca/).
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +04008
9## Prerequisites
10
gioc895c1d2026-07-23 17:18:25 +040011Make sure you are using a version of Kubernetes that is supported by
12cert-manager. For more information, see the [Supported Releases
13page](https://cert-manager.io/docs/releases/).
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040014
15## Installing the Chart
16
17Full installation instructions, including details on how to configure extra
giod55d03a2026-07-23 16:57:48 +040018functionality in cert-manager can be found in the [installation docs](https://cert-manager.io/docs/installation/helm/).
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040019
gio33d62932026-07-23 16:39:35 +040020To install the chart with the release name `cert-manager`:
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040021
22```console
giod55d03a2026-07-23 16:57:48 +040023helm install \
gioc895c1d2026-07-23 17:18:25 +040024 cert-manager oci://quay.io/jetstack/charts/cert-manager \
giod55d03a2026-07-23 16:57:48 +040025 --namespace cert-manager \
26 --create-namespace \
gioc895c1d2026-07-23 17:18:25 +040027 --version v1.21.0 \
giod55d03a2026-07-23 16:57:48 +040028 --set crds.enabled=true
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040029```
30
31In order to begin issuing certificates, you will need to set up a ClusterIssuer
32or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
33
34More information on the different types of issuers and how to configure them
35can be found in [our documentation](https://cert-manager.io/docs/configuration/).
36
37For information on how to configure cert-manager to automatically provision
38Certificates for Ingress resources, take a look at the
39[Securing Ingresses documentation](https://cert-manager.io/docs/usage/ingress/).
40
41> **Tip**: List all releases using `helm list`
42
43## Upgrading the Chart
44
45Special considerations may be required when upgrading the Helm chart, and these
46are documented in our full [upgrading guide](https://cert-manager.io/docs/installation/upgrading/).
47
48**Please check here before performing upgrades!**
49
50## Uninstalling the Chart
51
gio33d62932026-07-23 16:39:35 +040052To uninstall/delete the `cert-manager` deployment:
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040053
54```console
giod55d03a2026-07-23 16:57:48 +040055helm delete cert-manager --namespace cert-manager
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040056```
57
58The command removes all the Kubernetes components associated with the chart and deletes the release.
59
60If you want to completely uninstall cert-manager from your cluster, you will also need to
giod55d03a2026-07-23 16:57:48 +040061delete the previously installed CustomResourceDefinition resources.
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040062
giod55d03a2026-07-23 16:57:48 +040063> ☢️ This will remove all `Issuer`,`ClusterIssuer`,`Certificate`,`CertificateRequest`,`Order` and `Challenge` resources from the cluster:
64>
65> ```console
66> kubectl delete crd \
67> issuers.cert-manager.io \
68> clusterissuers.cert-manager.io \
69> certificates.cert-manager.io \
70> certificaterequests.cert-manager.io \
71> orders.acme.cert-manager.io \
72> challenges.acme.cert-manager.io
73> ```
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040074
75## Configuration
gio33d62932026-07-23 16:39:35 +040076<!-- AUTO-GENERATED -->
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040077
gio33d62932026-07-23 16:39:35 +040078### Global
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040079
gio33d62932026-07-23 16:39:35 +040080#### **global.imagePullSecrets** ~ `array`
81> Default value:
82> ```yaml
83> []
84> ```
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040085
gio33d62932026-07-23 16:39:35 +040086Reference to one or more secrets to be used when pulling images. For more information, see [Pull an Image from a Private Registry](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/).
87
88For example:
89
90```yaml
91imagePullSecrets:
92 - name: "image-pull-secret"
93```
giod55d03a2026-07-23 16:57:48 +040094#### **global.nodeSelector** ~ `object`
95> Default value:
96> ```yaml
97> {}
98> ```
99
100Global node selector
101
102The nodeSelector on Pods tells Kubernetes to schedule Pods on the nodes with matching labels. For more information, see [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).
103
104If a component-specific nodeSelector is also set, it will be merged and take precedence.
105
gio33d62932026-07-23 16:39:35 +0400106#### **global.commonLabels** ~ `object`
107> Default value:
108> ```yaml
109> {}
110> ```
111
112Labels to apply to all resources.
gioc895c1d2026-07-23 17:18:25 +0400113These labels are also applied to dynamically-created ACME HTTP01 solver resources
114(pods, services, ingresses, or Gateway API HTTPRoutes).
115The following ACME identity label keys are reserved and will be silently ignored on dynamically-created resources: acme.cert-manager.io/http-domain, acme.cert-manager.io/http-token, acme.cert-manager.io/http01-solver. For per-Issuer-specific labels, use the HTTP01 ingress solver podTemplate and ingressTemplate fields for pod/ingress resources, or the gatewayHTTPRoute solver labels field for Gateway API HTTPRoute resources.
gio33d62932026-07-23 16:39:35 +0400116#### **global.revisionHistoryLimit** ~ `number`
117
118The number of old ReplicaSets to retain to allow rollback (if not set, the default Kubernetes value is set to 10).
119
120#### **global.priorityClassName** ~ `string`
121> Default value:
122> ```yaml
123> ""
124> ```
125
126The optional priority class to be used for the cert-manager pods.
giod55d03a2026-07-23 16:57:48 +0400127#### **global.hostUsers** ~ `bool`
128
129Set all pods to run in a user namespace without host access. Experimental: may be removed once the Kubernetes User Namespaces feature is GA.
130
131Requirements:
132 - Kubernetes ≥ 1.33, or
133 - Kubernetes 1.27–1.32 with UserNamespacesSupport feature gate enabled.
134
135Set to false to run pods in a user namespace without host access.
136
137See [limitations](https://kubernetes.io/docs/concepts/workloads/pods/user-namespaces/#limitations) for details.
138
gio33d62932026-07-23 16:39:35 +0400139#### **global.rbac.create** ~ `bool`
140> Default value:
141> ```yaml
142> true
143> ```
144
145Create required ClusterRoles and ClusterRoleBindings for cert-manager.
146#### **global.rbac.aggregateClusterRoles** ~ `bool`
147> Default value:
148> ```yaml
149> true
150> ```
151
152Aggregate ClusterRoles to Kubernetes default user-facing roles. For more information, see [User-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)
153#### **global.podSecurityPolicy.enabled** ~ `bool`
154> Default value:
155> ```yaml
156> false
157> ```
158
159Create PodSecurityPolicy for cert-manager.
160
161Note that PodSecurityPolicy was deprecated in Kubernetes 1.21 and removed in Kubernetes 1.25.
162#### **global.podSecurityPolicy.useAppArmor** ~ `bool`
163> Default value:
164> ```yaml
165> true
166> ```
167
168Configure the PodSecurityPolicy to use AppArmor.
169#### **global.logLevel** ~ `number`
170> Default value:
171> ```yaml
172> 2
173> ```
174
175Set the verbosity of cert-manager. A range of 0 - 6, with 6 being the most verbose.
176#### **global.leaderElection.namespace** ~ `string`
177> Default value:
178> ```yaml
179> kube-system
180> ```
181
182Override the namespace used for the leader election lease.
183#### **global.leaderElection.leaseDuration** ~ `string`
184
185The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate.
186
187#### **global.leaderElection.renewDeadline** ~ `string`
188
189The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration.
190
191#### **global.leaderElection.retryPeriod** ~ `string`
192
193The duration the clients should wait between attempting acquisition and renewal of a leadership.
194
gioc895c1d2026-07-23 17:18:25 +0400195#### **global.runtimeClassName** ~ `string`
196> Default value:
197> ```yaml
198> ""
199> ```
200
201A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
202
203For example:
204
205```yaml
206runtimeClassName: gvisor
207```
208
gio33d62932026-07-23 16:39:35 +0400209#### **installCRDs** ~ `bool`
210> Default value:
211> ```yaml
212> false
213> ```
214
215This option is equivalent to setting crds.enabled=true and crds.keep=true. Deprecated: use crds.enabled and crds.keep instead.
216#### **crds.enabled** ~ `bool`
217> Default value:
218> ```yaml
219> false
220> ```
221
222This option decides if the CRDs should be installed as part of the Helm installation.
223#### **crds.keep** ~ `bool`
224> Default value:
225> ```yaml
226> true
227> ```
228
229This option makes it so that the "helm.sh/resource-policy": keep annotation is added to the CRD. This will prevent Helm from uninstalling the CRD when the Helm release is uninstalled. WARNING: when the CRDs are removed, all cert-manager custom resources
230(Certificates, Issuers, ...) will be removed too by the garbage collector.
231### Controller
232
233#### **replicaCount** ~ `number`
234> Default value:
235> ```yaml
236> 1
237> ```
238
239The number of replicas of the cert-manager controller to run.
240
241The default is 1, but in production set this to 2 or 3 to provide high availability.
242
243If `replicas > 1`, consider setting `podDisruptionBudget.enabled=true`.
244
245Note that cert-manager uses leader election to ensure that there can only be a single instance active at a time.
246#### **strategy** ~ `object`
247> Default value:
248> ```yaml
249> {}
250> ```
251
252Deployment update strategy for the cert-manager controller deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
253
254For example:
255
256```yaml
257strategy:
258 type: RollingUpdate
259 rollingUpdate:
260 maxSurge: 0
261 maxUnavailable: 1
262```
263#### **podDisruptionBudget.enabled** ~ `bool`
264> Default value:
265> ```yaml
266> false
267> ```
268
269Enable or disable the PodDisruptionBudget resource.
270
271This prevents downtime during voluntary disruptions such as during a Node upgrade. For example, the PodDisruptionBudget will block `kubectl drain` if it is used on the Node where the only remaining cert-manager
272Pod is currently running.
273#### **podDisruptionBudget.minAvailable** ~ `unknown`
274
giob6e9f2f2026-07-23 16:53:10 +0400275This configures the minimum available pods for disruptions. It can either be set to an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +0400276It cannot be used if `maxUnavailable` is set.
277
278
279#### **podDisruptionBudget.maxUnavailable** ~ `unknown`
280
giob6e9f2f2026-07-23 16:53:10 +0400281This configures the maximum unavailable pods for disruptions. It can either be set to an integer (e.g., 1) or a percentage value (e.g., 25%). it cannot be used if `minAvailable` is set.
gio33d62932026-07-23 16:39:35 +0400282
283
gio15aa6632026-07-23 17:14:23 +0400284#### **podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
285
286This configures how to act with unhealthy pods during eviction. Note that this requires Kubernetes 1.31 or `PDBUnhealthyPodEvictionPolicy` feature gate enabled for the cluster to work.
287
288
gio33d62932026-07-23 16:39:35 +0400289#### **featureGates** ~ `string`
290> Default value:
291> ```yaml
292> ""
293> ```
294
295A comma-separated list of feature gates that should be enabled on the controller pod.
296#### **maxConcurrentChallenges** ~ `number`
297> Default value:
298> ```yaml
299> 60
300> ```
301
302The maximum number of challenges that can be scheduled as 'processing' at once.
gio15aa6632026-07-23 17:14:23 +0400303#### **imageRegistry** ~ `string`
304> Default value:
305> ```yaml
306> quay.io
307> ```
308
309The container registry used for all cert-manager images by default. This can include path prefixes (e.g. `artifactory.example.com/docker`).
310
311#### **imageNamespace** ~ `string`
312> Default value:
313> ```yaml
314> jetstack
315> ```
316
317The repository namespace used for all cert-manager images by default.
318Examples:
319- jetstack
320- cert-manager
321
gio33d62932026-07-23 16:39:35 +0400322#### **image.registry** ~ `string`
323
gio15aa6632026-07-23 17:14:23 +0400324Deprecated: per-component registry prefix.
325
326If set, this value is *prepended* to the image repository that the chart would otherwise render. This applies both when `image.repository` is set and when the repository is computed from
327`imageRegistry` + `imageNamespace` + `image.name`.
328
329This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
330
331#### **image.name** ~ `string`
332> Default value:
333> ```yaml
334> cert-manager-controller
335> ```
336
337The image name for the cert-manager controller.
338This is used (together with `imageRegistry` and `imageNamespace`) to construct the full image reference.
gio33d62932026-07-23 16:39:35 +0400339
340#### **image.repository** ~ `string`
341> Default value:
342> ```yaml
gio15aa6632026-07-23 17:14:23 +0400343> ""
gio33d62932026-07-23 16:39:35 +0400344> ```
345
gio15aa6632026-07-23 17:14:23 +0400346Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `image.name`).
347Example: quay.io/jetstack/cert-manager-controller
gio33d62932026-07-23 16:39:35 +0400348
349#### **image.tag** ~ `string`
350
351Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
352
353#### **image.digest** ~ `string`
354
gio15aa6632026-07-23 17:14:23 +0400355Setting a digest pins the image. If a tag is also set, the rendered reference will include both ("image:tag@digest"), though only the digest will be used for pulling.
gio33d62932026-07-23 16:39:35 +0400356
357#### **image.pullPolicy** ~ `string`
358> Default value:
359> ```yaml
360> IfNotPresent
361> ```
362
363Kubernetes imagePullPolicy on Deployment.
364#### **clusterResourceNamespace** ~ `string`
365> Default value:
366> ```yaml
367> ""
368> ```
369
370Override the namespace used to store DNS provider credentials etc. for ClusterIssuer resources. By default, the same namespace as cert-manager is deployed within is used. This namespace will not be automatically created by the Helm chart.
371#### **namespace** ~ `string`
372> Default value:
373> ```yaml
374> ""
375> ```
376
377This namespace allows you to define where the services are installed into. If not set then they use the namespace of the release. This is helpful when installing cert manager as a chart dependency (sub chart).
378#### **fullnameOverride** ~ `string`
379
380Override the "cert-manager.fullname" value. This value is used as part of most of the names of the resources created by this Helm chart.
381
382#### **nameOverride** ~ `string`
383
giob6e9f2f2026-07-23 16:53:10 +0400384Override the "cert-manager.name" value, which is used to annotate some of the resources that are created by this Chart (using "app.kubernetes.io/name"). NOTE: There are some inconsistencies in the Helm chart when it comes to these annotations (some resources use, e.g., "cainjector.name" which resolves to the value "cainjector").
gio33d62932026-07-23 16:39:35 +0400385
386#### **serviceAccount.create** ~ `bool`
387> Default value:
388> ```yaml
389> true
390> ```
391
392Specifies whether a service account should be created.
393#### **serviceAccount.name** ~ `string`
394
395The name of the service account to use.
396If not set and create is true, a name is generated using the fullname template.
397
398#### **serviceAccount.annotations** ~ `object`
399
400Optional additional annotations to add to the controller's Service Account. Templates are allowed for both keys and values.
401Example using templating:
402
403```yaml
404annotations:
405 "{{ .Chart.Name }}-helm-chart/version": "{{ .Chart.Version }}"
406```
407
408#### **serviceAccount.labels** ~ `object`
409
410Optional additional labels to add to the controller's Service Account.
411
412#### **serviceAccount.automountServiceAccountToken** ~ `bool`
413> Default value:
414> ```yaml
415> true
416> ```
417
418Automount API credentials for a Service Account.
419#### **automountServiceAccountToken** ~ `bool`
420
421Automounting API credentials for a particular pod.
422
423#### **enableCertificateOwnerRef** ~ `bool`
424> Default value:
425> ```yaml
426> false
427> ```
428
429When this flag is enabled, secrets will be automatically removed when the certificate resource is deleted.
430#### **config** ~ `object`
431> Default value:
432> ```yaml
433> {}
434> ```
435
436This property is used to configure options for the controller pod. This allows setting options that would usually be provided using flags.
437
438If `apiVersion` and `kind` are unspecified they default to the current latest version (currently `controller.config.cert-manager.io/v1alpha1`). You can pin the version by specifying the `apiVersion` yourself.
439
440For example:
441
442```yaml
443config:
444 apiVersion: controller.config.cert-manager.io/v1alpha1
445 kind: ControllerConfiguration
446 logging:
447 verbosity: 2
448 format: text
449 leaderElectionConfig:
450 namespace: kube-system
451 kubernetesAPIQPS: 9000
452 kubernetesAPIBurst: 9000
453 numberOfConcurrentWorkers: 200
gioc895c1d2026-07-23 17:18:25 +0400454 gatewayAPI:
455 enable: true
gio15aa6632026-07-23 17:14:23 +0400456 # Feature gates as of v1.20.0. Listed with their default values.
gio33d62932026-07-23 16:39:35 +0400457 # See https://cert-manager.io/docs/cli/controller/
458 featureGates:
gio33d62932026-07-23 16:39:35 +0400459 AllAlpha: false # ALPHA - default=false
460 AllBeta: false # BETA - default=false
gio15aa6632026-07-23 17:14:23 +0400461 ACMEHTTP01IngressPathTypeExact: true # BETA - default=true
gio33d62932026-07-23 16:39:35 +0400462 ExperimentalCertificateSigningRequestControllers: false # ALPHA - default=false
463 ExperimentalGatewayAPISupport: true # BETA - default=true
464 LiteralCertificateSubject: true # BETA - default=true
465 NameConstraints: true # BETA - default=true
gio15aa6632026-07-23 17:14:23 +0400466 OtherNames: true # BETA - default=true
gio33d62932026-07-23 16:39:35 +0400467 SecretsFilteredCaching: true # BETA - default=true
468 ServerSideApply: false # ALPHA - default=false
469 StableCertificateRequestName: true # BETA - default=true
470 UseCertificateRequestBasicConstraints: false # ALPHA - default=false
gio33d62932026-07-23 16:39:35 +0400471 # Configure the metrics server for TLS
472 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
473 metricsTLSConfig:
474 dynamic:
475 secretNamespace: "cert-manager"
476 secretName: "cert-manager-metrics-ca"
477 dnsNames:
478 - cert-manager-metrics
gio15aa6632026-07-23 17:14:23 +0400479 # Configure PEM size limits for certificate validation
480 # Useful for certificates with many DNS names (e.g., Istio gateways with 100+ DNS names)
481 pemSizeLimitsConfig:
482 maxCertificateSize: 36500 # Maximum size in bytes for individual certificates (default: 36500)
483 maxPrivateKeySize: 13000 # Maximum size in bytes for private keys (default: 13000)
484 maxChainLength: 95000 # Maximum size in bytes for certificate chains (default: 95000)
485 maxBundleSize: 330000 # Maximum size in bytes for certificate bundles (default: 330000)
gioc895c1d2026-07-23 17:18:25 +0400486 # Configure certificate request backoff durations
487 certificateRequestMinimumBackoffDuration: 1h
488 certificateRequestMaximumBackoffDuration: 32h
gio33d62932026-07-23 16:39:35 +0400489```
490#### **dns01RecursiveNameservers** ~ `string`
491> Default value:
492> ```yaml
493> ""
494> ```
495
496A comma-separated string with the host and port of the recursive nameservers cert-manager should query.
497#### **dns01RecursiveNameserversOnly** ~ `bool`
498> Default value:
499> ```yaml
500> false
501> ```
502
503Forces cert-manager to use only the recursive nameservers for verification. Enabling this option could cause the DNS01 self check to take longer owing to caching performed by the recursive nameservers.
504#### **disableAutoApproval** ~ `bool`
505> Default value:
506> ```yaml
507> false
508> ```
509
510Option to disable cert-manager's build-in auto-approver. The auto-approver approves all CertificateRequests that reference issuers matching the 'approveSignerNames' option. This 'disableAutoApproval' option is useful when you want to make all approval decisions using a different approver (like approver-policy - https://github.com/cert-manager/approver-policy).
511#### **approveSignerNames** ~ `array`
512> Default value:
513> ```yaml
514> - issuers.cert-manager.io/*
515> - clusterissuers.cert-manager.io/*
516> ```
517
giob6e9f2f2026-07-23 16:53:10 +0400518List of signer names that cert-manager will approve by default. CertificateRequests referencing these signer names will be auto-approved by cert-manager. Defaults to just approving the cert-manager.io Issuer and ClusterIssuer issuers. When set to an empty array, ALL issuers will be auto-approved by cert-manager. To disable the auto-approval, because, e.g., you are using approver-policy, you can enable 'disableAutoApproval'.
gio33d62932026-07-23 16:39:35 +0400519ref: https://cert-manager.io/docs/concepts/certificaterequest/#approval
520
521#### **extraArgs** ~ `array`
522> Default value:
523> ```yaml
524> []
525> ```
526
527Additional command line flags to pass to cert-manager controller binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-controller:<version> --help`.
528
529Use this flag to enable or disable arbitrary controllers. For example, to disable the CertificateRequests approver.
530
531For example:
532
533```yaml
534extraArgs:
535 - --controllers=*,-certificaterequests-approver
536```
gio15aa6632026-07-23 17:14:23 +0400537#### **extraContainers** ~ `array`
538> Default value:
539> ```yaml
540> []
541> ```
542
543Extra containers to add to the pod spec in the deployment of the cert-manager controller. For example, to deploy the [aws_signing_helper](https://github.com/aws/rolesanywhere-credential-helper) (replacing the ARNs as relevant):
544
545```yaml
546extraEnv:
547 - name: AWS_EC2_METADATA_SERVICE_ENDPOINT
548 - value: http://127.0.0.1:9911
549extraContainers:
550 - name: rolesanywhere-credential-helper
551 image: public.ecr.aws/rolesanywhere/credential-helper:latest
552 command: [aws_signing_helper]
553 args:
554 - serve
555 - --private-key
556 - /etc/cert/tls.key
557 - --certificate
558 - /etc/cert/tls.crt
559 - --role-arn
560 - $ROLE_ARN
561 - --profile-arn
562 - $PROFILE_ARN
563 - --trust-anchor-arn
564 - $TRUST_ANCHOR_ARN
565 volumeMounts:
566 - name: cert
567 mountPath: /etc/cert/
568 readOnly: true
569volumes:
570 - name: cert
571 secret:
572 secretName: cert
573```
gio33d62932026-07-23 16:39:35 +0400574#### **extraEnv** ~ `array`
575> Default value:
576> ```yaml
577> []
578> ```
579
580Additional environment variables to pass to cert-manager controller binary.
581For example:
582
583```yaml
584extraEnv:
585- name: SOME_VAR
586 value: 'some value'
587```
588#### **resources** ~ `object`
589> Default value:
590> ```yaml
591> {}
592> ```
593
594Resources to provide to the cert-manager controller pod.
595
596For example:
597
598```yaml
599requests:
600 cpu: 10m
601 memory: 32Mi
602```
603
604For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
605#### **securityContext** ~ `object`
606> Default value:
607> ```yaml
608> runAsNonRoot: true
609> seccompProfile:
610> type: RuntimeDefault
611> ```
612
613Pod Security Context.
614For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
615
616#### **containerSecurityContext** ~ `object`
617> Default value:
618> ```yaml
619> allowPrivilegeEscalation: false
620> capabilities:
621> drop:
622> - ALL
623> readOnlyRootFilesystem: true
624> ```
625
626Container Security Context to be set on the controller component container. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
627
628#### **volumes** ~ `array`
629> Default value:
630> ```yaml
631> []
632> ```
633
634Additional volumes to add to the cert-manager controller pod.
635#### **volumeMounts** ~ `array`
636> Default value:
637> ```yaml
638> []
639> ```
640
641Additional volume mounts to add to the cert-manager controller container.
642#### **deploymentAnnotations** ~ `object`
643
644Optional additional annotations to add to the controller Deployment.
645
646#### **podAnnotations** ~ `object`
647
648Optional additional annotations to add to the controller Pods.
649
650#### **podLabels** ~ `object`
651> Default value:
652> ```yaml
653> {}
654> ```
655
656Optional additional labels to add to the controller Pods.
657#### **serviceAnnotations** ~ `object`
658
659Optional annotations to add to the controller Service.
660
661#### **serviceLabels** ~ `object`
662
663Optional additional labels to add to the controller Service.
664
665#### **serviceIPFamilyPolicy** ~ `string`
666
667Optionally set the IP family policy for the controller Service to configure dual-stack; see [Configure dual-stack](https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services).
668
669#### **serviceIPFamilies** ~ `array`
670
671Optionally set the IP families for the controller Service that should be supported, in the order in which they should be applied to ClusterIP. Can be IPv4 and/or IPv6.
672
673#### **podDnsPolicy** ~ `string`
674
675Pod DNS policy.
676For more information, see [Pod's DNS Policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy).
677
678#### **podDnsConfig** ~ `object`
679
680Pod DNS configuration. The podDnsConfig field is optional and can work with any podDnsPolicy settings. However, when a Pod's dnsPolicy is set to "None", the dnsConfig field has to be specified. For more information, see [Pod's DNS Config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config).
681
682#### **hostAliases** ~ `array`
683> Default value:
684> ```yaml
685> []
686> ```
687
688Optional hostAliases for cert-manager-controller pods. May be useful when performing ACME DNS-01 self checks.
689#### **nodeSelector** ~ `object`
690> Default value:
691> ```yaml
692> kubernetes.io/os: linux
693> ```
694
695The nodeSelector on Pods tells Kubernetes to schedule Pods on the nodes with matching labels. For more information, see [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).
696
697This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
698
gio15aa6632026-07-23 17:14:23 +0400699#### **networkPolicy.enabled** ~ `bool`
700> Default value:
701> ```yaml
702> false
703> ```
704
705Create network policies for cert-manager.
706#### **networkPolicy.ingress** ~ `array`
707> Default value:
708> ```yaml
709> - ports:
710> - port: http-metrics
711> protocol: TCP
712> - port: http-healthz
713> protocol: TCP
714> ```
715
716Ingress rule for the cert-manager network policy.
717By default all pods are allowed access to:
718 http-metrics and http-healthz ports
719
720#### **networkPolicy.egress** ~ `array`
721> Default value:
722> ```yaml
723> - ports:
724> - port: 80
725> protocol: TCP
726> - port: 443
727> protocol: TCP
728> - port: 53
729> protocol: TCP
730> - port: 53
731> protocol: UDP
732> - port: 6443
733> protocol: TCP
734> ```
735
736Egress rule for the cert-manager network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
737
gio33d62932026-07-23 16:39:35 +0400738#### **ingressShim.defaultIssuerName** ~ `string`
739
740Optional default issuer to use for ingress resources.
741
742#### **ingressShim.defaultIssuerKind** ~ `string`
743
744Optional default issuer kind to use for ingress resources.
745
746#### **ingressShim.defaultIssuerGroup** ~ `string`
747
748Optional default issuer group to use for ingress resources.
749
750#### **http_proxy** ~ `string`
751
752Configures the HTTP_PROXY environment variable where a HTTP proxy is required.
753
754#### **https_proxy** ~ `string`
755
756Configures the HTTPS_PROXY environment variable where a HTTP proxy is required.
757
758#### **no_proxy** ~ `string`
759
760Configures the NO_PROXY environment variable where a HTTP proxy is required, but certain domains should be excluded.
761
762#### **affinity** ~ `object`
763> Default value:
764> ```yaml
765> {}
766> ```
767
768A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
769
770For example:
771
772```yaml
773affinity:
774 nodeAffinity:
775 requiredDuringSchedulingIgnoredDuringExecution:
776 nodeSelectorTerms:
777 - matchExpressions:
778 - key: foo.bar.com/role
779 operator: In
780 values:
781 - master
782```
gioc895c1d2026-07-23 17:18:25 +0400783#### **runtimeClassName** ~ `string`
784> Default value:
785> ```yaml
786> ""
787> ```
788
789A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
790
791For example:
792
793```yaml
794runtimeClassName: gvisor
795```
796
gio33d62932026-07-23 16:39:35 +0400797#### **tolerations** ~ `array`
798> Default value:
799> ```yaml
800> []
801> ```
802
803A list of Kubernetes Tolerations, if required. For more information, see [Toleration v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core).
804
805For example:
806
807```yaml
808tolerations:
809- key: foo.bar.com/role
810 operator: Equal
811 value: master
812 effect: NoSchedule
813```
814#### **topologySpreadConstraints** ~ `array`
815> Default value:
816> ```yaml
817> []
818> ```
819
820A list of Kubernetes TopologySpreadConstraints, if required. For more information, see [Topology spread constraint v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#topologyspreadconstraint-v1-core
821
822For example:
823
824```yaml
825topologySpreadConstraints:
826- maxSkew: 2
827 topologyKey: topology.kubernetes.io/zone
828 whenUnsatisfiable: ScheduleAnyway
829 labelSelector:
830 matchLabels:
831 app.kubernetes.io/instance: cert-manager
832 app.kubernetes.io/component: controller
833```
834#### **livenessProbe** ~ `object`
835> Default value:
836> ```yaml
837> enabled: true
838> failureThreshold: 8
839> initialDelaySeconds: 10
840> periodSeconds: 10
841> successThreshold: 1
842> timeoutSeconds: 15
843> ```
844
845LivenessProbe settings for the controller container of the controller Pod.
846
847This is enabled by default, in order to enable the clock-skew liveness probe that restarts the controller in case of a skew between the system clock and the monotonic clock. LivenessProbe durations and thresholds are based on those used for the Kubernetes controller-manager. For more information see the following on the
848[Kubernetes GitHub repository](https://github.com/kubernetes/kubernetes/blob/806b30170c61a38fedd54cc9ede4cd6275a1ad3b/cmd/kubeadm/app/util/staticpod/utils.go#L241-L245)
849
850#### **enableServiceLinks** ~ `bool`
851> Default value:
852> ```yaml
853> false
854> ```
855
856enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
857### Prometheus
858
859#### **prometheus.enabled** ~ `bool`
860> Default value:
861> ```yaml
862> true
863> ```
864
865Enable Prometheus monitoring for the cert-manager controller and webhook. If you use the Prometheus Operator, set prometheus.podmonitor.enabled or prometheus.servicemonitor.enabled, to create a PodMonitor or a
866ServiceMonitor resource.
giob6e9f2f2026-07-23 16:53:10 +0400867Otherwise, 'prometheus.io' annotations are added to the cert-manager and cert-manager-webhook Deployments. Note that you cannot enable both PodMonitor and ServiceMonitor as they are mutually exclusive. Enabling both will result in an error.
gio33d62932026-07-23 16:39:35 +0400868#### **prometheus.servicemonitor.enabled** ~ `bool`
869> Default value:
870> ```yaml
871> false
872> ```
873
874Create a ServiceMonitor to add cert-manager to Prometheus.
875#### **prometheus.servicemonitor.namespace** ~ `string`
876
877The namespace that the service monitor should live in, defaults to the cert-manager namespace.
878
879#### **prometheus.servicemonitor.prometheusInstance** ~ `string`
880> Default value:
881> ```yaml
882> default
883> ```
884
885Specifies the `prometheus` label on the created ServiceMonitor. This is used when different Prometheus instances have label selectors matching different ServiceMonitors.
gio33d62932026-07-23 16:39:35 +0400886#### **prometheus.servicemonitor.interval** ~ `string`
887> Default value:
888> ```yaml
889> 60s
890> ```
891
892The interval to scrape metrics.
893#### **prometheus.servicemonitor.scrapeTimeout** ~ `string`
894> Default value:
895> ```yaml
896> 30s
897> ```
898
899The timeout before a metrics scrape fails.
900#### **prometheus.servicemonitor.labels** ~ `object`
901> Default value:
902> ```yaml
903> {}
904> ```
905
906Additional labels to add to the ServiceMonitor.
907#### **prometheus.servicemonitor.annotations** ~ `object`
908> Default value:
909> ```yaml
910> {}
911> ```
912
913Additional annotations to add to the ServiceMonitor.
914#### **prometheus.servicemonitor.honorLabels** ~ `bool`
915> Default value:
916> ```yaml
917> false
918> ```
919
920Keep labels from scraped data, overriding server-side labels.
921#### **prometheus.servicemonitor.endpointAdditionalProperties** ~ `object`
922> Default value:
923> ```yaml
924> {}
925> ```
926
927EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
928
929For example:
930
931```yaml
932endpointAdditionalProperties:
933 relabelings:
934 - action: replace
935 sourceLabels:
936 - __meta_kubernetes_pod_node_name
937 targetLabel: instance
938```
939
940
941
942#### **prometheus.podmonitor.enabled** ~ `bool`
943> Default value:
944> ```yaml
945> false
946> ```
947
948Create a PodMonitor to add cert-manager to Prometheus.
949#### **prometheus.podmonitor.namespace** ~ `string`
950
951The namespace that the pod monitor should live in, defaults to the cert-manager namespace.
952
953#### **prometheus.podmonitor.prometheusInstance** ~ `string`
954> Default value:
955> ```yaml
956> default
957> ```
958
959Specifies the `prometheus` label on the created PodMonitor. This is used when different Prometheus instances have label selectors matching different PodMonitors.
gio33d62932026-07-23 16:39:35 +0400960#### **prometheus.podmonitor.interval** ~ `string`
961> Default value:
962> ```yaml
963> 60s
964> ```
965
966The interval to scrape metrics.
967#### **prometheus.podmonitor.scrapeTimeout** ~ `string`
968> Default value:
969> ```yaml
970> 30s
971> ```
972
973The timeout before a metrics scrape fails.
974#### **prometheus.podmonitor.labels** ~ `object`
975> Default value:
976> ```yaml
977> {}
978> ```
979
980Additional labels to add to the PodMonitor.
981#### **prometheus.podmonitor.annotations** ~ `object`
982> Default value:
983> ```yaml
984> {}
985> ```
986
987Additional annotations to add to the PodMonitor.
988#### **prometheus.podmonitor.honorLabels** ~ `bool`
989> Default value:
990> ```yaml
991> false
992> ```
993
994Keep labels from scraped data, overriding server-side labels.
995#### **prometheus.podmonitor.endpointAdditionalProperties** ~ `object`
996> Default value:
997> ```yaml
998> {}
999> ```
1000
1001EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
1002
1003For example:
1004
1005```yaml
1006endpointAdditionalProperties:
1007 relabelings:
1008 - action: replace
1009 sourceLabels:
1010 - __meta_kubernetes_pod_node_name
1011 targetLabel: instance
1012 # Configure the PodMonitor for TLS connections
1013 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1014 scheme: https
1015 tlsConfig:
1016 serverName: cert-manager-metrics
1017 ca:
1018 secret:
1019 name: cert-manager-metrics-ca
1020 key: "tls.crt"
1021```
1022
1023
1024
1025### Webhook
1026
1027#### **webhook.replicaCount** ~ `number`
1028> Default value:
1029> ```yaml
1030> 1
1031> ```
1032
1033Number of replicas of the cert-manager webhook to run.
1034
1035The default is 1, but in production set this to 2 or 3 to provide high availability.
1036
1037If `replicas > 1`, consider setting `webhook.podDisruptionBudget.enabled=true`.
1038#### **webhook.timeoutSeconds** ~ `number`
1039> Default value:
1040> ```yaml
1041> 30
1042> ```
1043
1044The number of seconds the API server should wait for the webhook to respond before treating the call as a failure. The value must be between 1 and 30 seconds. For more information, see
1045[Validating webhook configuration v1](https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-webhook-configuration-v1/).
1046
1047The default is set to the maximum value of 30 seconds as users sometimes report that the connection between the K8S API server and the cert-manager webhook server times out. If *this* timeout is reached, the error message will be "context deadline exceeded", which doesn't help the user diagnose what phase of the HTTPS connection timed out. For example, it could be during DNS resolution, TCP connection, TLS negotiation, HTTP negotiation, or slow HTTP response from the webhook server. By setting this timeout to its maximum value the underlying timeout error message has more chance of being returned to the end user.
1048#### **webhook.config** ~ `object`
1049> Default value:
1050> ```yaml
1051> {}
1052> ```
1053
1054This is used to configure options for the webhook pod. This allows setting options that would usually be provided using flags.
1055
1056If `apiVersion` and `kind` are unspecified they default to the current latest version (currently `webhook.config.cert-manager.io/v1alpha1`). You can pin the version by specifying the `apiVersion` yourself.
1057
1058For example:
1059
1060```yaml
1061apiVersion: webhook.config.cert-manager.io/v1alpha1
1062kind: WebhookConfiguration
1063# The port that the webhook listens on for requests.
1064# In GKE private clusters, by default Kubernetes apiservers are allowed to
1065# talk to the cluster nodes only on 443 and 10250. Configuring
1066# securePort: 10250 therefore will work out-of-the-box without needing to add firewall
1067# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers < 1000.
1068# This should be uncommented and set as a default by the chart once
1069# the apiVersion of WebhookConfiguration graduates beyond v1alpha1.
1070securePort: 10250
1071# Configure the metrics server for TLS
1072# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1073metricsTLSConfig:
1074 dynamic:
1075 secretNamespace: "cert-manager"
1076 secretName: "cert-manager-metrics-ca"
1077 dnsNames:
1078 - cert-manager-metrics
1079```
1080#### **webhook.strategy** ~ `object`
1081> Default value:
1082> ```yaml
1083> {}
1084> ```
1085
1086The update strategy for the cert-manager webhook deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy)
1087
1088For example:
1089
1090```yaml
1091strategy:
1092 type: RollingUpdate
1093 rollingUpdate:
1094 maxSurge: 0
1095 maxUnavailable: 1
1096```
1097#### **webhook.securityContext** ~ `object`
1098> Default value:
1099> ```yaml
1100> runAsNonRoot: true
1101> seccompProfile:
1102> type: RuntimeDefault
1103> ```
1104
1105Pod Security Context to be set on the webhook component Pod. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
1106
1107#### **webhook.containerSecurityContext** ~ `object`
1108> Default value:
1109> ```yaml
1110> allowPrivilegeEscalation: false
1111> capabilities:
1112> drop:
1113> - ALL
1114> readOnlyRootFilesystem: true
1115> ```
1116
1117Container Security Context to be set on the webhook component container. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
1118
1119#### **webhook.podDisruptionBudget.enabled** ~ `bool`
1120> Default value:
1121> ```yaml
1122> false
1123> ```
1124
1125Enable or disable the PodDisruptionBudget resource.
1126
1127This prevents downtime during voluntary disruptions such as during a Node upgrade. For example, the PodDisruptionBudget will block `kubectl drain` if it is used on the Node where the only remaining cert-manager
1128Pod is currently running.
1129#### **webhook.podDisruptionBudget.minAvailable** ~ `unknown`
1130
giob6e9f2f2026-07-23 16:53:10 +04001131This property configures the minimum available pods for disruptions. Can either be set to an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001132It cannot be used if `maxUnavailable` is set.
1133
1134
1135#### **webhook.podDisruptionBudget.maxUnavailable** ~ `unknown`
1136
giob6e9f2f2026-07-23 16:53:10 +04001137This property configures the maximum unavailable pods for disruptions. Can either be set to an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001138It cannot be used if `minAvailable` is set.
1139
1140
gio15aa6632026-07-23 17:14:23 +04001141#### **webhook.podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
1142
1143This configures how to act with unhealthy pods during eviction. Note that this requires Kubernetes 1.31 or `PDBUnhealthyPodEvictionPolicy` feature gate enabled for the cluster to work.
1144
1145
gio33d62932026-07-23 16:39:35 +04001146#### **webhook.deploymentAnnotations** ~ `object`
1147
1148Optional additional annotations to add to the webhook Deployment.
1149
1150#### **webhook.podAnnotations** ~ `object`
1151
1152Optional additional annotations to add to the webhook Pods.
1153
1154#### **webhook.serviceAnnotations** ~ `object`
1155
1156Optional additional annotations to add to the webhook Service.
1157
1158#### **webhook.mutatingWebhookConfigurationAnnotations** ~ `object`
1159
1160Optional additional annotations to add to the webhook MutatingWebhookConfiguration.
1161
1162#### **webhook.validatingWebhookConfigurationAnnotations** ~ `object`
1163
1164Optional additional annotations to add to the webhook ValidatingWebhookConfiguration.
1165
1166#### **webhook.validatingWebhookConfiguration.namespaceSelector** ~ `object`
1167> Default value:
1168> ```yaml
1169> matchExpressions:
1170> - key: cert-manager.io/disable-validation
1171> operator: NotIn
1172> values:
1173> - "true"
1174> ```
1175
1176Configure spec.namespaceSelector for validating webhooks.
1177
1178#### **webhook.mutatingWebhookConfiguration.namespaceSelector** ~ `object`
1179> Default value:
1180> ```yaml
1181> {}
1182> ```
1183
1184Configure spec.namespaceSelector for mutating webhooks.
1185
1186#### **webhook.extraArgs** ~ `array`
1187> Default value:
1188> ```yaml
1189> []
1190> ```
1191
1192Additional command line flags to pass to cert-manager webhook binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-webhook:<version> --help`.
1193#### **webhook.extraEnv** ~ `array`
1194> Default value:
1195> ```yaml
1196> []
1197> ```
1198
1199Additional environment variables to pass to cert-manager webhook binary.
1200For example:
1201
1202```yaml
1203extraEnv:
1204- name: SOME_VAR
1205 value: 'some value'
1206```
1207#### **webhook.featureGates** ~ `string`
1208> Default value:
1209> ```yaml
1210> ""
1211> ```
1212
1213Comma separated list of feature gates that should be enabled on the webhook pod.
1214#### **webhook.resources** ~ `object`
1215> Default value:
1216> ```yaml
1217> {}
1218> ```
1219
1220Resources to provide to the cert-manager webhook pod.
1221
1222For example:
1223
1224```yaml
1225requests:
1226 cpu: 10m
1227 memory: 32Mi
1228```
1229
1230For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1231#### **webhook.livenessProbe** ~ `object`
1232> Default value:
1233> ```yaml
1234> failureThreshold: 3
1235> initialDelaySeconds: 60
1236> periodSeconds: 10
1237> successThreshold: 1
1238> timeoutSeconds: 1
1239> ```
1240
1241Liveness probe values.
1242For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1243
1244#### **webhook.readinessProbe** ~ `object`
1245> Default value:
1246> ```yaml
1247> failureThreshold: 3
1248> initialDelaySeconds: 5
1249> periodSeconds: 5
1250> successThreshold: 1
1251> timeoutSeconds: 1
1252> ```
1253
1254Readiness probe values.
1255For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1256
1257#### **webhook.nodeSelector** ~ `object`
1258> Default value:
1259> ```yaml
1260> kubernetes.io/os: linux
1261> ```
1262
1263The nodeSelector on Pods tells Kubernetes to schedule Pods on the nodes with matching labels. For more information, see [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).
1264
1265This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1266
1267#### **webhook.affinity** ~ `object`
1268> Default value:
1269> ```yaml
1270> {}
1271> ```
1272
1273A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1274
1275For example:
1276
1277```yaml
1278affinity:
1279 nodeAffinity:
1280 requiredDuringSchedulingIgnoredDuringExecution:
1281 nodeSelectorTerms:
1282 - matchExpressions:
1283 - key: foo.bar.com/role
1284 operator: In
1285 values:
1286 - master
1287```
gioc895c1d2026-07-23 17:18:25 +04001288#### **webhook.runtimeClassName** ~ `string`
1289> Default value:
1290> ```yaml
1291> ""
1292> ```
1293
1294A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
1295
1296For example:
1297
1298```yaml
1299runtimeClassName: gvisor
1300```
1301
gio33d62932026-07-23 16:39:35 +04001302#### **webhook.tolerations** ~ `array`
1303> Default value:
1304> ```yaml
1305> []
1306> ```
1307
1308A list of Kubernetes Tolerations, if required. For more information, see [Toleration v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core).
1309
1310For example:
1311
1312```yaml
1313tolerations:
1314- key: foo.bar.com/role
1315 operator: Equal
1316 value: master
1317 effect: NoSchedule
1318```
1319#### **webhook.topologySpreadConstraints** ~ `array`
1320> Default value:
1321> ```yaml
1322> []
1323> ```
1324
1325A list of Kubernetes TopologySpreadConstraints, if required. For more information, see [Topology spread constraint v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#topologyspreadconstraint-v1-core).
1326
1327For example:
1328
1329```yaml
1330topologySpreadConstraints:
1331- maxSkew: 2
1332 topologyKey: topology.kubernetes.io/zone
1333 whenUnsatisfiable: ScheduleAnyway
1334 labelSelector:
1335 matchLabels:
1336 app.kubernetes.io/instance: cert-manager
1337 app.kubernetes.io/component: controller
1338```
1339#### **webhook.podLabels** ~ `object`
1340> Default value:
1341> ```yaml
1342> {}
1343> ```
1344
1345Optional additional labels to add to the Webhook Pods.
1346#### **webhook.serviceLabels** ~ `object`
1347> Default value:
1348> ```yaml
1349> {}
1350> ```
1351
1352Optional additional labels to add to the Webhook Service.
1353#### **webhook.serviceIPFamilyPolicy** ~ `string`
1354> Default value:
1355> ```yaml
1356> ""
1357> ```
1358
1359Optionally set the IP family policy for the controller Service to configure dual-stack; see [Configure dual-stack](https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services).
1360#### **webhook.serviceIPFamilies** ~ `array`
1361> Default value:
1362> ```yaml
1363> []
1364> ```
1365
1366Optionally set the IP families for the controller Service that should be supported, in the order in which they should be applied to ClusterIP. Can be IPv4 and/or IPv6.
1367#### **webhook.image.registry** ~ `string`
1368
gio15aa6632026-07-23 17:14:23 +04001369Deprecated: per-component registry prefix.
1370
1371If set, this value is *prepended* to the image repository that the chart would otherwise render. This applies both when `webhook.image.repository` is set and when the repository is computed from
1372`imageRegistry` + `imageNamespace` + `webhook.image.name`.
1373
1374This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1375
1376#### **webhook.image.name** ~ `string`
1377> Default value:
1378> ```yaml
1379> cert-manager-webhook
1380> ```
1381
1382The image name for the cert-manager webhook.
gio33d62932026-07-23 16:39:35 +04001383
1384#### **webhook.image.repository** ~ `string`
1385> Default value:
1386> ```yaml
gio15aa6632026-07-23 17:14:23 +04001387> ""
gio33d62932026-07-23 16:39:35 +04001388> ```
1389
gio15aa6632026-07-23 17:14:23 +04001390Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `webhook.image.name`).
gio33d62932026-07-23 16:39:35 +04001391
1392#### **webhook.image.tag** ~ `string`
1393
1394Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1395
1396#### **webhook.image.digest** ~ `string`
1397
gio15aa6632026-07-23 17:14:23 +04001398Setting a digest pins the image. If a tag is also set, the rendered reference will include both ("image:tag@digest"), though only the digest will be used for pulling.
gio33d62932026-07-23 16:39:35 +04001399
1400#### **webhook.image.pullPolicy** ~ `string`
1401> Default value:
1402> ```yaml
1403> IfNotPresent
1404> ```
1405
1406Kubernetes imagePullPolicy on Deployment.
1407#### **webhook.serviceAccount.create** ~ `bool`
1408> Default value:
1409> ```yaml
1410> true
1411> ```
1412
1413Specifies whether a service account should be created.
1414#### **webhook.serviceAccount.name** ~ `string`
1415
1416The name of the service account to use.
1417If not set and create is true, a name is generated using the fullname template.
1418
1419#### **webhook.serviceAccount.annotations** ~ `object`
1420
1421Optional additional annotations to add to the webhook's Service Account.
1422
1423#### **webhook.serviceAccount.labels** ~ `object`
1424
1425Optional additional labels to add to the webhook's Service Account.
1426
1427#### **webhook.serviceAccount.automountServiceAccountToken** ~ `bool`
1428> Default value:
1429> ```yaml
1430> true
1431> ```
1432
1433Automount API credentials for a Service Account.
1434#### **webhook.automountServiceAccountToken** ~ `bool`
1435
1436Automounting API credentials for a particular pod.
1437
1438#### **webhook.securePort** ~ `number`
1439> Default value:
1440> ```yaml
1441> 10250
1442> ```
1443
1444The port that the webhook listens on for requests. In GKE private clusters, by default Kubernetes apiservers are allowed to talk to the cluster nodes only on 443 and 10250. Configuring securePort: 10250, therefore will work out-of-the-box without needing to add firewall rules or requiring NET_BIND_SERVICE capabilities to bind port numbers <1000.
1445#### **webhook.hostNetwork** ~ `bool`
1446> Default value:
1447> ```yaml
1448> false
1449> ```
1450
1451Specifies if the webhook should be started in hostNetwork mode.
1452
1453Required for use in some managed kubernetes clusters (such as AWS EKS) with custom. CNI (such as calico), because control-plane managed by AWS cannot communicate with pods' IP CIDR and admission webhooks are not working
1454
1455Since the default port for the webhook conflicts with kubelet on the host network, `webhook.securePort` should be changed to an available port if running in hostNetwork mode.
1456#### **webhook.serviceType** ~ `string`
1457> Default value:
1458> ```yaml
1459> ClusterIP
1460> ```
1461
1462Specifies how the service should be handled. Useful if you want to expose the webhook outside of the cluster. In some cases, the control plane cannot reach internal services.
1463#### **webhook.loadBalancerIP** ~ `string`
1464
1465Specify the load balancer IP for the created service.
1466
1467#### **webhook.url** ~ `object`
1468> Default value:
1469> ```yaml
1470> {}
1471> ```
1472
1473Overrides the mutating webhook and validating webhook so they reach the webhook service using the `url` field instead of a service.
1474#### **webhook.networkPolicy.enabled** ~ `bool`
1475> Default value:
1476> ```yaml
1477> false
1478> ```
1479
1480Create network policies for the webhooks.
1481#### **webhook.networkPolicy.ingress** ~ `array`
1482> Default value:
1483> ```yaml
gio15aa6632026-07-23 17:14:23 +04001484> - ports:
1485> - port: https
1486> protocol: TCP
1487> - port: healthcheck
1488> protocol: TCP
1489> - port: http-metrics
1490> protocol: TCP
gio33d62932026-07-23 16:39:35 +04001491> ```
1492
gio15aa6632026-07-23 17:14:23 +04001493Ingress rule for the webhook network policy.
1494By default all pods are allowed access to:
1495 https, http-metrics, and http-healthz ports
gio33d62932026-07-23 16:39:35 +04001496
1497#### **webhook.networkPolicy.egress** ~ `array`
1498> Default value:
1499> ```yaml
1500> - ports:
1501> - port: 80
1502> protocol: TCP
1503> - port: 443
1504> protocol: TCP
1505> - port: 53
1506> protocol: TCP
1507> - port: 53
1508> protocol: UDP
1509> - port: 6443
1510> protocol: TCP
gio33d62932026-07-23 16:39:35 +04001511> ```
1512
1513Egress rule for the webhook network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
1514
1515#### **webhook.volumes** ~ `array`
1516> Default value:
1517> ```yaml
1518> []
1519> ```
1520
1521Additional volumes to add to the cert-manager controller pod.
1522#### **webhook.volumeMounts** ~ `array`
1523> Default value:
1524> ```yaml
1525> []
1526> ```
1527
1528Additional volume mounts to add to the cert-manager controller container.
1529#### **webhook.enableServiceLinks** ~ `bool`
1530> Default value:
1531> ```yaml
1532> false
1533> ```
1534
1535enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
gio15aa6632026-07-23 17:14:23 +04001536#### **webhook.enableClientVerification** ~ `bool`
1537> Default value:
1538> ```yaml
1539> false
1540> ```
1541
1542enableClientVerification turns on client verification of requests made to the webhook server
1543#### **webhook.clientCAFile** ~ `string`
1544> Default value:
1545> ```yaml
1546> ""
1547> ```
1548
1549the client CA file to be used for verification
1550#### **webhook.apiserverClientCertSubjects** ~ `string`
1551> Default value:
1552> ```yaml
1553> ""
1554> ```
1555
1556Subject names to verify for the client certificate. Multiple values may be supplied as a comma-separated list.
gio33d62932026-07-23 16:39:35 +04001557### CA Injector
1558
1559#### **cainjector.enabled** ~ `bool`
1560> Default value:
1561> ```yaml
1562> true
1563> ```
1564
1565Create the CA Injector deployment
1566#### **cainjector.replicaCount** ~ `number`
1567> Default value:
1568> ```yaml
1569> 1
1570> ```
1571
1572The number of replicas of the cert-manager cainjector to run.
1573
1574The default is 1, but in production set this to 2 or 3 to provide high availability.
1575
1576If `replicas > 1`, consider setting `cainjector.podDisruptionBudget.enabled=true`.
1577
1578Note that cert-manager uses leader election to ensure that there can only be a single instance active at a time.
1579#### **cainjector.config** ~ `object`
1580> Default value:
1581> ```yaml
1582> {}
1583> ```
1584
1585This is used to configure options for the cainjector pod. It allows setting options that are usually provided via flags.
1586
1587If `apiVersion` and `kind` are unspecified they default to the current latest version (currently `cainjector.config.cert-manager.io/v1alpha1`). You can pin the version by specifying the `apiVersion` yourself.
1588
1589For example:
1590
1591```yaml
1592apiVersion: cainjector.config.cert-manager.io/v1alpha1
1593kind: CAInjectorConfiguration
1594logging:
1595 verbosity: 2
1596 format: text
1597leaderElectionConfig:
1598 namespace: kube-system
1599# Configure the metrics server for TLS
1600# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1601metricsTLSConfig:
1602 dynamic:
1603 secretNamespace: "cert-manager"
1604 secretName: "cert-manager-metrics-ca"
1605 dnsNames:
1606 - cert-manager-metrics
1607```
1608#### **cainjector.strategy** ~ `object`
1609> Default value:
1610> ```yaml
1611> {}
1612> ```
1613
1614Deployment update strategy for the cert-manager cainjector deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
1615
1616For example:
1617
1618```yaml
1619strategy:
1620 type: RollingUpdate
1621 rollingUpdate:
1622 maxSurge: 0
1623 maxUnavailable: 1
1624```
1625#### **cainjector.securityContext** ~ `object`
1626> Default value:
1627> ```yaml
1628> runAsNonRoot: true
1629> seccompProfile:
1630> type: RuntimeDefault
1631> ```
1632
1633Pod Security Context to be set on the cainjector component Pod. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
1634
1635#### **cainjector.containerSecurityContext** ~ `object`
1636> Default value:
1637> ```yaml
1638> allowPrivilegeEscalation: false
1639> capabilities:
1640> drop:
1641> - ALL
1642> readOnlyRootFilesystem: true
1643> ```
1644
1645Container Security Context to be set on the cainjector component container. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
1646
gio15aa6632026-07-23 17:14:23 +04001647#### **cainjector.networkPolicy.enabled** ~ `bool`
1648> Default value:
1649> ```yaml
1650> false
1651> ```
1652
1653Create network policies for the cainjector.
1654#### **cainjector.networkPolicy.ingress** ~ `array`
1655> Default value:
1656> ```yaml
1657> - ports:
1658> - port: http-metrics
1659> protocol: TCP
1660> ```
1661
1662Ingress rule for the webhook cainjector policy.
1663By default all pods are allowed access to:
1664 http-metrics port
1665
1666#### **cainjector.networkPolicy.egress** ~ `array`
1667> Default value:
1668> ```yaml
1669> - ports:
1670> - port: 80
1671> protocol: TCP
1672> - port: 443
1673> protocol: TCP
1674> - port: 53
1675> protocol: TCP
1676> - port: 53
1677> protocol: UDP
1678> - port: 6443
1679> protocol: TCP
1680> ```
1681
1682Egress rule for the cainjector network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
1683
gio33d62932026-07-23 16:39:35 +04001684#### **cainjector.podDisruptionBudget.enabled** ~ `bool`
1685> Default value:
1686> ```yaml
1687> false
1688> ```
1689
1690Enable or disable the PodDisruptionBudget resource.
1691
1692This prevents downtime during voluntary disruptions such as during a Node upgrade. For example, the PodDisruptionBudget will block `kubectl drain` if it is used on the Node where the only remaining cert-manager
1693Pod is currently running.
1694#### **cainjector.podDisruptionBudget.minAvailable** ~ `unknown`
1695
1696`minAvailable` configures the minimum available pods for disruptions. It can either be set to
giob6e9f2f2026-07-23 16:53:10 +04001697an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001698Cannot be used if `maxUnavailable` is set.
1699
1700
1701#### **cainjector.podDisruptionBudget.maxUnavailable** ~ `unknown`
1702
1703`maxUnavailable` configures the maximum unavailable pods for disruptions. It can either be set to
giob6e9f2f2026-07-23 16:53:10 +04001704an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001705Cannot be used if `minAvailable` is set.
1706
1707
gio15aa6632026-07-23 17:14:23 +04001708#### **cainjector.podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
1709
1710This configures how to act with unhealthy pods during eviction. Note that this requires Kubernetes 1.31 or `PDBUnhealthyPodEvictionPolicy` feature gate enabled for the cluster to work.
1711
1712
gio33d62932026-07-23 16:39:35 +04001713#### **cainjector.deploymentAnnotations** ~ `object`
1714
1715Optional additional annotations to add to the cainjector Deployment.
1716
1717#### **cainjector.podAnnotations** ~ `object`
1718
1719Optional additional annotations to add to the cainjector Pods.
1720
1721#### **cainjector.serviceAnnotations** ~ `object`
1722
1723Optional additional annotations to add to the cainjector metrics Service.
1724
1725#### **cainjector.extraArgs** ~ `array`
1726> Default value:
1727> ```yaml
1728> []
1729> ```
1730
1731Additional command line flags to pass to cert-manager cainjector binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-cainjector:<version> --help`.
1732#### **cainjector.extraEnv** ~ `array`
1733> Default value:
1734> ```yaml
1735> []
1736> ```
1737
1738Additional environment variables to pass to cert-manager cainjector binary.
1739For example:
1740
1741```yaml
1742extraEnv:
1743- name: SOME_VAR
1744 value: 'some value'
1745```
1746#### **cainjector.featureGates** ~ `string`
1747> Default value:
1748> ```yaml
1749> ""
1750> ```
1751
1752Comma separated list of feature gates that should be enabled on the cainjector pod.
1753#### **cainjector.resources** ~ `object`
1754> Default value:
1755> ```yaml
1756> {}
1757> ```
1758
1759Resources to provide to the cert-manager cainjector pod.
1760
1761For example:
1762
1763```yaml
1764requests:
1765 cpu: 10m
1766 memory: 32Mi
1767```
1768
1769For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1770#### **cainjector.nodeSelector** ~ `object`
1771> Default value:
1772> ```yaml
1773> kubernetes.io/os: linux
1774> ```
1775
1776The nodeSelector on Pods tells Kubernetes to schedule Pods on the nodes with matching labels. For more information, see [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).
1777
1778This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1779
1780#### **cainjector.affinity** ~ `object`
1781> Default value:
1782> ```yaml
1783> {}
1784> ```
1785
1786A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1787
1788For example:
1789
1790```yaml
1791affinity:
1792 nodeAffinity:
1793 requiredDuringSchedulingIgnoredDuringExecution:
1794 nodeSelectorTerms:
1795 - matchExpressions:
1796 - key: foo.bar.com/role
1797 operator: In
1798 values:
1799 - master
1800```
gioc895c1d2026-07-23 17:18:25 +04001801#### **cainjector.runtimeClassName** ~ `string`
1802> Default value:
1803> ```yaml
1804> ""
1805> ```
1806
1807A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
1808
1809For example:
1810
1811```yaml
1812runtimeClassName: gvisor
1813```
1814
gio33d62932026-07-23 16:39:35 +04001815#### **cainjector.tolerations** ~ `array`
1816> Default value:
1817> ```yaml
1818> []
1819> ```
1820
1821A list of Kubernetes Tolerations, if required. For more information, see [Toleration v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core).
1822
1823For example:
1824
1825```yaml
1826tolerations:
1827- key: foo.bar.com/role
1828 operator: Equal
1829 value: master
1830 effect: NoSchedule
1831```
1832#### **cainjector.topologySpreadConstraints** ~ `array`
1833> Default value:
1834> ```yaml
1835> []
1836> ```
1837
1838A list of Kubernetes TopologySpreadConstraints, if required. For more information, see [Topology spread constraint v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#topologyspreadconstraint-v1-core).
1839
1840For example:
1841
1842```yaml
1843topologySpreadConstraints:
1844- maxSkew: 2
1845 topologyKey: topology.kubernetes.io/zone
1846 whenUnsatisfiable: ScheduleAnyway
1847 labelSelector:
1848 matchLabels:
1849 app.kubernetes.io/instance: cert-manager
1850 app.kubernetes.io/component: controller
1851```
1852#### **cainjector.podLabels** ~ `object`
1853> Default value:
1854> ```yaml
1855> {}
1856> ```
1857
1858Optional additional labels to add to the CA Injector Pods.
1859#### **cainjector.serviceLabels** ~ `object`
1860> Default value:
1861> ```yaml
1862> {}
1863> ```
1864
1865Optional additional labels to add to the CA Injector metrics Service.
1866#### **cainjector.image.registry** ~ `string`
1867
gio15aa6632026-07-23 17:14:23 +04001868Deprecated: per-component registry prefix.
1869
1870If set, this value is *prepended* to the image repository that the chart would otherwise render. This applies both when `cainjector.image.repository` is set and when the repository is computed from
1871`imageRegistry` + `imageNamespace` + `cainjector.image.name`.
1872
1873This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1874
1875#### **cainjector.image.name** ~ `string`
1876> Default value:
1877> ```yaml
1878> cert-manager-cainjector
1879> ```
1880
1881The image name for the cert-manager cainjector.
gio33d62932026-07-23 16:39:35 +04001882
1883#### **cainjector.image.repository** ~ `string`
1884> Default value:
1885> ```yaml
gio15aa6632026-07-23 17:14:23 +04001886> ""
gio33d62932026-07-23 16:39:35 +04001887> ```
1888
gio15aa6632026-07-23 17:14:23 +04001889Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `cainjector.image.name`).
gio33d62932026-07-23 16:39:35 +04001890
1891#### **cainjector.image.tag** ~ `string`
1892
1893Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1894
1895#### **cainjector.image.digest** ~ `string`
1896
gio15aa6632026-07-23 17:14:23 +04001897Setting a digest pins the image. If a tag is also set, the rendered reference will include both ("image:tag@digest"), though only the digest will be used for pulling.
gio33d62932026-07-23 16:39:35 +04001898
1899#### **cainjector.image.pullPolicy** ~ `string`
1900> Default value:
1901> ```yaml
1902> IfNotPresent
1903> ```
1904
1905Kubernetes imagePullPolicy on Deployment.
1906#### **cainjector.serviceAccount.create** ~ `bool`
1907> Default value:
1908> ```yaml
1909> true
1910> ```
1911
1912Specifies whether a service account should be created.
1913#### **cainjector.serviceAccount.name** ~ `string`
1914
1915The name of the service account to use.
1916If not set and create is true, a name is generated using the fullname template
1917
1918#### **cainjector.serviceAccount.annotations** ~ `object`
1919
1920Optional additional annotations to add to the cainjector's Service Account.
1921
1922#### **cainjector.serviceAccount.labels** ~ `object`
1923
1924Optional additional labels to add to the cainjector's Service Account.
1925
1926#### **cainjector.serviceAccount.automountServiceAccountToken** ~ `bool`
1927> Default value:
1928> ```yaml
1929> true
1930> ```
1931
1932Automount API credentials for a Service Account.
1933#### **cainjector.automountServiceAccountToken** ~ `bool`
1934
1935Automounting API credentials for a particular pod.
1936
1937#### **cainjector.volumes** ~ `array`
1938> Default value:
1939> ```yaml
1940> []
1941> ```
1942
1943Additional volumes to add to the cert-manager controller pod.
1944#### **cainjector.volumeMounts** ~ `array`
1945> Default value:
1946> ```yaml
1947> []
1948> ```
1949
1950Additional volume mounts to add to the cert-manager controller container.
1951#### **cainjector.enableServiceLinks** ~ `bool`
1952> Default value:
1953> ```yaml
1954> false
1955> ```
1956
1957enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
1958### ACME Solver
1959
1960#### **acmesolver.image.registry** ~ `string`
1961
gio15aa6632026-07-23 17:14:23 +04001962Deprecated: per-component registry prefix.
1963
1964If set, this value is *prepended* to the image repository that the chart would otherwise render. This applies both when `acmesolver.image.repository` is set and when the repository is computed from
1965`imageRegistry` + `imageNamespace` + `acmesolver.image.name`.
1966
1967This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1968
1969#### **acmesolver.image.name** ~ `string`
1970> Default value:
1971> ```yaml
1972> cert-manager-acmesolver
1973> ```
1974
1975The image name for the cert-manager acmesolver.
gio33d62932026-07-23 16:39:35 +04001976
1977#### **acmesolver.image.repository** ~ `string`
1978> Default value:
1979> ```yaml
gio15aa6632026-07-23 17:14:23 +04001980> ""
gio33d62932026-07-23 16:39:35 +04001981> ```
1982
gio15aa6632026-07-23 17:14:23 +04001983Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `acmesolver.image.name`).
gio33d62932026-07-23 16:39:35 +04001984
1985#### **acmesolver.image.tag** ~ `string`
1986
1987Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
1988
1989#### **acmesolver.image.digest** ~ `string`
1990
gio15aa6632026-07-23 17:14:23 +04001991Setting a digest pins the image. If a tag is also set, the rendered reference will include both ("image:tag@digest"), though only the digest will be used for pulling.
gio33d62932026-07-23 16:39:35 +04001992
1993#### **acmesolver.image.pullPolicy** ~ `string`
1994> Default value:
1995> ```yaml
1996> IfNotPresent
1997> ```
1998
1999Kubernetes imagePullPolicy on Deployment.
gioc895c1d2026-07-23 17:18:25 +04002000#### **acmesolver.runtimeClassName** ~ `string`
2001> Default value:
2002> ```yaml
2003> ""
2004> ```
2005
2006A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
2007
2008For example:
2009
2010```yaml
2011runtimeClassName: gvisor
2012```
2013
gio33d62932026-07-23 16:39:35 +04002014### Startup API Check
2015
2016
2017This startupapicheck is a Helm post-install hook that waits for the webhook endpoints to become available. The check is implemented using a Kubernetes Job - if you are injecting mesh sidecar proxies into cert-manager pods, ensure that they are not injected into this Job's pod. Otherwise, the installation may time out owing to the Job never being completed because the sidecar proxy does not exit. For more information, see [this note](https://github.com/cert-manager/cert-manager/pull/4414).
2018#### **startupapicheck.enabled** ~ `bool`
2019> Default value:
2020> ```yaml
2021> true
2022> ```
2023
2024Enables the startup api check.
2025#### **startupapicheck.securityContext** ~ `object`
2026> Default value:
2027> ```yaml
2028> runAsNonRoot: true
2029> seccompProfile:
2030> type: RuntimeDefault
2031> ```
2032
2033Pod Security Context to be set on the startupapicheck component Pod. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
2034
2035#### **startupapicheck.containerSecurityContext** ~ `object`
2036> Default value:
2037> ```yaml
2038> allowPrivilegeEscalation: false
2039> capabilities:
2040> drop:
2041> - ALL
2042> readOnlyRootFilesystem: true
2043> ```
2044
2045Container Security Context to be set on the controller component container. For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
2046
2047#### **startupapicheck.timeout** ~ `string`
2048> Default value:
2049> ```yaml
2050> 1m
2051> ```
2052
2053Timeout for 'kubectl check api' command.
2054#### **startupapicheck.backoffLimit** ~ `number`
2055> Default value:
2056> ```yaml
2057> 4
2058> ```
2059
2060Job backoffLimit
gioc895c1d2026-07-23 17:18:25 +04002061#### **startupapicheck.ttlSecondsAfterFinished** ~ `integer`
2062
2063Limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, once the Job finishes, it will be automatically cleaned up after ttlSecondsAfterFinished seconds. This is disabled by default (field is not set) to preserve backward compatibility and avoid issues with GitOps tools (e.g. Argo CD) that may attempt to reconcile or recreate Jobs after they are automatically deleted. For more information, see [Automatic Cleanup for Finished Jobs](https://kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/).
2064
2065
gio33d62932026-07-23 16:39:35 +04002066#### **startupapicheck.jobAnnotations** ~ `object`
2067> Default value:
2068> ```yaml
2069> helm.sh/hook: post-install
2070> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2071> helm.sh/hook-weight: "1"
2072> ```
2073
2074Optional additional annotations to add to the startupapicheck Job.
2075
2076#### **startupapicheck.podAnnotations** ~ `object`
2077
2078Optional additional annotations to add to the startupapicheck Pods.
2079
2080#### **startupapicheck.extraArgs** ~ `array`
2081> Default value:
2082> ```yaml
2083> - -v
2084> ```
2085
2086Additional command line flags to pass to startupapicheck binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-startupapicheck:<version> --help`.
2087
2088Verbose logging is enabled by default so that if startupapicheck fails, you can know what exactly caused the failure. Verbose logs include details of the webhook URL, IP address and TCP connect errors for example.
2089
2090#### **startupapicheck.extraEnv** ~ `array`
2091> Default value:
2092> ```yaml
2093> []
2094> ```
2095
2096Additional environment variables to pass to cert-manager startupapicheck binary.
2097For example:
2098
2099```yaml
2100extraEnv:
2101- name: SOME_VAR
2102 value: 'some value'
2103```
2104#### **startupapicheck.resources** ~ `object`
2105> Default value:
2106> ```yaml
2107> {}
2108> ```
2109
gioc895c1d2026-07-23 17:18:25 +04002110Resources to provide to the cert-manager startupapicheck pod.
gio33d62932026-07-23 16:39:35 +04002111
2112For example:
2113
2114```yaml
2115requests:
2116 cpu: 10m
2117 memory: 32Mi
2118```
2119
2120For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
2121#### **startupapicheck.nodeSelector** ~ `object`
2122> Default value:
2123> ```yaml
2124> kubernetes.io/os: linux
2125> ```
2126
2127The nodeSelector on Pods tells Kubernetes to schedule Pods on the nodes with matching labels. For more information, see [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).
2128
2129This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
2130
2131#### **startupapicheck.affinity** ~ `object`
2132> Default value:
2133> ```yaml
2134> {}
2135> ```
2136
2137A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
2138For example:
2139
2140```yaml
2141affinity:
2142 nodeAffinity:
2143 requiredDuringSchedulingIgnoredDuringExecution:
2144 nodeSelectorTerms:
2145 - matchExpressions:
2146 - key: foo.bar.com/role
2147 operator: In
2148 values:
2149 - master
2150```
gioc895c1d2026-07-23 17:18:25 +04002151#### **startupapicheck.runtimeClassName** ~ `string`
2152> Default value:
2153> ```yaml
2154> ""
2155> ```
2156
2157A Kubernetes Runtime Class to apply to ACME HTTP01 solver pods, if required. For more information, see [Runtime Class](https://kubernetes.io/docs/concepts/containers/).
2158
2159For example:
2160
2161```yaml
2162runtimeClassName: gvisor
2163```
2164
gio33d62932026-07-23 16:39:35 +04002165#### **startupapicheck.tolerations** ~ `array`
2166> Default value:
2167> ```yaml
2168> []
2169> ```
2170
2171A list of Kubernetes Tolerations, if required. For more information, see [Toleration v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core).
2172
2173For example:
2174
2175```yaml
2176tolerations:
2177- key: foo.bar.com/role
2178 operator: Equal
2179 value: master
2180 effect: NoSchedule
2181```
2182#### **startupapicheck.podLabels** ~ `object`
2183> Default value:
2184> ```yaml
2185> {}
2186> ```
2187
2188Optional additional labels to add to the startupapicheck Pods.
2189#### **startupapicheck.image.registry** ~ `string`
2190
gio15aa6632026-07-23 17:14:23 +04002191Deprecated: per-component registry prefix.
2192
2193If set, this value is *prepended* to the image repository that the chart would otherwise render. This applies both when `startupapicheck.image.repository` is set and when the repository is computed from
2194`imageRegistry` + `imageNamespace` + `startupapicheck.image.name`.
2195
2196This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
2197
2198#### **startupapicheck.image.name** ~ `string`
2199> Default value:
2200> ```yaml
2201> cert-manager-startupapicheck
2202> ```
2203
2204The image name for the cert-manager startupapicheck.
gio33d62932026-07-23 16:39:35 +04002205
2206#### **startupapicheck.image.repository** ~ `string`
2207> Default value:
2208> ```yaml
gio15aa6632026-07-23 17:14:23 +04002209> ""
gio33d62932026-07-23 16:39:35 +04002210> ```
2211
gio15aa6632026-07-23 17:14:23 +04002212Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `startupapicheck.image.name`).
gio33d62932026-07-23 16:39:35 +04002213
2214#### **startupapicheck.image.tag** ~ `string`
2215
2216Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
2217
2218#### **startupapicheck.image.digest** ~ `string`
2219
gio15aa6632026-07-23 17:14:23 +04002220Setting a digest pins the image. If a tag is also set, the rendered reference will include both ("image:tag@digest"), though only the digest will be used for pulling.
gio33d62932026-07-23 16:39:35 +04002221
2222#### **startupapicheck.image.pullPolicy** ~ `string`
2223> Default value:
2224> ```yaml
2225> IfNotPresent
2226> ```
2227
2228Kubernetes imagePullPolicy on Deployment.
2229#### **startupapicheck.rbac.annotations** ~ `object`
2230> Default value:
2231> ```yaml
2232> helm.sh/hook: post-install
2233> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2234> helm.sh/hook-weight: "-5"
2235> ```
2236
2237annotations for the startup API Check job RBAC and PSP resources.
2238
2239#### **startupapicheck.automountServiceAccountToken** ~ `bool`
2240
2241Automounting API credentials for a particular pod.
2242
2243#### **startupapicheck.serviceAccount.create** ~ `bool`
2244> Default value:
2245> ```yaml
2246> true
2247> ```
2248
2249Specifies whether a service account should be created.
2250#### **startupapicheck.serviceAccount.name** ~ `string`
2251
2252The name of the service account to use.
2253If not set and create is true, a name is generated using the fullname template.
2254
2255#### **startupapicheck.serviceAccount.annotations** ~ `object`
2256> Default value:
2257> ```yaml
2258> helm.sh/hook: post-install
2259> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2260> helm.sh/hook-weight: "-5"
2261> ```
2262
2263Optional additional annotations to add to the Job's Service Account.
2264
2265#### **startupapicheck.serviceAccount.automountServiceAccountToken** ~ `bool`
2266> Default value:
2267> ```yaml
2268> true
2269> ```
2270
2271Automount API credentials for a Service Account.
2272
2273#### **startupapicheck.serviceAccount.labels** ~ `object`
2274
2275Optional additional labels to add to the startupapicheck's Service Account.
2276
2277#### **startupapicheck.volumes** ~ `array`
2278> Default value:
2279> ```yaml
2280> []
2281> ```
2282
2283Additional volumes to add to the cert-manager controller pod.
2284#### **startupapicheck.volumeMounts** ~ `array`
2285> Default value:
2286> ```yaml
2287> []
2288> ```
2289
2290Additional volume mounts to add to the cert-manager controller container.
2291#### **startupapicheck.enableServiceLinks** ~ `bool`
2292> Default value:
2293> ```yaml
2294> false
2295> ```
2296
2297enableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links.
2298#### **extraObjects** ~ `array`
2299> Default value:
2300> ```yaml
2301> []
2302> ```
2303
2304Create dynamic manifests via values.
2305
2306For example:
2307
2308```yaml
2309extraObjects:
2310 - |
2311 apiVersion: v1
2312 kind: ConfigMap
2313 metadata:
2314 name: '{{ template "cert-manager.fullname" . }}-extra-configmap'
2315```
2316
2317<!-- /AUTO-GENERATED -->
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +04002318### Default Security Contexts
2319
2320The default pod-level and container-level security contexts, below, adhere to the [restricted](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted) Pod Security Standards policies.
2321
2322Default pod-level securityContext:
2323```yaml
2324runAsNonRoot: true
2325seccompProfile:
2326 type: RuntimeDefault
2327```
2328
2329Default containerSecurityContext:
2330```yaml
2331allowPrivilegeEscalation: false
2332capabilities:
2333 drop:
2334 - ALL
2335```
2336
2337### Assigning Values
2338
2339Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
2340
2341Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
2342
2343```console
2344$ helm install my-release -f values.yaml .
2345```
2346> **Tip**: You can use the default [values.yaml](https://github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml)
2347
2348## Contributing
2349
2350This chart is maintained at [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager/tree/master/deploy/charts/cert-manager).