blob: bba0bc8820e2bde9f56e9e967734da234bf3ca9c [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
gio33d62932026-07-23 16:39:35 +040011- Kubernetes 1.22+
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040012
13## Installing the Chart
14
15Full installation instructions, including details on how to configure extra
giod55d03a2026-07-23 16:57:48 +040016functionality in cert-manager can be found in the [installation docs](https://cert-manager.io/docs/installation/helm/).
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040017
gio33d62932026-07-23 16:39:35 +040018To install the chart with the release name `cert-manager`:
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040019
20```console
giod55d03a2026-07-23 16:57:48 +040021# Add the Jetstack Helm repository
22helm repo add jetstack https://charts.jetstack.io --force-update
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040023
giod55d03a2026-07-23 16:57:48 +040024# Install the cert-manager helm chart
25helm install \
26 cert-manager jetstack/cert-manager \
27 --namespace cert-manager \
28 --create-namespace \
gio15aa6632026-07-23 17:14:23 +040029 --version v1.20.3 \
giod55d03a2026-07-23 16:57:48 +040030 --set crds.enabled=true
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040031```
32
33In order to begin issuing certificates, you will need to set up a ClusterIssuer
34or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
35
36More information on the different types of issuers and how to configure them
37can be found in [our documentation](https://cert-manager.io/docs/configuration/).
38
39For information on how to configure cert-manager to automatically provision
40Certificates for Ingress resources, take a look at the
41[Securing Ingresses documentation](https://cert-manager.io/docs/usage/ingress/).
42
43> **Tip**: List all releases using `helm list`
44
45## Upgrading the Chart
46
47Special considerations may be required when upgrading the Helm chart, and these
48are documented in our full [upgrading guide](https://cert-manager.io/docs/installation/upgrading/).
49
50**Please check here before performing upgrades!**
51
52## Uninstalling the Chart
53
gio33d62932026-07-23 16:39:35 +040054To uninstall/delete the `cert-manager` deployment:
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040055
56```console
giod55d03a2026-07-23 16:57:48 +040057helm delete cert-manager --namespace cert-manager
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040058```
59
60The command removes all the Kubernetes components associated with the chart and deletes the release.
61
62If you want to completely uninstall cert-manager from your cluster, you will also need to
giod55d03a2026-07-23 16:57:48 +040063delete the previously installed CustomResourceDefinition resources.
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040064
giod55d03a2026-07-23 16:57:48 +040065> ☢️ This will remove all `Issuer`,`ClusterIssuer`,`Certificate`,`CertificateRequest`,`Order` and `Challenge` resources from the cluster:
66>
67> ```console
68> kubectl delete crd \
69> issuers.cert-manager.io \
70> clusterissuers.cert-manager.io \
71> certificates.cert-manager.io \
72> certificaterequests.cert-manager.io \
73> orders.acme.cert-manager.io \
74> challenges.acme.cert-manager.io
75> ```
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040076
77## Configuration
gio33d62932026-07-23 16:39:35 +040078<!-- AUTO-GENERATED -->
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040079
gio33d62932026-07-23 16:39:35 +040080### Global
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040081
gio33d62932026-07-23 16:39:35 +040082#### **global.imagePullSecrets** ~ `array`
83> Default value:
84> ```yaml
85> []
86> ```
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +040087
gio33d62932026-07-23 16:39:35 +040088Reference 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/).
89
90For example:
91
92```yaml
93imagePullSecrets:
94 - name: "image-pull-secret"
95```
giod55d03a2026-07-23 16:57:48 +040096#### **global.nodeSelector** ~ `object`
97> Default value:
98> ```yaml
99> {}
100> ```
101
102Global node selector
103
104The 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/).
105
106If a component-specific nodeSelector is also set, it will be merged and take precedence.
107
gio33d62932026-07-23 16:39:35 +0400108#### **global.commonLabels** ~ `object`
109> Default value:
110> ```yaml
111> {}
112> ```
113
114Labels to apply to all resources.
115Please note that this does not add labels to the resources created dynamically by the controllers. For these resources, you have to add the labels in the template in the cert-manager custom resource: For example, podTemplate/ ingressTemplate in ACMEChallengeSolverHTTP01Ingress. For more information, see the [cert-manager documentation](https://cert-manager.io/docs/reference/api-docs/#acme.cert-manager.io/v1.ACMEChallengeSolverHTTP01Ingress).
116For example, secretTemplate in CertificateSpec
117For more information, see the [cert-manager documentation](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec).
118#### **global.revisionHistoryLimit** ~ `number`
119
120The number of old ReplicaSets to retain to allow rollback (if not set, the default Kubernetes value is set to 10).
121
122#### **global.priorityClassName** ~ `string`
123> Default value:
124> ```yaml
125> ""
126> ```
127
128The optional priority class to be used for the cert-manager pods.
giod55d03a2026-07-23 16:57:48 +0400129#### **global.hostUsers** ~ `bool`
130
131Set all pods to run in a user namespace without host access. Experimental: may be removed once the Kubernetes User Namespaces feature is GA.
132
133Requirements:
134 - Kubernetes ≥ 1.33, or
135 - Kubernetes 1.27–1.32 with UserNamespacesSupport feature gate enabled.
136
137Set to false to run pods in a user namespace without host access.
138
139See [limitations](https://kubernetes.io/docs/concepts/workloads/pods/user-namespaces/#limitations) for details.
140
gio33d62932026-07-23 16:39:35 +0400141#### **global.rbac.create** ~ `bool`
142> Default value:
143> ```yaml
144> true
145> ```
146
147Create required ClusterRoles and ClusterRoleBindings for cert-manager.
148#### **global.rbac.aggregateClusterRoles** ~ `bool`
149> Default value:
150> ```yaml
151> true
152> ```
153
154Aggregate 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)
155#### **global.podSecurityPolicy.enabled** ~ `bool`
156> Default value:
157> ```yaml
158> false
159> ```
160
161Create PodSecurityPolicy for cert-manager.
162
163Note that PodSecurityPolicy was deprecated in Kubernetes 1.21 and removed in Kubernetes 1.25.
164#### **global.podSecurityPolicy.useAppArmor** ~ `bool`
165> Default value:
166> ```yaml
167> true
168> ```
169
170Configure the PodSecurityPolicy to use AppArmor.
171#### **global.logLevel** ~ `number`
172> Default value:
173> ```yaml
174> 2
175> ```
176
177Set the verbosity of cert-manager. A range of 0 - 6, with 6 being the most verbose.
178#### **global.leaderElection.namespace** ~ `string`
179> Default value:
180> ```yaml
181> kube-system
182> ```
183
184Override the namespace used for the leader election lease.
185#### **global.leaderElection.leaseDuration** ~ `string`
186
187The 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.
188
189#### **global.leaderElection.renewDeadline** ~ `string`
190
191The 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.
192
193#### **global.leaderElection.retryPeriod** ~ `string`
194
195The duration the clients should wait between attempting acquisition and renewal of a leadership.
196
197#### **installCRDs** ~ `bool`
198> Default value:
199> ```yaml
200> false
201> ```
202
203This option is equivalent to setting crds.enabled=true and crds.keep=true. Deprecated: use crds.enabled and crds.keep instead.
204#### **crds.enabled** ~ `bool`
205> Default value:
206> ```yaml
207> false
208> ```
209
210This option decides if the CRDs should be installed as part of the Helm installation.
211#### **crds.keep** ~ `bool`
212> Default value:
213> ```yaml
214> true
215> ```
216
217This 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
218(Certificates, Issuers, ...) will be removed too by the garbage collector.
219### Controller
220
221#### **replicaCount** ~ `number`
222> Default value:
223> ```yaml
224> 1
225> ```
226
227The number of replicas of the cert-manager controller to run.
228
229The default is 1, but in production set this to 2 or 3 to provide high availability.
230
231If `replicas > 1`, consider setting `podDisruptionBudget.enabled=true`.
232
233Note that cert-manager uses leader election to ensure that there can only be a single instance active at a time.
234#### **strategy** ~ `object`
235> Default value:
236> ```yaml
237> {}
238> ```
239
240Deployment update strategy for the cert-manager controller deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
241
242For example:
243
244```yaml
245strategy:
246 type: RollingUpdate
247 rollingUpdate:
248 maxSurge: 0
249 maxUnavailable: 1
250```
251#### **podDisruptionBudget.enabled** ~ `bool`
252> Default value:
253> ```yaml
254> false
255> ```
256
257Enable or disable the PodDisruptionBudget resource.
258
259This 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
260Pod is currently running.
261#### **podDisruptionBudget.minAvailable** ~ `unknown`
262
giob6e9f2f2026-07-23 16:53:10 +0400263This 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 +0400264It cannot be used if `maxUnavailable` is set.
265
266
267#### **podDisruptionBudget.maxUnavailable** ~ `unknown`
268
giob6e9f2f2026-07-23 16:53:10 +0400269This 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 +0400270
271
gio15aa6632026-07-23 17:14:23 +0400272#### **podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
273
274This 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.
275
276
gio33d62932026-07-23 16:39:35 +0400277#### **featureGates** ~ `string`
278> Default value:
279> ```yaml
280> ""
281> ```
282
283A comma-separated list of feature gates that should be enabled on the controller pod.
284#### **maxConcurrentChallenges** ~ `number`
285> Default value:
286> ```yaml
287> 60
288> ```
289
290The maximum number of challenges that can be scheduled as 'processing' at once.
gio15aa6632026-07-23 17:14:23 +0400291#### **imageRegistry** ~ `string`
292> Default value:
293> ```yaml
294> quay.io
295> ```
296
297The container registry used for all cert-manager images by default. This can include path prefixes (e.g. `artifactory.example.com/docker`).
298
299#### **imageNamespace** ~ `string`
300> Default value:
301> ```yaml
302> jetstack
303> ```
304
305The repository namespace used for all cert-manager images by default.
306Examples:
307- jetstack
308- cert-manager
309
gio33d62932026-07-23 16:39:35 +0400310#### **image.registry** ~ `string`
311
gio15aa6632026-07-23 17:14:23 +0400312Deprecated: per-component registry prefix.
313
314If 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
315`imageRegistry` + `imageNamespace` + `image.name`.
316
317This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
318
319#### **image.name** ~ `string`
320> Default value:
321> ```yaml
322> cert-manager-controller
323> ```
324
325The image name for the cert-manager controller.
326This is used (together with `imageRegistry` and `imageNamespace`) to construct the full image reference.
gio33d62932026-07-23 16:39:35 +0400327
328#### **image.repository** ~ `string`
329> Default value:
330> ```yaml
gio15aa6632026-07-23 17:14:23 +0400331> ""
gio33d62932026-07-23 16:39:35 +0400332> ```
333
gio15aa6632026-07-23 17:14:23 +0400334Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `image.name`).
335Example: quay.io/jetstack/cert-manager-controller
gio33d62932026-07-23 16:39:35 +0400336
337#### **image.tag** ~ `string`
338
339Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
340
341#### **image.digest** ~ `string`
342
gio15aa6632026-07-23 17:14:23 +0400343Setting 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 +0400344
345#### **image.pullPolicy** ~ `string`
346> Default value:
347> ```yaml
348> IfNotPresent
349> ```
350
351Kubernetes imagePullPolicy on Deployment.
352#### **clusterResourceNamespace** ~ `string`
353> Default value:
354> ```yaml
355> ""
356> ```
357
358Override 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.
359#### **namespace** ~ `string`
360> Default value:
361> ```yaml
362> ""
363> ```
364
365This 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).
366#### **fullnameOverride** ~ `string`
367
368Override the "cert-manager.fullname" value. This value is used as part of most of the names of the resources created by this Helm chart.
369
370#### **nameOverride** ~ `string`
371
giob6e9f2f2026-07-23 16:53:10 +0400372Override 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 +0400373
374#### **serviceAccount.create** ~ `bool`
375> Default value:
376> ```yaml
377> true
378> ```
379
380Specifies whether a service account should be created.
381#### **serviceAccount.name** ~ `string`
382
383The name of the service account to use.
384If not set and create is true, a name is generated using the fullname template.
385
386#### **serviceAccount.annotations** ~ `object`
387
388Optional additional annotations to add to the controller's Service Account. Templates are allowed for both keys and values.
389Example using templating:
390
391```yaml
392annotations:
393 "{{ .Chart.Name }}-helm-chart/version": "{{ .Chart.Version }}"
394```
395
396#### **serviceAccount.labels** ~ `object`
397
398Optional additional labels to add to the controller's Service Account.
399
400#### **serviceAccount.automountServiceAccountToken** ~ `bool`
401> Default value:
402> ```yaml
403> true
404> ```
405
406Automount API credentials for a Service Account.
407#### **automountServiceAccountToken** ~ `bool`
408
409Automounting API credentials for a particular pod.
410
411#### **enableCertificateOwnerRef** ~ `bool`
412> Default value:
413> ```yaml
414> false
415> ```
416
417When this flag is enabled, secrets will be automatically removed when the certificate resource is deleted.
418#### **config** ~ `object`
419> Default value:
420> ```yaml
421> {}
422> ```
423
424This property is used to configure options for the controller pod. This allows setting options that would usually be provided using flags.
425
426If `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.
427
428For example:
429
430```yaml
431config:
432 apiVersion: controller.config.cert-manager.io/v1alpha1
433 kind: ControllerConfiguration
434 logging:
435 verbosity: 2
436 format: text
437 leaderElectionConfig:
438 namespace: kube-system
439 kubernetesAPIQPS: 9000
440 kubernetesAPIBurst: 9000
441 numberOfConcurrentWorkers: 200
442 enableGatewayAPI: true
gio15aa6632026-07-23 17:14:23 +0400443 # Feature gates as of v1.20.0. Listed with their default values.
gio33d62932026-07-23 16:39:35 +0400444 # See https://cert-manager.io/docs/cli/controller/
445 featureGates:
gio33d62932026-07-23 16:39:35 +0400446 AllAlpha: false # ALPHA - default=false
447 AllBeta: false # BETA - default=false
gio15aa6632026-07-23 17:14:23 +0400448 ACMEHTTP01IngressPathTypeExact: true # BETA - default=true
gio33d62932026-07-23 16:39:35 +0400449 ExperimentalCertificateSigningRequestControllers: false # ALPHA - default=false
450 ExperimentalGatewayAPISupport: true # BETA - default=true
451 LiteralCertificateSubject: true # BETA - default=true
452 NameConstraints: true # BETA - default=true
gio15aa6632026-07-23 17:14:23 +0400453 OtherNames: true # BETA - default=true
gio33d62932026-07-23 16:39:35 +0400454 SecretsFilteredCaching: true # BETA - default=true
455 ServerSideApply: false # ALPHA - default=false
456 StableCertificateRequestName: true # BETA - default=true
457 UseCertificateRequestBasicConstraints: false # ALPHA - default=false
gio33d62932026-07-23 16:39:35 +0400458 # Configure the metrics server for TLS
459 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
460 metricsTLSConfig:
461 dynamic:
462 secretNamespace: "cert-manager"
463 secretName: "cert-manager-metrics-ca"
464 dnsNames:
465 - cert-manager-metrics
gio15aa6632026-07-23 17:14:23 +0400466 # Configure PEM size limits for certificate validation
467 # Useful for certificates with many DNS names (e.g., Istio gateways with 100+ DNS names)
468 pemSizeLimitsConfig:
469 maxCertificateSize: 36500 # Maximum size in bytes for individual certificates (default: 36500)
470 maxPrivateKeySize: 13000 # Maximum size in bytes for private keys (default: 13000)
471 maxChainLength: 95000 # Maximum size in bytes for certificate chains (default: 95000)
472 maxBundleSize: 330000 # Maximum size in bytes for certificate bundles (default: 330000)
gio33d62932026-07-23 16:39:35 +0400473```
474#### **dns01RecursiveNameservers** ~ `string`
475> Default value:
476> ```yaml
477> ""
478> ```
479
480A comma-separated string with the host and port of the recursive nameservers cert-manager should query.
481#### **dns01RecursiveNameserversOnly** ~ `bool`
482> Default value:
483> ```yaml
484> false
485> ```
486
487Forces 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.
488#### **disableAutoApproval** ~ `bool`
489> Default value:
490> ```yaml
491> false
492> ```
493
494Option 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).
495#### **approveSignerNames** ~ `array`
496> Default value:
497> ```yaml
498> - issuers.cert-manager.io/*
499> - clusterissuers.cert-manager.io/*
500> ```
501
giob6e9f2f2026-07-23 16:53:10 +0400502List 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 +0400503ref: https://cert-manager.io/docs/concepts/certificaterequest/#approval
504
505#### **extraArgs** ~ `array`
506> Default value:
507> ```yaml
508> []
509> ```
510
511Additional 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`.
512
513Use this flag to enable or disable arbitrary controllers. For example, to disable the CertificateRequests approver.
514
515For example:
516
517```yaml
518extraArgs:
519 - --controllers=*,-certificaterequests-approver
520```
gio15aa6632026-07-23 17:14:23 +0400521#### **extraContainers** ~ `array`
522> Default value:
523> ```yaml
524> []
525> ```
526
527Extra 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):
528
529```yaml
530extraEnv:
531 - name: AWS_EC2_METADATA_SERVICE_ENDPOINT
532 - value: http://127.0.0.1:9911
533extraContainers:
534 - name: rolesanywhere-credential-helper
535 image: public.ecr.aws/rolesanywhere/credential-helper:latest
536 command: [aws_signing_helper]
537 args:
538 - serve
539 - --private-key
540 - /etc/cert/tls.key
541 - --certificate
542 - /etc/cert/tls.crt
543 - --role-arn
544 - $ROLE_ARN
545 - --profile-arn
546 - $PROFILE_ARN
547 - --trust-anchor-arn
548 - $TRUST_ANCHOR_ARN
549 volumeMounts:
550 - name: cert
551 mountPath: /etc/cert/
552 readOnly: true
553volumes:
554 - name: cert
555 secret:
556 secretName: cert
557```
gio33d62932026-07-23 16:39:35 +0400558#### **extraEnv** ~ `array`
559> Default value:
560> ```yaml
561> []
562> ```
563
564Additional environment variables to pass to cert-manager controller binary.
565For example:
566
567```yaml
568extraEnv:
569- name: SOME_VAR
570 value: 'some value'
571```
572#### **resources** ~ `object`
573> Default value:
574> ```yaml
575> {}
576> ```
577
578Resources to provide to the cert-manager controller pod.
579
580For example:
581
582```yaml
583requests:
584 cpu: 10m
585 memory: 32Mi
586```
587
588For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
589#### **securityContext** ~ `object`
590> Default value:
591> ```yaml
592> runAsNonRoot: true
593> seccompProfile:
594> type: RuntimeDefault
595> ```
596
597Pod Security Context.
598For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
599
600#### **containerSecurityContext** ~ `object`
601> Default value:
602> ```yaml
603> allowPrivilegeEscalation: false
604> capabilities:
605> drop:
606> - ALL
607> readOnlyRootFilesystem: true
608> ```
609
610Container 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/).
611
612#### **volumes** ~ `array`
613> Default value:
614> ```yaml
615> []
616> ```
617
618Additional volumes to add to the cert-manager controller pod.
619#### **volumeMounts** ~ `array`
620> Default value:
621> ```yaml
622> []
623> ```
624
625Additional volume mounts to add to the cert-manager controller container.
626#### **deploymentAnnotations** ~ `object`
627
628Optional additional annotations to add to the controller Deployment.
629
630#### **podAnnotations** ~ `object`
631
632Optional additional annotations to add to the controller Pods.
633
634#### **podLabels** ~ `object`
635> Default value:
636> ```yaml
637> {}
638> ```
639
640Optional additional labels to add to the controller Pods.
641#### **serviceAnnotations** ~ `object`
642
643Optional annotations to add to the controller Service.
644
645#### **serviceLabels** ~ `object`
646
647Optional additional labels to add to the controller Service.
648
649#### **serviceIPFamilyPolicy** ~ `string`
650
651Optionally 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).
652
653#### **serviceIPFamilies** ~ `array`
654
655Optionally 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.
656
657#### **podDnsPolicy** ~ `string`
658
659Pod DNS policy.
660For more information, see [Pod's DNS Policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy).
661
662#### **podDnsConfig** ~ `object`
663
664Pod 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).
665
666#### **hostAliases** ~ `array`
667> Default value:
668> ```yaml
669> []
670> ```
671
672Optional hostAliases for cert-manager-controller pods. May be useful when performing ACME DNS-01 self checks.
673#### **nodeSelector** ~ `object`
674> Default value:
675> ```yaml
676> kubernetes.io/os: linux
677> ```
678
679The 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/).
680
681This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
682
gio15aa6632026-07-23 17:14:23 +0400683#### **networkPolicy.enabled** ~ `bool`
684> Default value:
685> ```yaml
686> false
687> ```
688
689Create network policies for cert-manager.
690#### **networkPolicy.ingress** ~ `array`
691> Default value:
692> ```yaml
693> - ports:
694> - port: http-metrics
695> protocol: TCP
696> - port: http-healthz
697> protocol: TCP
698> ```
699
700Ingress rule for the cert-manager network policy.
701By default all pods are allowed access to:
702 http-metrics and http-healthz ports
703
704#### **networkPolicy.egress** ~ `array`
705> Default value:
706> ```yaml
707> - ports:
708> - port: 80
709> protocol: TCP
710> - port: 443
711> protocol: TCP
712> - port: 53
713> protocol: TCP
714> - port: 53
715> protocol: UDP
716> - port: 6443
717> protocol: TCP
718> ```
719
720Egress rule for the cert-manager network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
721
gio33d62932026-07-23 16:39:35 +0400722#### **ingressShim.defaultIssuerName** ~ `string`
723
724Optional default issuer to use for ingress resources.
725
726#### **ingressShim.defaultIssuerKind** ~ `string`
727
728Optional default issuer kind to use for ingress resources.
729
730#### **ingressShim.defaultIssuerGroup** ~ `string`
731
732Optional default issuer group to use for ingress resources.
733
734#### **http_proxy** ~ `string`
735
736Configures the HTTP_PROXY environment variable where a HTTP proxy is required.
737
738#### **https_proxy** ~ `string`
739
740Configures the HTTPS_PROXY environment variable where a HTTP proxy is required.
741
742#### **no_proxy** ~ `string`
743
744Configures the NO_PROXY environment variable where a HTTP proxy is required, but certain domains should be excluded.
745
746#### **affinity** ~ `object`
747> Default value:
748> ```yaml
749> {}
750> ```
751
752A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
753
754For example:
755
756```yaml
757affinity:
758 nodeAffinity:
759 requiredDuringSchedulingIgnoredDuringExecution:
760 nodeSelectorTerms:
761 - matchExpressions:
762 - key: foo.bar.com/role
763 operator: In
764 values:
765 - master
766```
767#### **tolerations** ~ `array`
768> Default value:
769> ```yaml
770> []
771> ```
772
773A 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).
774
775For example:
776
777```yaml
778tolerations:
779- key: foo.bar.com/role
780 operator: Equal
781 value: master
782 effect: NoSchedule
783```
784#### **topologySpreadConstraints** ~ `array`
785> Default value:
786> ```yaml
787> []
788> ```
789
790A 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
791
792For example:
793
794```yaml
795topologySpreadConstraints:
796- maxSkew: 2
797 topologyKey: topology.kubernetes.io/zone
798 whenUnsatisfiable: ScheduleAnyway
799 labelSelector:
800 matchLabels:
801 app.kubernetes.io/instance: cert-manager
802 app.kubernetes.io/component: controller
803```
804#### **livenessProbe** ~ `object`
805> Default value:
806> ```yaml
807> enabled: true
808> failureThreshold: 8
809> initialDelaySeconds: 10
810> periodSeconds: 10
811> successThreshold: 1
812> timeoutSeconds: 15
813> ```
814
815LivenessProbe settings for the controller container of the controller Pod.
816
817This 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
818[Kubernetes GitHub repository](https://github.com/kubernetes/kubernetes/blob/806b30170c61a38fedd54cc9ede4cd6275a1ad3b/cmd/kubeadm/app/util/staticpod/utils.go#L241-L245)
819
820#### **enableServiceLinks** ~ `bool`
821> Default value:
822> ```yaml
823> false
824> ```
825
826enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
827### Prometheus
828
829#### **prometheus.enabled** ~ `bool`
830> Default value:
831> ```yaml
832> true
833> ```
834
835Enable 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
836ServiceMonitor resource.
giob6e9f2f2026-07-23 16:53:10 +0400837Otherwise, '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 +0400838#### **prometheus.servicemonitor.enabled** ~ `bool`
839> Default value:
840> ```yaml
841> false
842> ```
843
844Create a ServiceMonitor to add cert-manager to Prometheus.
845#### **prometheus.servicemonitor.namespace** ~ `string`
846
847The namespace that the service monitor should live in, defaults to the cert-manager namespace.
848
849#### **prometheus.servicemonitor.prometheusInstance** ~ `string`
850> Default value:
851> ```yaml
852> default
853> ```
854
855Specifies the `prometheus` label on the created ServiceMonitor. This is used when different Prometheus instances have label selectors matching different ServiceMonitors.
giob6e9f2f2026-07-23 16:53:10 +0400856#### **prometheus.servicemonitor.targetPort** ~ `string,integer`
gio33d62932026-07-23 16:39:35 +0400857> Default value:
858> ```yaml
giob6e9f2f2026-07-23 16:53:10 +0400859> http-metrics
gio33d62932026-07-23 16:39:35 +0400860> ```
861
862The target port to set on the ServiceMonitor. This must match the port that the cert-manager controller is listening on for metrics.
giob6e9f2f2026-07-23 16:53:10 +0400863
gio33d62932026-07-23 16:39:35 +0400864#### **prometheus.servicemonitor.path** ~ `string`
865> Default value:
866> ```yaml
867> /metrics
868> ```
869
870The path to scrape for metrics.
871#### **prometheus.servicemonitor.interval** ~ `string`
872> Default value:
873> ```yaml
874> 60s
875> ```
876
877The interval to scrape metrics.
878#### **prometheus.servicemonitor.scrapeTimeout** ~ `string`
879> Default value:
880> ```yaml
881> 30s
882> ```
883
884The timeout before a metrics scrape fails.
885#### **prometheus.servicemonitor.labels** ~ `object`
886> Default value:
887> ```yaml
888> {}
889> ```
890
891Additional labels to add to the ServiceMonitor.
892#### **prometheus.servicemonitor.annotations** ~ `object`
893> Default value:
894> ```yaml
895> {}
896> ```
897
898Additional annotations to add to the ServiceMonitor.
899#### **prometheus.servicemonitor.honorLabels** ~ `bool`
900> Default value:
901> ```yaml
902> false
903> ```
904
905Keep labels from scraped data, overriding server-side labels.
906#### **prometheus.servicemonitor.endpointAdditionalProperties** ~ `object`
907> Default value:
908> ```yaml
909> {}
910> ```
911
912EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
913
914For example:
915
916```yaml
917endpointAdditionalProperties:
918 relabelings:
919 - action: replace
920 sourceLabels:
921 - __meta_kubernetes_pod_node_name
922 targetLabel: instance
923```
924
925
926
927#### **prometheus.podmonitor.enabled** ~ `bool`
928> Default value:
929> ```yaml
930> false
931> ```
932
933Create a PodMonitor to add cert-manager to Prometheus.
934#### **prometheus.podmonitor.namespace** ~ `string`
935
936The namespace that the pod monitor should live in, defaults to the cert-manager namespace.
937
938#### **prometheus.podmonitor.prometheusInstance** ~ `string`
939> Default value:
940> ```yaml
941> default
942> ```
943
944Specifies the `prometheus` label on the created PodMonitor. This is used when different Prometheus instances have label selectors matching different PodMonitors.
945#### **prometheus.podmonitor.path** ~ `string`
946> Default value:
947> ```yaml
948> /metrics
949> ```
950
951The path to scrape for metrics.
952#### **prometheus.podmonitor.interval** ~ `string`
953> Default value:
954> ```yaml
955> 60s
956> ```
957
958The interval to scrape metrics.
959#### **prometheus.podmonitor.scrapeTimeout** ~ `string`
960> Default value:
961> ```yaml
962> 30s
963> ```
964
965The timeout before a metrics scrape fails.
966#### **prometheus.podmonitor.labels** ~ `object`
967> Default value:
968> ```yaml
969> {}
970> ```
971
972Additional labels to add to the PodMonitor.
973#### **prometheus.podmonitor.annotations** ~ `object`
974> Default value:
975> ```yaml
976> {}
977> ```
978
979Additional annotations to add to the PodMonitor.
980#### **prometheus.podmonitor.honorLabels** ~ `bool`
981> Default value:
982> ```yaml
983> false
984> ```
985
986Keep labels from scraped data, overriding server-side labels.
987#### **prometheus.podmonitor.endpointAdditionalProperties** ~ `object`
988> Default value:
989> ```yaml
990> {}
991> ```
992
993EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
994
995For example:
996
997```yaml
998endpointAdditionalProperties:
999 relabelings:
1000 - action: replace
1001 sourceLabels:
1002 - __meta_kubernetes_pod_node_name
1003 targetLabel: instance
1004 # Configure the PodMonitor for TLS connections
1005 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1006 scheme: https
1007 tlsConfig:
1008 serverName: cert-manager-metrics
1009 ca:
1010 secret:
1011 name: cert-manager-metrics-ca
1012 key: "tls.crt"
1013```
1014
1015
1016
1017### Webhook
1018
1019#### **webhook.replicaCount** ~ `number`
1020> Default value:
1021> ```yaml
1022> 1
1023> ```
1024
1025Number of replicas of the cert-manager webhook to run.
1026
1027The default is 1, but in production set this to 2 or 3 to provide high availability.
1028
1029If `replicas > 1`, consider setting `webhook.podDisruptionBudget.enabled=true`.
1030#### **webhook.timeoutSeconds** ~ `number`
1031> Default value:
1032> ```yaml
1033> 30
1034> ```
1035
1036The 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
1037[Validating webhook configuration v1](https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-webhook-configuration-v1/).
1038
1039The 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.
1040#### **webhook.config** ~ `object`
1041> Default value:
1042> ```yaml
1043> {}
1044> ```
1045
1046This is used to configure options for the webhook pod. This allows setting options that would usually be provided using flags.
1047
1048If `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.
1049
1050For example:
1051
1052```yaml
1053apiVersion: webhook.config.cert-manager.io/v1alpha1
1054kind: WebhookConfiguration
1055# The port that the webhook listens on for requests.
1056# In GKE private clusters, by default Kubernetes apiservers are allowed to
1057# talk to the cluster nodes only on 443 and 10250. Configuring
1058# securePort: 10250 therefore will work out-of-the-box without needing to add firewall
1059# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers < 1000.
1060# This should be uncommented and set as a default by the chart once
1061# the apiVersion of WebhookConfiguration graduates beyond v1alpha1.
1062securePort: 10250
1063# Configure the metrics server for TLS
1064# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1065metricsTLSConfig:
1066 dynamic:
1067 secretNamespace: "cert-manager"
1068 secretName: "cert-manager-metrics-ca"
1069 dnsNames:
1070 - cert-manager-metrics
1071```
1072#### **webhook.strategy** ~ `object`
1073> Default value:
1074> ```yaml
1075> {}
1076> ```
1077
1078The update strategy for the cert-manager webhook deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy)
1079
1080For example:
1081
1082```yaml
1083strategy:
1084 type: RollingUpdate
1085 rollingUpdate:
1086 maxSurge: 0
1087 maxUnavailable: 1
1088```
1089#### **webhook.securityContext** ~ `object`
1090> Default value:
1091> ```yaml
1092> runAsNonRoot: true
1093> seccompProfile:
1094> type: RuntimeDefault
1095> ```
1096
1097Pod 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/).
1098
1099#### **webhook.containerSecurityContext** ~ `object`
1100> Default value:
1101> ```yaml
1102> allowPrivilegeEscalation: false
1103> capabilities:
1104> drop:
1105> - ALL
1106> readOnlyRootFilesystem: true
1107> ```
1108
1109Container 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/).
1110
1111#### **webhook.podDisruptionBudget.enabled** ~ `bool`
1112> Default value:
1113> ```yaml
1114> false
1115> ```
1116
1117Enable or disable the PodDisruptionBudget resource.
1118
1119This 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
1120Pod is currently running.
1121#### **webhook.podDisruptionBudget.minAvailable** ~ `unknown`
1122
giob6e9f2f2026-07-23 16:53:10 +04001123This 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 +04001124It cannot be used if `maxUnavailable` is set.
1125
1126
1127#### **webhook.podDisruptionBudget.maxUnavailable** ~ `unknown`
1128
giob6e9f2f2026-07-23 16:53:10 +04001129This 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 +04001130It cannot be used if `minAvailable` is set.
1131
1132
gio15aa6632026-07-23 17:14:23 +04001133#### **webhook.podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
1134
1135This 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.
1136
1137
gio33d62932026-07-23 16:39:35 +04001138#### **webhook.deploymentAnnotations** ~ `object`
1139
1140Optional additional annotations to add to the webhook Deployment.
1141
1142#### **webhook.podAnnotations** ~ `object`
1143
1144Optional additional annotations to add to the webhook Pods.
1145
1146#### **webhook.serviceAnnotations** ~ `object`
1147
1148Optional additional annotations to add to the webhook Service.
1149
1150#### **webhook.mutatingWebhookConfigurationAnnotations** ~ `object`
1151
1152Optional additional annotations to add to the webhook MutatingWebhookConfiguration.
1153
1154#### **webhook.validatingWebhookConfigurationAnnotations** ~ `object`
1155
1156Optional additional annotations to add to the webhook ValidatingWebhookConfiguration.
1157
1158#### **webhook.validatingWebhookConfiguration.namespaceSelector** ~ `object`
1159> Default value:
1160> ```yaml
1161> matchExpressions:
1162> - key: cert-manager.io/disable-validation
1163> operator: NotIn
1164> values:
1165> - "true"
1166> ```
1167
1168Configure spec.namespaceSelector for validating webhooks.
1169
1170#### **webhook.mutatingWebhookConfiguration.namespaceSelector** ~ `object`
1171> Default value:
1172> ```yaml
1173> {}
1174> ```
1175
1176Configure spec.namespaceSelector for mutating webhooks.
1177
1178#### **webhook.extraArgs** ~ `array`
1179> Default value:
1180> ```yaml
1181> []
1182> ```
1183
1184Additional 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`.
1185#### **webhook.extraEnv** ~ `array`
1186> Default value:
1187> ```yaml
1188> []
1189> ```
1190
1191Additional environment variables to pass to cert-manager webhook binary.
1192For example:
1193
1194```yaml
1195extraEnv:
1196- name: SOME_VAR
1197 value: 'some value'
1198```
1199#### **webhook.featureGates** ~ `string`
1200> Default value:
1201> ```yaml
1202> ""
1203> ```
1204
1205Comma separated list of feature gates that should be enabled on the webhook pod.
1206#### **webhook.resources** ~ `object`
1207> Default value:
1208> ```yaml
1209> {}
1210> ```
1211
1212Resources to provide to the cert-manager webhook pod.
1213
1214For example:
1215
1216```yaml
1217requests:
1218 cpu: 10m
1219 memory: 32Mi
1220```
1221
1222For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1223#### **webhook.livenessProbe** ~ `object`
1224> Default value:
1225> ```yaml
1226> failureThreshold: 3
1227> initialDelaySeconds: 60
1228> periodSeconds: 10
1229> successThreshold: 1
1230> timeoutSeconds: 1
1231> ```
1232
1233Liveness probe values.
1234For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1235
1236#### **webhook.readinessProbe** ~ `object`
1237> Default value:
1238> ```yaml
1239> failureThreshold: 3
1240> initialDelaySeconds: 5
1241> periodSeconds: 5
1242> successThreshold: 1
1243> timeoutSeconds: 1
1244> ```
1245
1246Readiness probe values.
1247For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1248
1249#### **webhook.nodeSelector** ~ `object`
1250> Default value:
1251> ```yaml
1252> kubernetes.io/os: linux
1253> ```
1254
1255The 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/).
1256
1257This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1258
1259#### **webhook.affinity** ~ `object`
1260> Default value:
1261> ```yaml
1262> {}
1263> ```
1264
1265A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1266
1267For example:
1268
1269```yaml
1270affinity:
1271 nodeAffinity:
1272 requiredDuringSchedulingIgnoredDuringExecution:
1273 nodeSelectorTerms:
1274 - matchExpressions:
1275 - key: foo.bar.com/role
1276 operator: In
1277 values:
1278 - master
1279```
1280#### **webhook.tolerations** ~ `array`
1281> Default value:
1282> ```yaml
1283> []
1284> ```
1285
1286A 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).
1287
1288For example:
1289
1290```yaml
1291tolerations:
1292- key: foo.bar.com/role
1293 operator: Equal
1294 value: master
1295 effect: NoSchedule
1296```
1297#### **webhook.topologySpreadConstraints** ~ `array`
1298> Default value:
1299> ```yaml
1300> []
1301> ```
1302
1303A 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).
1304
1305For example:
1306
1307```yaml
1308topologySpreadConstraints:
1309- maxSkew: 2
1310 topologyKey: topology.kubernetes.io/zone
1311 whenUnsatisfiable: ScheduleAnyway
1312 labelSelector:
1313 matchLabels:
1314 app.kubernetes.io/instance: cert-manager
1315 app.kubernetes.io/component: controller
1316```
1317#### **webhook.podLabels** ~ `object`
1318> Default value:
1319> ```yaml
1320> {}
1321> ```
1322
1323Optional additional labels to add to the Webhook Pods.
1324#### **webhook.serviceLabels** ~ `object`
1325> Default value:
1326> ```yaml
1327> {}
1328> ```
1329
1330Optional additional labels to add to the Webhook Service.
1331#### **webhook.serviceIPFamilyPolicy** ~ `string`
1332> Default value:
1333> ```yaml
1334> ""
1335> ```
1336
1337Optionally 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).
1338#### **webhook.serviceIPFamilies** ~ `array`
1339> Default value:
1340> ```yaml
1341> []
1342> ```
1343
1344Optionally 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.
1345#### **webhook.image.registry** ~ `string`
1346
gio15aa6632026-07-23 17:14:23 +04001347Deprecated: per-component registry prefix.
1348
1349If 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
1350`imageRegistry` + `imageNamespace` + `webhook.image.name`.
1351
1352This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1353
1354#### **webhook.image.name** ~ `string`
1355> Default value:
1356> ```yaml
1357> cert-manager-webhook
1358> ```
1359
1360The image name for the cert-manager webhook.
gio33d62932026-07-23 16:39:35 +04001361
1362#### **webhook.image.repository** ~ `string`
1363> Default value:
1364> ```yaml
gio15aa6632026-07-23 17:14:23 +04001365> ""
gio33d62932026-07-23 16:39:35 +04001366> ```
1367
gio15aa6632026-07-23 17:14:23 +04001368Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `webhook.image.name`).
gio33d62932026-07-23 16:39:35 +04001369
1370#### **webhook.image.tag** ~ `string`
1371
1372Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1373
1374#### **webhook.image.digest** ~ `string`
1375
gio15aa6632026-07-23 17:14:23 +04001376Setting 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 +04001377
1378#### **webhook.image.pullPolicy** ~ `string`
1379> Default value:
1380> ```yaml
1381> IfNotPresent
1382> ```
1383
1384Kubernetes imagePullPolicy on Deployment.
1385#### **webhook.serviceAccount.create** ~ `bool`
1386> Default value:
1387> ```yaml
1388> true
1389> ```
1390
1391Specifies whether a service account should be created.
1392#### **webhook.serviceAccount.name** ~ `string`
1393
1394The name of the service account to use.
1395If not set and create is true, a name is generated using the fullname template.
1396
1397#### **webhook.serviceAccount.annotations** ~ `object`
1398
1399Optional additional annotations to add to the webhook's Service Account.
1400
1401#### **webhook.serviceAccount.labels** ~ `object`
1402
1403Optional additional labels to add to the webhook's Service Account.
1404
1405#### **webhook.serviceAccount.automountServiceAccountToken** ~ `bool`
1406> Default value:
1407> ```yaml
1408> true
1409> ```
1410
1411Automount API credentials for a Service Account.
1412#### **webhook.automountServiceAccountToken** ~ `bool`
1413
1414Automounting API credentials for a particular pod.
1415
1416#### **webhook.securePort** ~ `number`
1417> Default value:
1418> ```yaml
1419> 10250
1420> ```
1421
1422The 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.
1423#### **webhook.hostNetwork** ~ `bool`
1424> Default value:
1425> ```yaml
1426> false
1427> ```
1428
1429Specifies if the webhook should be started in hostNetwork mode.
1430
1431Required 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
1432
1433Since 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.
1434#### **webhook.serviceType** ~ `string`
1435> Default value:
1436> ```yaml
1437> ClusterIP
1438> ```
1439
1440Specifies 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.
1441#### **webhook.loadBalancerIP** ~ `string`
1442
1443Specify the load balancer IP for the created service.
1444
1445#### **webhook.url** ~ `object`
1446> Default value:
1447> ```yaml
1448> {}
1449> ```
1450
1451Overrides the mutating webhook and validating webhook so they reach the webhook service using the `url` field instead of a service.
1452#### **webhook.networkPolicy.enabled** ~ `bool`
1453> Default value:
1454> ```yaml
1455> false
1456> ```
1457
1458Create network policies for the webhooks.
1459#### **webhook.networkPolicy.ingress** ~ `array`
1460> Default value:
1461> ```yaml
gio15aa6632026-07-23 17:14:23 +04001462> - ports:
1463> - port: https
1464> protocol: TCP
1465> - port: healthcheck
1466> protocol: TCP
1467> - port: http-metrics
1468> protocol: TCP
gio33d62932026-07-23 16:39:35 +04001469> ```
1470
gio15aa6632026-07-23 17:14:23 +04001471Ingress rule for the webhook network policy.
1472By default all pods are allowed access to:
1473 https, http-metrics, and http-healthz ports
gio33d62932026-07-23 16:39:35 +04001474
1475#### **webhook.networkPolicy.egress** ~ `array`
1476> Default value:
1477> ```yaml
1478> - ports:
1479> - port: 80
1480> protocol: TCP
1481> - port: 443
1482> protocol: TCP
1483> - port: 53
1484> protocol: TCP
1485> - port: 53
1486> protocol: UDP
1487> - port: 6443
1488> protocol: TCP
gio33d62932026-07-23 16:39:35 +04001489> ```
1490
1491Egress rule for the webhook network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
1492
1493#### **webhook.volumes** ~ `array`
1494> Default value:
1495> ```yaml
1496> []
1497> ```
1498
1499Additional volumes to add to the cert-manager controller pod.
1500#### **webhook.volumeMounts** ~ `array`
1501> Default value:
1502> ```yaml
1503> []
1504> ```
1505
1506Additional volume mounts to add to the cert-manager controller container.
1507#### **webhook.enableServiceLinks** ~ `bool`
1508> Default value:
1509> ```yaml
1510> false
1511> ```
1512
1513enableServiceLinks 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 +04001514#### **webhook.enableClientVerification** ~ `bool`
1515> Default value:
1516> ```yaml
1517> false
1518> ```
1519
1520enableClientVerification turns on client verification of requests made to the webhook server
1521#### **webhook.clientCAFile** ~ `string`
1522> Default value:
1523> ```yaml
1524> ""
1525> ```
1526
1527the client CA file to be used for verification
1528#### **webhook.apiserverClientCertSubjects** ~ `string`
1529> Default value:
1530> ```yaml
1531> ""
1532> ```
1533
1534Subject names to verify for the client certificate. Multiple values may be supplied as a comma-separated list.
gio33d62932026-07-23 16:39:35 +04001535### CA Injector
1536
1537#### **cainjector.enabled** ~ `bool`
1538> Default value:
1539> ```yaml
1540> true
1541> ```
1542
1543Create the CA Injector deployment
1544#### **cainjector.replicaCount** ~ `number`
1545> Default value:
1546> ```yaml
1547> 1
1548> ```
1549
1550The number of replicas of the cert-manager cainjector to run.
1551
1552The default is 1, but in production set this to 2 or 3 to provide high availability.
1553
1554If `replicas > 1`, consider setting `cainjector.podDisruptionBudget.enabled=true`.
1555
1556Note that cert-manager uses leader election to ensure that there can only be a single instance active at a time.
1557#### **cainjector.config** ~ `object`
1558> Default value:
1559> ```yaml
1560> {}
1561> ```
1562
1563This is used to configure options for the cainjector pod. It allows setting options that are usually provided via flags.
1564
1565If `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.
1566
1567For example:
1568
1569```yaml
1570apiVersion: cainjector.config.cert-manager.io/v1alpha1
1571kind: CAInjectorConfiguration
1572logging:
1573 verbosity: 2
1574 format: text
1575leaderElectionConfig:
1576 namespace: kube-system
1577# Configure the metrics server for TLS
1578# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1579metricsTLSConfig:
1580 dynamic:
1581 secretNamespace: "cert-manager"
1582 secretName: "cert-manager-metrics-ca"
1583 dnsNames:
1584 - cert-manager-metrics
1585```
1586#### **cainjector.strategy** ~ `object`
1587> Default value:
1588> ```yaml
1589> {}
1590> ```
1591
1592Deployment update strategy for the cert-manager cainjector deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
1593
1594For example:
1595
1596```yaml
1597strategy:
1598 type: RollingUpdate
1599 rollingUpdate:
1600 maxSurge: 0
1601 maxUnavailable: 1
1602```
1603#### **cainjector.securityContext** ~ `object`
1604> Default value:
1605> ```yaml
1606> runAsNonRoot: true
1607> seccompProfile:
1608> type: RuntimeDefault
1609> ```
1610
1611Pod 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/).
1612
1613#### **cainjector.containerSecurityContext** ~ `object`
1614> Default value:
1615> ```yaml
1616> allowPrivilegeEscalation: false
1617> capabilities:
1618> drop:
1619> - ALL
1620> readOnlyRootFilesystem: true
1621> ```
1622
1623Container 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/).
1624
gio15aa6632026-07-23 17:14:23 +04001625#### **cainjector.networkPolicy.enabled** ~ `bool`
1626> Default value:
1627> ```yaml
1628> false
1629> ```
1630
1631Create network policies for the cainjector.
1632#### **cainjector.networkPolicy.ingress** ~ `array`
1633> Default value:
1634> ```yaml
1635> - ports:
1636> - port: http-metrics
1637> protocol: TCP
1638> ```
1639
1640Ingress rule for the webhook cainjector policy.
1641By default all pods are allowed access to:
1642 http-metrics port
1643
1644#### **cainjector.networkPolicy.egress** ~ `array`
1645> Default value:
1646> ```yaml
1647> - ports:
1648> - port: 80
1649> protocol: TCP
1650> - port: 443
1651> protocol: TCP
1652> - port: 53
1653> protocol: TCP
1654> - port: 53
1655> protocol: UDP
1656> - port: 6443
1657> protocol: TCP
1658> ```
1659
1660Egress rule for the cainjector network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
1661
gio33d62932026-07-23 16:39:35 +04001662#### **cainjector.podDisruptionBudget.enabled** ~ `bool`
1663> Default value:
1664> ```yaml
1665> false
1666> ```
1667
1668Enable or disable the PodDisruptionBudget resource.
1669
1670This 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
1671Pod is currently running.
1672#### **cainjector.podDisruptionBudget.minAvailable** ~ `unknown`
1673
1674`minAvailable` configures the minimum available pods for disruptions. It can either be set to
giob6e9f2f2026-07-23 16:53:10 +04001675an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001676Cannot be used if `maxUnavailable` is set.
1677
1678
1679#### **cainjector.podDisruptionBudget.maxUnavailable** ~ `unknown`
1680
1681`maxUnavailable` configures the maximum unavailable pods for disruptions. It can either be set to
giob6e9f2f2026-07-23 16:53:10 +04001682an integer (e.g., 1) or a percentage value (e.g., 25%).
gio33d62932026-07-23 16:39:35 +04001683Cannot be used if `minAvailable` is set.
1684
1685
gio15aa6632026-07-23 17:14:23 +04001686#### **cainjector.podDisruptionBudget.unhealthyPodEvictionPolicy** ~ `string`
1687
1688This 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.
1689
1690
gio33d62932026-07-23 16:39:35 +04001691#### **cainjector.deploymentAnnotations** ~ `object`
1692
1693Optional additional annotations to add to the cainjector Deployment.
1694
1695#### **cainjector.podAnnotations** ~ `object`
1696
1697Optional additional annotations to add to the cainjector Pods.
1698
1699#### **cainjector.serviceAnnotations** ~ `object`
1700
1701Optional additional annotations to add to the cainjector metrics Service.
1702
1703#### **cainjector.extraArgs** ~ `array`
1704> Default value:
1705> ```yaml
1706> []
1707> ```
1708
1709Additional 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`.
1710#### **cainjector.extraEnv** ~ `array`
1711> Default value:
1712> ```yaml
1713> []
1714> ```
1715
1716Additional environment variables to pass to cert-manager cainjector binary.
1717For example:
1718
1719```yaml
1720extraEnv:
1721- name: SOME_VAR
1722 value: 'some value'
1723```
1724#### **cainjector.featureGates** ~ `string`
1725> Default value:
1726> ```yaml
1727> ""
1728> ```
1729
1730Comma separated list of feature gates that should be enabled on the cainjector pod.
1731#### **cainjector.resources** ~ `object`
1732> Default value:
1733> ```yaml
1734> {}
1735> ```
1736
1737Resources to provide to the cert-manager cainjector pod.
1738
1739For example:
1740
1741```yaml
1742requests:
1743 cpu: 10m
1744 memory: 32Mi
1745```
1746
1747For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1748#### **cainjector.nodeSelector** ~ `object`
1749> Default value:
1750> ```yaml
1751> kubernetes.io/os: linux
1752> ```
1753
1754The 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/).
1755
1756This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1757
1758#### **cainjector.affinity** ~ `object`
1759> Default value:
1760> ```yaml
1761> {}
1762> ```
1763
1764A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1765
1766For example:
1767
1768```yaml
1769affinity:
1770 nodeAffinity:
1771 requiredDuringSchedulingIgnoredDuringExecution:
1772 nodeSelectorTerms:
1773 - matchExpressions:
1774 - key: foo.bar.com/role
1775 operator: In
1776 values:
1777 - master
1778```
1779#### **cainjector.tolerations** ~ `array`
1780> Default value:
1781> ```yaml
1782> []
1783> ```
1784
1785A 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).
1786
1787For example:
1788
1789```yaml
1790tolerations:
1791- key: foo.bar.com/role
1792 operator: Equal
1793 value: master
1794 effect: NoSchedule
1795```
1796#### **cainjector.topologySpreadConstraints** ~ `array`
1797> Default value:
1798> ```yaml
1799> []
1800> ```
1801
1802A 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).
1803
1804For example:
1805
1806```yaml
1807topologySpreadConstraints:
1808- maxSkew: 2
1809 topologyKey: topology.kubernetes.io/zone
1810 whenUnsatisfiable: ScheduleAnyway
1811 labelSelector:
1812 matchLabels:
1813 app.kubernetes.io/instance: cert-manager
1814 app.kubernetes.io/component: controller
1815```
1816#### **cainjector.podLabels** ~ `object`
1817> Default value:
1818> ```yaml
1819> {}
1820> ```
1821
1822Optional additional labels to add to the CA Injector Pods.
1823#### **cainjector.serviceLabels** ~ `object`
1824> Default value:
1825> ```yaml
1826> {}
1827> ```
1828
1829Optional additional labels to add to the CA Injector metrics Service.
1830#### **cainjector.image.registry** ~ `string`
1831
gio15aa6632026-07-23 17:14:23 +04001832Deprecated: per-component registry prefix.
1833
1834If 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
1835`imageRegistry` + `imageNamespace` + `cainjector.image.name`.
1836
1837This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1838
1839#### **cainjector.image.name** ~ `string`
1840> Default value:
1841> ```yaml
1842> cert-manager-cainjector
1843> ```
1844
1845The image name for the cert-manager cainjector.
gio33d62932026-07-23 16:39:35 +04001846
1847#### **cainjector.image.repository** ~ `string`
1848> Default value:
1849> ```yaml
gio15aa6632026-07-23 17:14:23 +04001850> ""
gio33d62932026-07-23 16:39:35 +04001851> ```
1852
gio15aa6632026-07-23 17:14:23 +04001853Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `cainjector.image.name`).
gio33d62932026-07-23 16:39:35 +04001854
1855#### **cainjector.image.tag** ~ `string`
1856
1857Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1858
1859#### **cainjector.image.digest** ~ `string`
1860
gio15aa6632026-07-23 17:14:23 +04001861Setting 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 +04001862
1863#### **cainjector.image.pullPolicy** ~ `string`
1864> Default value:
1865> ```yaml
1866> IfNotPresent
1867> ```
1868
1869Kubernetes imagePullPolicy on Deployment.
1870#### **cainjector.serviceAccount.create** ~ `bool`
1871> Default value:
1872> ```yaml
1873> true
1874> ```
1875
1876Specifies whether a service account should be created.
1877#### **cainjector.serviceAccount.name** ~ `string`
1878
1879The name of the service account to use.
1880If not set and create is true, a name is generated using the fullname template
1881
1882#### **cainjector.serviceAccount.annotations** ~ `object`
1883
1884Optional additional annotations to add to the cainjector's Service Account.
1885
1886#### **cainjector.serviceAccount.labels** ~ `object`
1887
1888Optional additional labels to add to the cainjector's Service Account.
1889
1890#### **cainjector.serviceAccount.automountServiceAccountToken** ~ `bool`
1891> Default value:
1892> ```yaml
1893> true
1894> ```
1895
1896Automount API credentials for a Service Account.
1897#### **cainjector.automountServiceAccountToken** ~ `bool`
1898
1899Automounting API credentials for a particular pod.
1900
1901#### **cainjector.volumes** ~ `array`
1902> Default value:
1903> ```yaml
1904> []
1905> ```
1906
1907Additional volumes to add to the cert-manager controller pod.
1908#### **cainjector.volumeMounts** ~ `array`
1909> Default value:
1910> ```yaml
1911> []
1912> ```
1913
1914Additional volume mounts to add to the cert-manager controller container.
1915#### **cainjector.enableServiceLinks** ~ `bool`
1916> Default value:
1917> ```yaml
1918> false
1919> ```
1920
1921enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
1922### ACME Solver
1923
1924#### **acmesolver.image.registry** ~ `string`
1925
gio15aa6632026-07-23 17:14:23 +04001926Deprecated: per-component registry prefix.
1927
1928If 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
1929`imageRegistry` + `imageNamespace` + `acmesolver.image.name`.
1930
1931This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
1932
1933#### **acmesolver.image.name** ~ `string`
1934> Default value:
1935> ```yaml
1936> cert-manager-acmesolver
1937> ```
1938
1939The image name for the cert-manager acmesolver.
gio33d62932026-07-23 16:39:35 +04001940
1941#### **acmesolver.image.repository** ~ `string`
1942> Default value:
1943> ```yaml
gio15aa6632026-07-23 17:14:23 +04001944> ""
gio33d62932026-07-23 16:39:35 +04001945> ```
1946
gio15aa6632026-07-23 17:14:23 +04001947Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `acmesolver.image.name`).
gio33d62932026-07-23 16:39:35 +04001948
1949#### **acmesolver.image.tag** ~ `string`
1950
1951Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
1952
1953#### **acmesolver.image.digest** ~ `string`
1954
gio15aa6632026-07-23 17:14:23 +04001955Setting 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 +04001956
1957#### **acmesolver.image.pullPolicy** ~ `string`
1958> Default value:
1959> ```yaml
1960> IfNotPresent
1961> ```
1962
1963Kubernetes imagePullPolicy on Deployment.
1964### Startup API Check
1965
1966
1967This 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).
1968#### **startupapicheck.enabled** ~ `bool`
1969> Default value:
1970> ```yaml
1971> true
1972> ```
1973
1974Enables the startup api check.
1975#### **startupapicheck.securityContext** ~ `object`
1976> Default value:
1977> ```yaml
1978> runAsNonRoot: true
1979> seccompProfile:
1980> type: RuntimeDefault
1981> ```
1982
1983Pod 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/).
1984
1985#### **startupapicheck.containerSecurityContext** ~ `object`
1986> Default value:
1987> ```yaml
1988> allowPrivilegeEscalation: false
1989> capabilities:
1990> drop:
1991> - ALL
1992> readOnlyRootFilesystem: true
1993> ```
1994
1995Container 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/).
1996
1997#### **startupapicheck.timeout** ~ `string`
1998> Default value:
1999> ```yaml
2000> 1m
2001> ```
2002
2003Timeout for 'kubectl check api' command.
2004#### **startupapicheck.backoffLimit** ~ `number`
2005> Default value:
2006> ```yaml
2007> 4
2008> ```
2009
2010Job backoffLimit
2011#### **startupapicheck.jobAnnotations** ~ `object`
2012> Default value:
2013> ```yaml
2014> helm.sh/hook: post-install
2015> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2016> helm.sh/hook-weight: "1"
2017> ```
2018
2019Optional additional annotations to add to the startupapicheck Job.
2020
2021#### **startupapicheck.podAnnotations** ~ `object`
2022
2023Optional additional annotations to add to the startupapicheck Pods.
2024
2025#### **startupapicheck.extraArgs** ~ `array`
2026> Default value:
2027> ```yaml
2028> - -v
2029> ```
2030
2031Additional command line flags to pass to startupapicheck binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-startupapicheck:<version> --help`.
2032
2033Verbose 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.
2034
2035#### **startupapicheck.extraEnv** ~ `array`
2036> Default value:
2037> ```yaml
2038> []
2039> ```
2040
2041Additional environment variables to pass to cert-manager startupapicheck binary.
2042For example:
2043
2044```yaml
2045extraEnv:
2046- name: SOME_VAR
2047 value: 'some value'
2048```
2049#### **startupapicheck.resources** ~ `object`
2050> Default value:
2051> ```yaml
2052> {}
2053> ```
2054
2055Resources to provide to the cert-manager controller pod.
2056
2057For example:
2058
2059```yaml
2060requests:
2061 cpu: 10m
2062 memory: 32Mi
2063```
2064
2065For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
2066#### **startupapicheck.nodeSelector** ~ `object`
2067> Default value:
2068> ```yaml
2069> kubernetes.io/os: linux
2070> ```
2071
2072The 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/).
2073
2074This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
2075
2076#### **startupapicheck.affinity** ~ `object`
2077> Default value:
2078> ```yaml
2079> {}
2080> ```
2081
2082A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
2083For example:
2084
2085```yaml
2086affinity:
2087 nodeAffinity:
2088 requiredDuringSchedulingIgnoredDuringExecution:
2089 nodeSelectorTerms:
2090 - matchExpressions:
2091 - key: foo.bar.com/role
2092 operator: In
2093 values:
2094 - master
2095```
2096#### **startupapicheck.tolerations** ~ `array`
2097> Default value:
2098> ```yaml
2099> []
2100> ```
2101
2102A 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).
2103
2104For example:
2105
2106```yaml
2107tolerations:
2108- key: foo.bar.com/role
2109 operator: Equal
2110 value: master
2111 effect: NoSchedule
2112```
2113#### **startupapicheck.podLabels** ~ `object`
2114> Default value:
2115> ```yaml
2116> {}
2117> ```
2118
2119Optional additional labels to add to the startupapicheck Pods.
2120#### **startupapicheck.image.registry** ~ `string`
2121
gio15aa6632026-07-23 17:14:23 +04002122Deprecated: per-component registry prefix.
2123
2124If 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
2125`imageRegistry` + `imageNamespace` + `startupapicheck.image.name`.
2126
2127This can produce "double registry" style references such as `legacy.example.io/quay.io/jetstack/...`. Prefer using the global `imageRegistry`/`imageNamespace` values.
2128
2129#### **startupapicheck.image.name** ~ `string`
2130> Default value:
2131> ```yaml
2132> cert-manager-startupapicheck
2133> ```
2134
2135The image name for the cert-manager startupapicheck.
gio33d62932026-07-23 16:39:35 +04002136
2137#### **startupapicheck.image.repository** ~ `string`
2138> Default value:
2139> ```yaml
gio15aa6632026-07-23 17:14:23 +04002140> ""
gio33d62932026-07-23 16:39:35 +04002141> ```
2142
gio15aa6632026-07-23 17:14:23 +04002143Full repository override (takes precedence over `imageRegistry`, `imageNamespace`, and `startupapicheck.image.name`).
gio33d62932026-07-23 16:39:35 +04002144
2145#### **startupapicheck.image.tag** ~ `string`
2146
2147Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
2148
2149#### **startupapicheck.image.digest** ~ `string`
2150
gio15aa6632026-07-23 17:14:23 +04002151Setting 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 +04002152
2153#### **startupapicheck.image.pullPolicy** ~ `string`
2154> Default value:
2155> ```yaml
2156> IfNotPresent
2157> ```
2158
2159Kubernetes imagePullPolicy on Deployment.
2160#### **startupapicheck.rbac.annotations** ~ `object`
2161> Default value:
2162> ```yaml
2163> helm.sh/hook: post-install
2164> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2165> helm.sh/hook-weight: "-5"
2166> ```
2167
2168annotations for the startup API Check job RBAC and PSP resources.
2169
2170#### **startupapicheck.automountServiceAccountToken** ~ `bool`
2171
2172Automounting API credentials for a particular pod.
2173
2174#### **startupapicheck.serviceAccount.create** ~ `bool`
2175> Default value:
2176> ```yaml
2177> true
2178> ```
2179
2180Specifies whether a service account should be created.
2181#### **startupapicheck.serviceAccount.name** ~ `string`
2182
2183The name of the service account to use.
2184If not set and create is true, a name is generated using the fullname template.
2185
2186#### **startupapicheck.serviceAccount.annotations** ~ `object`
2187> Default value:
2188> ```yaml
2189> helm.sh/hook: post-install
2190> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
2191> helm.sh/hook-weight: "-5"
2192> ```
2193
2194Optional additional annotations to add to the Job's Service Account.
2195
2196#### **startupapicheck.serviceAccount.automountServiceAccountToken** ~ `bool`
2197> Default value:
2198> ```yaml
2199> true
2200> ```
2201
2202Automount API credentials for a Service Account.
2203
2204#### **startupapicheck.serviceAccount.labels** ~ `object`
2205
2206Optional additional labels to add to the startupapicheck's Service Account.
2207
2208#### **startupapicheck.volumes** ~ `array`
2209> Default value:
2210> ```yaml
2211> []
2212> ```
2213
2214Additional volumes to add to the cert-manager controller pod.
2215#### **startupapicheck.volumeMounts** ~ `array`
2216> Default value:
2217> ```yaml
2218> []
2219> ```
2220
2221Additional volume mounts to add to the cert-manager controller container.
2222#### **startupapicheck.enableServiceLinks** ~ `bool`
2223> Default value:
2224> ```yaml
2225> false
2226> ```
2227
2228enableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links.
2229#### **extraObjects** ~ `array`
2230> Default value:
2231> ```yaml
2232> []
2233> ```
2234
2235Create dynamic manifests via values.
2236
2237For example:
2238
2239```yaml
2240extraObjects:
2241 - |
2242 apiVersion: v1
2243 kind: ConfigMap
2244 metadata:
2245 name: '{{ template "cert-manager.fullname" . }}-extra-configmap'
2246```
2247
2248<!-- /AUTO-GENERATED -->
Giorgi Lekveishvilid1234c12023-06-19 10:37:06 +04002249### Default Security Contexts
2250
2251The 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.
2252
2253Default pod-level securityContext:
2254```yaml
2255runAsNonRoot: true
2256seccompProfile:
2257 type: RuntimeDefault
2258```
2259
2260Default containerSecurityContext:
2261```yaml
2262allowPrivilegeEscalation: false
2263capabilities:
2264 drop:
2265 - ALL
2266```
2267
2268### Assigning Values
2269
2270Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
2271
2272Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
2273
2274```console
2275$ helm install my-release -f values.yaml .
2276```
2277> **Tip**: You can use the default [values.yaml](https://github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml)
2278
2279## Contributing
2280
2281This chart is maintained at [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager/tree/master/deploy/charts/cert-manager).