blob: 872ba1d49745008a15e42cc9f11f93c0177bf0ae [file] [log] [blame] [view]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +04001# cert-manager
2
3cert-manager creates TLS certificates for workloads in your Kubernetes or OpenShift cluster and renews the certificates before they expire.
4
5cert-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/),
7[Venafi](https://cert-manager.io/docs/configuration/venafi/) and [private PKI](https://cert-manager.io/docs/configuration/ca/).
8
9## Prerequisites
10
11- Kubernetes 1.22+
12
13## Installing the Chart
14
15Full installation instructions, including details on how to configure extra
16functionality in cert-manager can be found in the [installation docs](https://cert-manager.io/docs/installation/helm/).
17
18To install the chart with the release name `cert-manager`:
19
20```console
21# Add the Jetstack Helm repository
22helm repo add jetstack https://charts.jetstack.io --force-update
23
24# Install the cert-manager helm chart
25helm install \
26 cert-manager jetstack/cert-manager \
27 --namespace cert-manager \
28 --create-namespace \
29 --version v1.19.6 \
30 --set crds.enabled=true
31```
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
54To uninstall/delete the `cert-manager` deployment:
55
56```console
57helm delete cert-manager --namespace cert-manager
58```
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
63delete the previously installed CustomResourceDefinition resources.
64
65> ☢️ 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> ```
76
77## Configuration
78<!-- AUTO-GENERATED -->
79
80### Global
81
82#### **global.imagePullSecrets** ~ `array`
83> Default value:
84> ```yaml
85> []
86> ```
87
88Reference 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```
96#### **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
108#### **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.
129#### **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
141#### **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
263This 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%).
264It cannot be used if `maxUnavailable` is set.
265
266
267#### **podDisruptionBudget.maxUnavailable** ~ `unknown`
268
269This 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.
270
271
272#### **featureGates** ~ `string`
273> Default value:
274> ```yaml
275> ""
276> ```
277
278A comma-separated list of feature gates that should be enabled on the controller pod.
279#### **maxConcurrentChallenges** ~ `number`
280> Default value:
281> ```yaml
282> 60
283> ```
284
285The maximum number of challenges that can be scheduled as 'processing' at once.
286#### **image.registry** ~ `string`
287
288The container registry to pull the manager image from.
289
290#### **image.repository** ~ `string`
291> Default value:
292> ```yaml
293> quay.io/jetstack/cert-manager-controller
294> ```
295
296The container image for the cert-manager controller.
297
298#### **image.tag** ~ `string`
299
300Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
301
302#### **image.digest** ~ `string`
303
304Setting a digest will override any tag.
305
306#### **image.pullPolicy** ~ `string`
307> Default value:
308> ```yaml
309> IfNotPresent
310> ```
311
312Kubernetes imagePullPolicy on Deployment.
313#### **clusterResourceNamespace** ~ `string`
314> Default value:
315> ```yaml
316> ""
317> ```
318
319Override 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.
320#### **namespace** ~ `string`
321> Default value:
322> ```yaml
323> ""
324> ```
325
326This 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).
327#### **fullnameOverride** ~ `string`
328
329Override the "cert-manager.fullname" value. This value is used as part of most of the names of the resources created by this Helm chart.
330
331#### **nameOverride** ~ `string`
332
333Override 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").
334
335#### **serviceAccount.create** ~ `bool`
336> Default value:
337> ```yaml
338> true
339> ```
340
341Specifies whether a service account should be created.
342#### **serviceAccount.name** ~ `string`
343
344The name of the service account to use.
345If not set and create is true, a name is generated using the fullname template.
346
347#### **serviceAccount.annotations** ~ `object`
348
349Optional additional annotations to add to the controller's Service Account. Templates are allowed for both keys and values.
350Example using templating:
351
352```yaml
353annotations:
354 "{{ .Chart.Name }}-helm-chart/version": "{{ .Chart.Version }}"
355```
356
357#### **serviceAccount.labels** ~ `object`
358
359Optional additional labels to add to the controller's Service Account.
360
361#### **serviceAccount.automountServiceAccountToken** ~ `bool`
362> Default value:
363> ```yaml
364> true
365> ```
366
367Automount API credentials for a Service Account.
368#### **automountServiceAccountToken** ~ `bool`
369
370Automounting API credentials for a particular pod.
371
372#### **enableCertificateOwnerRef** ~ `bool`
373> Default value:
374> ```yaml
375> false
376> ```
377
378When this flag is enabled, secrets will be automatically removed when the certificate resource is deleted.
379#### **config** ~ `object`
380> Default value:
381> ```yaml
382> {}
383> ```
384
385This property is used to configure options for the controller pod. This allows setting options that would usually be provided using flags.
386
387If `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.
388
389For example:
390
391```yaml
392config:
393 apiVersion: controller.config.cert-manager.io/v1alpha1
394 kind: ControllerConfiguration
395 logging:
396 verbosity: 2
397 format: text
398 leaderElectionConfig:
399 namespace: kube-system
400 kubernetesAPIQPS: 9000
401 kubernetesAPIBurst: 9000
402 numberOfConcurrentWorkers: 200
403 enableGatewayAPI: true
404 # Feature gates as of v1.18.1. Listed with their default values.
405 # See https://cert-manager.io/docs/cli/controller/
406 featureGates:
407 AdditionalCertificateOutputFormats: true # GA - default=true
408 AllAlpha: false # ALPHA - default=false
409 AllBeta: false # BETA - default=false
410 ExperimentalCertificateSigningRequestControllers: false # ALPHA - default=false
411 ExperimentalGatewayAPISupport: true # BETA - default=true
412 LiteralCertificateSubject: true # BETA - default=true
413 NameConstraints: true # BETA - default=true
414 OtherNames: false # ALPHA - default=false
415 SecretsFilteredCaching: true # BETA - default=true
416 ServerSideApply: false # ALPHA - default=false
417 StableCertificateRequestName: true # BETA - default=true
418 UseCertificateRequestBasicConstraints: false # ALPHA - default=false
419 UseDomainQualifiedFinalizer: true # GA - default=true
420 ValidateCAA: false # ALPHA - default=false
421 DefaultPrivateKeyRotationPolicyAlways: true # BETA - default=true
422 ACMEHTTP01IngressPathTypeExact: true # BETA - default=true
423 # Configure the metrics server for TLS
424 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
425 metricsTLSConfig:
426 dynamic:
427 secretNamespace: "cert-manager"
428 secretName: "cert-manager-metrics-ca"
429 dnsNames:
430 - cert-manager-metrics
431```
432#### **dns01RecursiveNameservers** ~ `string`
433> Default value:
434> ```yaml
435> ""
436> ```
437
438A comma-separated string with the host and port of the recursive nameservers cert-manager should query.
439#### **dns01RecursiveNameserversOnly** ~ `bool`
440> Default value:
441> ```yaml
442> false
443> ```
444
445Forces 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.
446#### **disableAutoApproval** ~ `bool`
447> Default value:
448> ```yaml
449> false
450> ```
451
452Option 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).
453#### **approveSignerNames** ~ `array`
454> Default value:
455> ```yaml
456> - issuers.cert-manager.io/*
457> - clusterissuers.cert-manager.io/*
458> ```
459
460List 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'.
461ref: https://cert-manager.io/docs/concepts/certificaterequest/#approval
462
463#### **extraArgs** ~ `array`
464> Default value:
465> ```yaml
466> []
467> ```
468
469Additional 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`.
470
471Use this flag to enable or disable arbitrary controllers. For example, to disable the CertificateRequests approver.
472
473For example:
474
475```yaml
476extraArgs:
477 - --controllers=*,-certificaterequests-approver
478```
479#### **extraEnv** ~ `array`
480> Default value:
481> ```yaml
482> []
483> ```
484
485Additional environment variables to pass to cert-manager controller binary.
486For example:
487
488```yaml
489extraEnv:
490- name: SOME_VAR
491 value: 'some value'
492```
493#### **resources** ~ `object`
494> Default value:
495> ```yaml
496> {}
497> ```
498
499Resources to provide to the cert-manager controller pod.
500
501For example:
502
503```yaml
504requests:
505 cpu: 10m
506 memory: 32Mi
507```
508
509For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
510#### **securityContext** ~ `object`
511> Default value:
512> ```yaml
513> runAsNonRoot: true
514> seccompProfile:
515> type: RuntimeDefault
516> ```
517
518Pod Security Context.
519For more information, see [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).
520
521#### **containerSecurityContext** ~ `object`
522> Default value:
523> ```yaml
524> allowPrivilegeEscalation: false
525> capabilities:
526> drop:
527> - ALL
528> readOnlyRootFilesystem: true
529> ```
530
531Container 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/).
532
533#### **volumes** ~ `array`
534> Default value:
535> ```yaml
536> []
537> ```
538
539Additional volumes to add to the cert-manager controller pod.
540#### **volumeMounts** ~ `array`
541> Default value:
542> ```yaml
543> []
544> ```
545
546Additional volume mounts to add to the cert-manager controller container.
547#### **deploymentAnnotations** ~ `object`
548
549Optional additional annotations to add to the controller Deployment.
550
551#### **podAnnotations** ~ `object`
552
553Optional additional annotations to add to the controller Pods.
554
555#### **podLabels** ~ `object`
556> Default value:
557> ```yaml
558> {}
559> ```
560
561Optional additional labels to add to the controller Pods.
562#### **serviceAnnotations** ~ `object`
563
564Optional annotations to add to the controller Service.
565
566#### **serviceLabels** ~ `object`
567
568Optional additional labels to add to the controller Service.
569
570#### **serviceIPFamilyPolicy** ~ `string`
571
572Optionally 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).
573
574#### **serviceIPFamilies** ~ `array`
575
576Optionally 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.
577
578#### **podDnsPolicy** ~ `string`
579
580Pod DNS policy.
581For more information, see [Pod's DNS Policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy).
582
583#### **podDnsConfig** ~ `object`
584
585Pod 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).
586
587#### **hostAliases** ~ `array`
588> Default value:
589> ```yaml
590> []
591> ```
592
593Optional hostAliases for cert-manager-controller pods. May be useful when performing ACME DNS-01 self checks.
594#### **nodeSelector** ~ `object`
595> Default value:
596> ```yaml
597> kubernetes.io/os: linux
598> ```
599
600The 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/).
601
602This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
603
604#### **ingressShim.defaultIssuerName** ~ `string`
605
606Optional default issuer to use for ingress resources.
607
608#### **ingressShim.defaultIssuerKind** ~ `string`
609
610Optional default issuer kind to use for ingress resources.
611
612#### **ingressShim.defaultIssuerGroup** ~ `string`
613
614Optional default issuer group to use for ingress resources.
615
616#### **http_proxy** ~ `string`
617
618Configures the HTTP_PROXY environment variable where a HTTP proxy is required.
619
620#### **https_proxy** ~ `string`
621
622Configures the HTTPS_PROXY environment variable where a HTTP proxy is required.
623
624#### **no_proxy** ~ `string`
625
626Configures the NO_PROXY environment variable where a HTTP proxy is required, but certain domains should be excluded.
627
628#### **affinity** ~ `object`
629> Default value:
630> ```yaml
631> {}
632> ```
633
634A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
635
636For example:
637
638```yaml
639affinity:
640 nodeAffinity:
641 requiredDuringSchedulingIgnoredDuringExecution:
642 nodeSelectorTerms:
643 - matchExpressions:
644 - key: foo.bar.com/role
645 operator: In
646 values:
647 - master
648```
649#### **tolerations** ~ `array`
650> Default value:
651> ```yaml
652> []
653> ```
654
655A 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).
656
657For example:
658
659```yaml
660tolerations:
661- key: foo.bar.com/role
662 operator: Equal
663 value: master
664 effect: NoSchedule
665```
666#### **topologySpreadConstraints** ~ `array`
667> Default value:
668> ```yaml
669> []
670> ```
671
672A 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
673
674For example:
675
676```yaml
677topologySpreadConstraints:
678- maxSkew: 2
679 topologyKey: topology.kubernetes.io/zone
680 whenUnsatisfiable: ScheduleAnyway
681 labelSelector:
682 matchLabels:
683 app.kubernetes.io/instance: cert-manager
684 app.kubernetes.io/component: controller
685```
686#### **livenessProbe** ~ `object`
687> Default value:
688> ```yaml
689> enabled: true
690> failureThreshold: 8
691> initialDelaySeconds: 10
692> periodSeconds: 10
693> successThreshold: 1
694> timeoutSeconds: 15
695> ```
696
697LivenessProbe settings for the controller container of the controller Pod.
698
699This 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
700[Kubernetes GitHub repository](https://github.com/kubernetes/kubernetes/blob/806b30170c61a38fedd54cc9ede4cd6275a1ad3b/cmd/kubeadm/app/util/staticpod/utils.go#L241-L245)
701
702#### **enableServiceLinks** ~ `bool`
703> Default value:
704> ```yaml
705> false
706> ```
707
708enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
709### Prometheus
710
711#### **prometheus.enabled** ~ `bool`
712> Default value:
713> ```yaml
714> true
715> ```
716
717Enable 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
718ServiceMonitor resource.
719Otherwise, '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.
720#### **prometheus.servicemonitor.enabled** ~ `bool`
721> Default value:
722> ```yaml
723> false
724> ```
725
726Create a ServiceMonitor to add cert-manager to Prometheus.
727#### **prometheus.servicemonitor.namespace** ~ `string`
728
729The namespace that the service monitor should live in, defaults to the cert-manager namespace.
730
731#### **prometheus.servicemonitor.prometheusInstance** ~ `string`
732> Default value:
733> ```yaml
734> default
735> ```
736
737Specifies the `prometheus` label on the created ServiceMonitor. This is used when different Prometheus instances have label selectors matching different ServiceMonitors.
738#### **prometheus.servicemonitor.targetPort** ~ `string,integer`
739> Default value:
740> ```yaml
741> http-metrics
742> ```
743
744The target port to set on the ServiceMonitor. This must match the port that the cert-manager controller is listening on for metrics.
745
746#### **prometheus.servicemonitor.path** ~ `string`
747> Default value:
748> ```yaml
749> /metrics
750> ```
751
752The path to scrape for metrics.
753#### **prometheus.servicemonitor.interval** ~ `string`
754> Default value:
755> ```yaml
756> 60s
757> ```
758
759The interval to scrape metrics.
760#### **prometheus.servicemonitor.scrapeTimeout** ~ `string`
761> Default value:
762> ```yaml
763> 30s
764> ```
765
766The timeout before a metrics scrape fails.
767#### **prometheus.servicemonitor.labels** ~ `object`
768> Default value:
769> ```yaml
770> {}
771> ```
772
773Additional labels to add to the ServiceMonitor.
774#### **prometheus.servicemonitor.annotations** ~ `object`
775> Default value:
776> ```yaml
777> {}
778> ```
779
780Additional annotations to add to the ServiceMonitor.
781#### **prometheus.servicemonitor.honorLabels** ~ `bool`
782> Default value:
783> ```yaml
784> false
785> ```
786
787Keep labels from scraped data, overriding server-side labels.
788#### **prometheus.servicemonitor.endpointAdditionalProperties** ~ `object`
789> Default value:
790> ```yaml
791> {}
792> ```
793
794EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
795
796For example:
797
798```yaml
799endpointAdditionalProperties:
800 relabelings:
801 - action: replace
802 sourceLabels:
803 - __meta_kubernetes_pod_node_name
804 targetLabel: instance
805```
806
807
808
809#### **prometheus.podmonitor.enabled** ~ `bool`
810> Default value:
811> ```yaml
812> false
813> ```
814
815Create a PodMonitor to add cert-manager to Prometheus.
816#### **prometheus.podmonitor.namespace** ~ `string`
817
818The namespace that the pod monitor should live in, defaults to the cert-manager namespace.
819
820#### **prometheus.podmonitor.prometheusInstance** ~ `string`
821> Default value:
822> ```yaml
823> default
824> ```
825
826Specifies the `prometheus` label on the created PodMonitor. This is used when different Prometheus instances have label selectors matching different PodMonitors.
827#### **prometheus.podmonitor.path** ~ `string`
828> Default value:
829> ```yaml
830> /metrics
831> ```
832
833The path to scrape for metrics.
834#### **prometheus.podmonitor.interval** ~ `string`
835> Default value:
836> ```yaml
837> 60s
838> ```
839
840The interval to scrape metrics.
841#### **prometheus.podmonitor.scrapeTimeout** ~ `string`
842> Default value:
843> ```yaml
844> 30s
845> ```
846
847The timeout before a metrics scrape fails.
848#### **prometheus.podmonitor.labels** ~ `object`
849> Default value:
850> ```yaml
851> {}
852> ```
853
854Additional labels to add to the PodMonitor.
855#### **prometheus.podmonitor.annotations** ~ `object`
856> Default value:
857> ```yaml
858> {}
859> ```
860
861Additional annotations to add to the PodMonitor.
862#### **prometheus.podmonitor.honorLabels** ~ `bool`
863> Default value:
864> ```yaml
865> false
866> ```
867
868Keep labels from scraped data, overriding server-side labels.
869#### **prometheus.podmonitor.endpointAdditionalProperties** ~ `object`
870> Default value:
871> ```yaml
872> {}
873> ```
874
875EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.
876
877For example:
878
879```yaml
880endpointAdditionalProperties:
881 relabelings:
882 - action: replace
883 sourceLabels:
884 - __meta_kubernetes_pod_node_name
885 targetLabel: instance
886 # Configure the PodMonitor for TLS connections
887 # See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
888 scheme: https
889 tlsConfig:
890 serverName: cert-manager-metrics
891 ca:
892 secret:
893 name: cert-manager-metrics-ca
894 key: "tls.crt"
895```
896
897
898
899### Webhook
900
901#### **webhook.replicaCount** ~ `number`
902> Default value:
903> ```yaml
904> 1
905> ```
906
907Number of replicas of the cert-manager webhook to run.
908
909The default is 1, but in production set this to 2 or 3 to provide high availability.
910
911If `replicas > 1`, consider setting `webhook.podDisruptionBudget.enabled=true`.
912#### **webhook.timeoutSeconds** ~ `number`
913> Default value:
914> ```yaml
915> 30
916> ```
917
918The 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
919[Validating webhook configuration v1](https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-webhook-configuration-v1/).
920
921The 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.
922#### **webhook.config** ~ `object`
923> Default value:
924> ```yaml
925> {}
926> ```
927
928This is used to configure options for the webhook pod. This allows setting options that would usually be provided using flags.
929
930If `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.
931
932For example:
933
934```yaml
935apiVersion: webhook.config.cert-manager.io/v1alpha1
936kind: WebhookConfiguration
937# The port that the webhook listens on for requests.
938# In GKE private clusters, by default Kubernetes apiservers are allowed to
939# talk to the cluster nodes only on 443 and 10250. Configuring
940# securePort: 10250 therefore will work out-of-the-box without needing to add firewall
941# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers < 1000.
942# This should be uncommented and set as a default by the chart once
943# the apiVersion of WebhookConfiguration graduates beyond v1alpha1.
944securePort: 10250
945# Configure the metrics server for TLS
946# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
947metricsTLSConfig:
948 dynamic:
949 secretNamespace: "cert-manager"
950 secretName: "cert-manager-metrics-ca"
951 dnsNames:
952 - cert-manager-metrics
953```
954#### **webhook.strategy** ~ `object`
955> Default value:
956> ```yaml
957> {}
958> ```
959
960The update strategy for the cert-manager webhook deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy)
961
962For example:
963
964```yaml
965strategy:
966 type: RollingUpdate
967 rollingUpdate:
968 maxSurge: 0
969 maxUnavailable: 1
970```
971#### **webhook.securityContext** ~ `object`
972> Default value:
973> ```yaml
974> runAsNonRoot: true
975> seccompProfile:
976> type: RuntimeDefault
977> ```
978
979Pod 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/).
980
981#### **webhook.containerSecurityContext** ~ `object`
982> Default value:
983> ```yaml
984> allowPrivilegeEscalation: false
985> capabilities:
986> drop:
987> - ALL
988> readOnlyRootFilesystem: true
989> ```
990
991Container 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/).
992
993#### **webhook.podDisruptionBudget.enabled** ~ `bool`
994> Default value:
995> ```yaml
996> false
997> ```
998
999Enable or disable the PodDisruptionBudget resource.
1000
1001This 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
1002Pod is currently running.
1003#### **webhook.podDisruptionBudget.minAvailable** ~ `unknown`
1004
1005This 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%).
1006It cannot be used if `maxUnavailable` is set.
1007
1008
1009#### **webhook.podDisruptionBudget.maxUnavailable** ~ `unknown`
1010
1011This 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%).
1012It cannot be used if `minAvailable` is set.
1013
1014
1015#### **webhook.deploymentAnnotations** ~ `object`
1016
1017Optional additional annotations to add to the webhook Deployment.
1018
1019#### **webhook.podAnnotations** ~ `object`
1020
1021Optional additional annotations to add to the webhook Pods.
1022
1023#### **webhook.serviceAnnotations** ~ `object`
1024
1025Optional additional annotations to add to the webhook Service.
1026
1027#### **webhook.mutatingWebhookConfigurationAnnotations** ~ `object`
1028
1029Optional additional annotations to add to the webhook MutatingWebhookConfiguration.
1030
1031#### **webhook.validatingWebhookConfigurationAnnotations** ~ `object`
1032
1033Optional additional annotations to add to the webhook ValidatingWebhookConfiguration.
1034
1035#### **webhook.validatingWebhookConfiguration.namespaceSelector** ~ `object`
1036> Default value:
1037> ```yaml
1038> matchExpressions:
1039> - key: cert-manager.io/disable-validation
1040> operator: NotIn
1041> values:
1042> - "true"
1043> ```
1044
1045Configure spec.namespaceSelector for validating webhooks.
1046
1047#### **webhook.mutatingWebhookConfiguration.namespaceSelector** ~ `object`
1048> Default value:
1049> ```yaml
1050> {}
1051> ```
1052
1053Configure spec.namespaceSelector for mutating webhooks.
1054
1055#### **webhook.extraArgs** ~ `array`
1056> Default value:
1057> ```yaml
1058> []
1059> ```
1060
1061Additional 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`.
1062#### **webhook.extraEnv** ~ `array`
1063> Default value:
1064> ```yaml
1065> []
1066> ```
1067
1068Additional environment variables to pass to cert-manager webhook binary.
1069For example:
1070
1071```yaml
1072extraEnv:
1073- name: SOME_VAR
1074 value: 'some value'
1075```
1076#### **webhook.featureGates** ~ `string`
1077> Default value:
1078> ```yaml
1079> ""
1080> ```
1081
1082Comma separated list of feature gates that should be enabled on the webhook pod.
1083#### **webhook.resources** ~ `object`
1084> Default value:
1085> ```yaml
1086> {}
1087> ```
1088
1089Resources to provide to the cert-manager webhook pod.
1090
1091For example:
1092
1093```yaml
1094requests:
1095 cpu: 10m
1096 memory: 32Mi
1097```
1098
1099For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1100#### **webhook.livenessProbe** ~ `object`
1101> Default value:
1102> ```yaml
1103> failureThreshold: 3
1104> initialDelaySeconds: 60
1105> periodSeconds: 10
1106> successThreshold: 1
1107> timeoutSeconds: 1
1108> ```
1109
1110Liveness probe values.
1111For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1112
1113#### **webhook.readinessProbe** ~ `object`
1114> Default value:
1115> ```yaml
1116> failureThreshold: 3
1117> initialDelaySeconds: 5
1118> periodSeconds: 5
1119> successThreshold: 1
1120> timeoutSeconds: 1
1121> ```
1122
1123Readiness probe values.
1124For more information, see [Container probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
1125
1126#### **webhook.nodeSelector** ~ `object`
1127> Default value:
1128> ```yaml
1129> kubernetes.io/os: linux
1130> ```
1131
1132The 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/).
1133
1134This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1135
1136#### **webhook.affinity** ~ `object`
1137> Default value:
1138> ```yaml
1139> {}
1140> ```
1141
1142A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1143
1144For example:
1145
1146```yaml
1147affinity:
1148 nodeAffinity:
1149 requiredDuringSchedulingIgnoredDuringExecution:
1150 nodeSelectorTerms:
1151 - matchExpressions:
1152 - key: foo.bar.com/role
1153 operator: In
1154 values:
1155 - master
1156```
1157#### **webhook.tolerations** ~ `array`
1158> Default value:
1159> ```yaml
1160> []
1161> ```
1162
1163A 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).
1164
1165For example:
1166
1167```yaml
1168tolerations:
1169- key: foo.bar.com/role
1170 operator: Equal
1171 value: master
1172 effect: NoSchedule
1173```
1174#### **webhook.topologySpreadConstraints** ~ `array`
1175> Default value:
1176> ```yaml
1177> []
1178> ```
1179
1180A 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).
1181
1182For example:
1183
1184```yaml
1185topologySpreadConstraints:
1186- maxSkew: 2
1187 topologyKey: topology.kubernetes.io/zone
1188 whenUnsatisfiable: ScheduleAnyway
1189 labelSelector:
1190 matchLabels:
1191 app.kubernetes.io/instance: cert-manager
1192 app.kubernetes.io/component: controller
1193```
1194#### **webhook.podLabels** ~ `object`
1195> Default value:
1196> ```yaml
1197> {}
1198> ```
1199
1200Optional additional labels to add to the Webhook Pods.
1201#### **webhook.serviceLabels** ~ `object`
1202> Default value:
1203> ```yaml
1204> {}
1205> ```
1206
1207Optional additional labels to add to the Webhook Service.
1208#### **webhook.serviceIPFamilyPolicy** ~ `string`
1209> Default value:
1210> ```yaml
1211> ""
1212> ```
1213
1214Optionally 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).
1215#### **webhook.serviceIPFamilies** ~ `array`
1216> Default value:
1217> ```yaml
1218> []
1219> ```
1220
1221Optionally 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.
1222#### **webhook.image.registry** ~ `string`
1223
1224The container registry to pull the webhook image from.
1225
1226#### **webhook.image.repository** ~ `string`
1227> Default value:
1228> ```yaml
1229> quay.io/jetstack/cert-manager-webhook
1230> ```
1231
1232The container image for the cert-manager webhook
1233
1234#### **webhook.image.tag** ~ `string`
1235
1236Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1237
1238#### **webhook.image.digest** ~ `string`
1239
1240Setting a digest will override any tag
1241
1242#### **webhook.image.pullPolicy** ~ `string`
1243> Default value:
1244> ```yaml
1245> IfNotPresent
1246> ```
1247
1248Kubernetes imagePullPolicy on Deployment.
1249#### **webhook.serviceAccount.create** ~ `bool`
1250> Default value:
1251> ```yaml
1252> true
1253> ```
1254
1255Specifies whether a service account should be created.
1256#### **webhook.serviceAccount.name** ~ `string`
1257
1258The name of the service account to use.
1259If not set and create is true, a name is generated using the fullname template.
1260
1261#### **webhook.serviceAccount.annotations** ~ `object`
1262
1263Optional additional annotations to add to the webhook's Service Account.
1264
1265#### **webhook.serviceAccount.labels** ~ `object`
1266
1267Optional additional labels to add to the webhook's Service Account.
1268
1269#### **webhook.serviceAccount.automountServiceAccountToken** ~ `bool`
1270> Default value:
1271> ```yaml
1272> true
1273> ```
1274
1275Automount API credentials for a Service Account.
1276#### **webhook.automountServiceAccountToken** ~ `bool`
1277
1278Automounting API credentials for a particular pod.
1279
1280#### **webhook.securePort** ~ `number`
1281> Default value:
1282> ```yaml
1283> 10250
1284> ```
1285
1286The 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.
1287#### **webhook.hostNetwork** ~ `bool`
1288> Default value:
1289> ```yaml
1290> false
1291> ```
1292
1293Specifies if the webhook should be started in hostNetwork mode.
1294
1295Required 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
1296
1297Since 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.
1298#### **webhook.serviceType** ~ `string`
1299> Default value:
1300> ```yaml
1301> ClusterIP
1302> ```
1303
1304Specifies 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.
1305#### **webhook.loadBalancerIP** ~ `string`
1306
1307Specify the load balancer IP for the created service.
1308
1309#### **webhook.url** ~ `object`
1310> Default value:
1311> ```yaml
1312> {}
1313> ```
1314
1315Overrides the mutating webhook and validating webhook so they reach the webhook service using the `url` field instead of a service.
1316#### **webhook.networkPolicy.enabled** ~ `bool`
1317> Default value:
1318> ```yaml
1319> false
1320> ```
1321
1322Create network policies for the webhooks.
1323#### **webhook.networkPolicy.ingress** ~ `array`
1324> Default value:
1325> ```yaml
1326> - from:
1327> - ipBlock:
1328> cidr: 0.0.0.0/0
1329> - ipBlock:
1330> cidr: ::/0
1331> ```
1332
1333Ingress rule for the webhook network policy. By default, it allows all inbound traffic.
1334
1335#### **webhook.networkPolicy.egress** ~ `array`
1336> Default value:
1337> ```yaml
1338> - ports:
1339> - port: 80
1340> protocol: TCP
1341> - port: 443
1342> protocol: TCP
1343> - port: 53
1344> protocol: TCP
1345> - port: 53
1346> protocol: UDP
1347> - port: 6443
1348> protocol: TCP
1349> to:
1350> - ipBlock:
1351> cidr: 0.0.0.0/0
1352> - ipBlock:
1353> cidr: ::/0
1354> ```
1355
1356Egress rule for the webhook network policy. By default, it allows all outbound traffic to ports 80 and 443, as well as DNS ports.
1357
1358#### **webhook.volumes** ~ `array`
1359> Default value:
1360> ```yaml
1361> []
1362> ```
1363
1364Additional volumes to add to the cert-manager controller pod.
1365#### **webhook.volumeMounts** ~ `array`
1366> Default value:
1367> ```yaml
1368> []
1369> ```
1370
1371Additional volume mounts to add to the cert-manager controller container.
1372#### **webhook.enableServiceLinks** ~ `bool`
1373> Default value:
1374> ```yaml
1375> false
1376> ```
1377
1378enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
1379### CA Injector
1380
1381#### **cainjector.enabled** ~ `bool`
1382> Default value:
1383> ```yaml
1384> true
1385> ```
1386
1387Create the CA Injector deployment
1388#### **cainjector.replicaCount** ~ `number`
1389> Default value:
1390> ```yaml
1391> 1
1392> ```
1393
1394The number of replicas of the cert-manager cainjector to run.
1395
1396The default is 1, but in production set this to 2 or 3 to provide high availability.
1397
1398If `replicas > 1`, consider setting `cainjector.podDisruptionBudget.enabled=true`.
1399
1400Note that cert-manager uses leader election to ensure that there can only be a single instance active at a time.
1401#### **cainjector.config** ~ `object`
1402> Default value:
1403> ```yaml
1404> {}
1405> ```
1406
1407This is used to configure options for the cainjector pod. It allows setting options that are usually provided via flags.
1408
1409If `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.
1410
1411For example:
1412
1413```yaml
1414apiVersion: cainjector.config.cert-manager.io/v1alpha1
1415kind: CAInjectorConfiguration
1416logging:
1417 verbosity: 2
1418 format: text
1419leaderElectionConfig:
1420 namespace: kube-system
1421# Configure the metrics server for TLS
1422# See https://cert-manager.io/docs/devops-tips/prometheus-metrics/#tls
1423metricsTLSConfig:
1424 dynamic:
1425 secretNamespace: "cert-manager"
1426 secretName: "cert-manager-metrics-ca"
1427 dnsNames:
1428 - cert-manager-metrics
1429```
1430#### **cainjector.strategy** ~ `object`
1431> Default value:
1432> ```yaml
1433> {}
1434> ```
1435
1436Deployment update strategy for the cert-manager cainjector deployment. For more information, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
1437
1438For example:
1439
1440```yaml
1441strategy:
1442 type: RollingUpdate
1443 rollingUpdate:
1444 maxSurge: 0
1445 maxUnavailable: 1
1446```
1447#### **cainjector.securityContext** ~ `object`
1448> Default value:
1449> ```yaml
1450> runAsNonRoot: true
1451> seccompProfile:
1452> type: RuntimeDefault
1453> ```
1454
1455Pod 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/).
1456
1457#### **cainjector.containerSecurityContext** ~ `object`
1458> Default value:
1459> ```yaml
1460> allowPrivilegeEscalation: false
1461> capabilities:
1462> drop:
1463> - ALL
1464> readOnlyRootFilesystem: true
1465> ```
1466
1467Container 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/).
1468
1469#### **cainjector.podDisruptionBudget.enabled** ~ `bool`
1470> Default value:
1471> ```yaml
1472> false
1473> ```
1474
1475Enable or disable the PodDisruptionBudget resource.
1476
1477This 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
1478Pod is currently running.
1479#### **cainjector.podDisruptionBudget.minAvailable** ~ `unknown`
1480
1481`minAvailable` configures the minimum available pods for disruptions. It can either be set to
1482an integer (e.g., 1) or a percentage value (e.g., 25%).
1483Cannot be used if `maxUnavailable` is set.
1484
1485
1486#### **cainjector.podDisruptionBudget.maxUnavailable** ~ `unknown`
1487
1488`maxUnavailable` configures the maximum unavailable pods for disruptions. It can either be set to
1489an integer (e.g., 1) or a percentage value (e.g., 25%).
1490Cannot be used if `minAvailable` is set.
1491
1492
1493#### **cainjector.deploymentAnnotations** ~ `object`
1494
1495Optional additional annotations to add to the cainjector Deployment.
1496
1497#### **cainjector.podAnnotations** ~ `object`
1498
1499Optional additional annotations to add to the cainjector Pods.
1500
1501#### **cainjector.serviceAnnotations** ~ `object`
1502
1503Optional additional annotations to add to the cainjector metrics Service.
1504
1505#### **cainjector.extraArgs** ~ `array`
1506> Default value:
1507> ```yaml
1508> []
1509> ```
1510
1511Additional 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`.
1512#### **cainjector.extraEnv** ~ `array`
1513> Default value:
1514> ```yaml
1515> []
1516> ```
1517
1518Additional environment variables to pass to cert-manager cainjector binary.
1519For example:
1520
1521```yaml
1522extraEnv:
1523- name: SOME_VAR
1524 value: 'some value'
1525```
1526#### **cainjector.featureGates** ~ `string`
1527> Default value:
1528> ```yaml
1529> ""
1530> ```
1531
1532Comma separated list of feature gates that should be enabled on the cainjector pod.
1533#### **cainjector.resources** ~ `object`
1534> Default value:
1535> ```yaml
1536> {}
1537> ```
1538
1539Resources to provide to the cert-manager cainjector pod.
1540
1541For example:
1542
1543```yaml
1544requests:
1545 cpu: 10m
1546 memory: 32Mi
1547```
1548
1549For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1550#### **cainjector.nodeSelector** ~ `object`
1551> Default value:
1552> ```yaml
1553> kubernetes.io/os: linux
1554> ```
1555
1556The 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/).
1557
1558This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1559
1560#### **cainjector.affinity** ~ `object`
1561> Default value:
1562> ```yaml
1563> {}
1564> ```
1565
1566A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1567
1568For example:
1569
1570```yaml
1571affinity:
1572 nodeAffinity:
1573 requiredDuringSchedulingIgnoredDuringExecution:
1574 nodeSelectorTerms:
1575 - matchExpressions:
1576 - key: foo.bar.com/role
1577 operator: In
1578 values:
1579 - master
1580```
1581#### **cainjector.tolerations** ~ `array`
1582> Default value:
1583> ```yaml
1584> []
1585> ```
1586
1587A 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).
1588
1589For example:
1590
1591```yaml
1592tolerations:
1593- key: foo.bar.com/role
1594 operator: Equal
1595 value: master
1596 effect: NoSchedule
1597```
1598#### **cainjector.topologySpreadConstraints** ~ `array`
1599> Default value:
1600> ```yaml
1601> []
1602> ```
1603
1604A 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).
1605
1606For example:
1607
1608```yaml
1609topologySpreadConstraints:
1610- maxSkew: 2
1611 topologyKey: topology.kubernetes.io/zone
1612 whenUnsatisfiable: ScheduleAnyway
1613 labelSelector:
1614 matchLabels:
1615 app.kubernetes.io/instance: cert-manager
1616 app.kubernetes.io/component: controller
1617```
1618#### **cainjector.podLabels** ~ `object`
1619> Default value:
1620> ```yaml
1621> {}
1622> ```
1623
1624Optional additional labels to add to the CA Injector Pods.
1625#### **cainjector.serviceLabels** ~ `object`
1626> Default value:
1627> ```yaml
1628> {}
1629> ```
1630
1631Optional additional labels to add to the CA Injector metrics Service.
1632#### **cainjector.image.registry** ~ `string`
1633
1634The container registry to pull the cainjector image from.
1635
1636#### **cainjector.image.repository** ~ `string`
1637> Default value:
1638> ```yaml
1639> quay.io/jetstack/cert-manager-cainjector
1640> ```
1641
1642The container image for the cert-manager cainjector
1643
1644#### **cainjector.image.tag** ~ `string`
1645
1646Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion will be used.
1647
1648#### **cainjector.image.digest** ~ `string`
1649
1650Setting a digest will override any tag.
1651
1652#### **cainjector.image.pullPolicy** ~ `string`
1653> Default value:
1654> ```yaml
1655> IfNotPresent
1656> ```
1657
1658Kubernetes imagePullPolicy on Deployment.
1659#### **cainjector.serviceAccount.create** ~ `bool`
1660> Default value:
1661> ```yaml
1662> true
1663> ```
1664
1665Specifies whether a service account should be created.
1666#### **cainjector.serviceAccount.name** ~ `string`
1667
1668The name of the service account to use.
1669If not set and create is true, a name is generated using the fullname template
1670
1671#### **cainjector.serviceAccount.annotations** ~ `object`
1672
1673Optional additional annotations to add to the cainjector's Service Account.
1674
1675#### **cainjector.serviceAccount.labels** ~ `object`
1676
1677Optional additional labels to add to the cainjector's Service Account.
1678
1679#### **cainjector.serviceAccount.automountServiceAccountToken** ~ `bool`
1680> Default value:
1681> ```yaml
1682> true
1683> ```
1684
1685Automount API credentials for a Service Account.
1686#### **cainjector.automountServiceAccountToken** ~ `bool`
1687
1688Automounting API credentials for a particular pod.
1689
1690#### **cainjector.volumes** ~ `array`
1691> Default value:
1692> ```yaml
1693> []
1694> ```
1695
1696Additional volumes to add to the cert-manager controller pod.
1697#### **cainjector.volumeMounts** ~ `array`
1698> Default value:
1699> ```yaml
1700> []
1701> ```
1702
1703Additional volume mounts to add to the cert-manager controller container.
1704#### **cainjector.enableServiceLinks** ~ `bool`
1705> Default value:
1706> ```yaml
1707> false
1708> ```
1709
1710enableServiceLinks indicates whether information about services should be injected into the pod's environment variables, matching the syntax of Docker links.
1711### ACME Solver
1712
1713#### **acmesolver.image.registry** ~ `string`
1714
1715The container registry to pull the acmesolver image from.
1716
1717#### **acmesolver.image.repository** ~ `string`
1718> Default value:
1719> ```yaml
1720> quay.io/jetstack/cert-manager-acmesolver
1721> ```
1722
1723The container image for the cert-manager acmesolver.
1724
1725#### **acmesolver.image.tag** ~ `string`
1726
1727Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
1728
1729#### **acmesolver.image.digest** ~ `string`
1730
1731Setting a digest will override any tag.
1732
1733#### **acmesolver.image.pullPolicy** ~ `string`
1734> Default value:
1735> ```yaml
1736> IfNotPresent
1737> ```
1738
1739Kubernetes imagePullPolicy on Deployment.
1740### Startup API Check
1741
1742
1743This 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).
1744#### **startupapicheck.enabled** ~ `bool`
1745> Default value:
1746> ```yaml
1747> true
1748> ```
1749
1750Enables the startup api check.
1751#### **startupapicheck.securityContext** ~ `object`
1752> Default value:
1753> ```yaml
1754> runAsNonRoot: true
1755> seccompProfile:
1756> type: RuntimeDefault
1757> ```
1758
1759Pod 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/).
1760
1761#### **startupapicheck.containerSecurityContext** ~ `object`
1762> Default value:
1763> ```yaml
1764> allowPrivilegeEscalation: false
1765> capabilities:
1766> drop:
1767> - ALL
1768> readOnlyRootFilesystem: true
1769> ```
1770
1771Container 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/).
1772
1773#### **startupapicheck.timeout** ~ `string`
1774> Default value:
1775> ```yaml
1776> 1m
1777> ```
1778
1779Timeout for 'kubectl check api' command.
1780#### **startupapicheck.backoffLimit** ~ `number`
1781> Default value:
1782> ```yaml
1783> 4
1784> ```
1785
1786Job backoffLimit
1787#### **startupapicheck.jobAnnotations** ~ `object`
1788> Default value:
1789> ```yaml
1790> helm.sh/hook: post-install
1791> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
1792> helm.sh/hook-weight: "1"
1793> ```
1794
1795Optional additional annotations to add to the startupapicheck Job.
1796
1797#### **startupapicheck.podAnnotations** ~ `object`
1798
1799Optional additional annotations to add to the startupapicheck Pods.
1800
1801#### **startupapicheck.extraArgs** ~ `array`
1802> Default value:
1803> ```yaml
1804> - -v
1805> ```
1806
1807Additional command line flags to pass to startupapicheck binary. To see all available flags run `docker run quay.io/jetstack/cert-manager-startupapicheck:<version> --help`.
1808
1809Verbose 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.
1810
1811#### **startupapicheck.extraEnv** ~ `array`
1812> Default value:
1813> ```yaml
1814> []
1815> ```
1816
1817Additional environment variables to pass to cert-manager startupapicheck binary.
1818For example:
1819
1820```yaml
1821extraEnv:
1822- name: SOME_VAR
1823 value: 'some value'
1824```
1825#### **startupapicheck.resources** ~ `object`
1826> Default value:
1827> ```yaml
1828> {}
1829> ```
1830
1831Resources to provide to the cert-manager controller pod.
1832
1833For example:
1834
1835```yaml
1836requests:
1837 cpu: 10m
1838 memory: 32Mi
1839```
1840
1841For more information, see [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
1842#### **startupapicheck.nodeSelector** ~ `object`
1843> Default value:
1844> ```yaml
1845> kubernetes.io/os: linux
1846> ```
1847
1848The 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/).
1849
1850This default ensures that Pods are only scheduled to Linux nodes. It prevents Pods being scheduled to Windows nodes in a mixed OS cluster.
1851
1852#### **startupapicheck.affinity** ~ `object`
1853> Default value:
1854> ```yaml
1855> {}
1856> ```
1857
1858A Kubernetes Affinity, if required. For more information, see [Affinity v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core).
1859For example:
1860
1861```yaml
1862affinity:
1863 nodeAffinity:
1864 requiredDuringSchedulingIgnoredDuringExecution:
1865 nodeSelectorTerms:
1866 - matchExpressions:
1867 - key: foo.bar.com/role
1868 operator: In
1869 values:
1870 - master
1871```
1872#### **startupapicheck.tolerations** ~ `array`
1873> Default value:
1874> ```yaml
1875> []
1876> ```
1877
1878A 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).
1879
1880For example:
1881
1882```yaml
1883tolerations:
1884- key: foo.bar.com/role
1885 operator: Equal
1886 value: master
1887 effect: NoSchedule
1888```
1889#### **startupapicheck.podLabels** ~ `object`
1890> Default value:
1891> ```yaml
1892> {}
1893> ```
1894
1895Optional additional labels to add to the startupapicheck Pods.
1896#### **startupapicheck.image.registry** ~ `string`
1897
1898The container registry to pull the startupapicheck image from.
1899
1900#### **startupapicheck.image.repository** ~ `string`
1901> Default value:
1902> ```yaml
1903> quay.io/jetstack/cert-manager-startupapicheck
1904> ```
1905
1906The container image for the cert-manager startupapicheck.
1907
1908#### **startupapicheck.image.tag** ~ `string`
1909
1910Override the image tag to deploy by setting this variable. If no value is set, the chart's appVersion is used.
1911
1912#### **startupapicheck.image.digest** ~ `string`
1913
1914Setting a digest will override any tag.
1915
1916#### **startupapicheck.image.pullPolicy** ~ `string`
1917> Default value:
1918> ```yaml
1919> IfNotPresent
1920> ```
1921
1922Kubernetes imagePullPolicy on Deployment.
1923#### **startupapicheck.rbac.annotations** ~ `object`
1924> Default value:
1925> ```yaml
1926> helm.sh/hook: post-install
1927> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
1928> helm.sh/hook-weight: "-5"
1929> ```
1930
1931annotations for the startup API Check job RBAC and PSP resources.
1932
1933#### **startupapicheck.automountServiceAccountToken** ~ `bool`
1934
1935Automounting API credentials for a particular pod.
1936
1937#### **startupapicheck.serviceAccount.create** ~ `bool`
1938> Default value:
1939> ```yaml
1940> true
1941> ```
1942
1943Specifies whether a service account should be created.
1944#### **startupapicheck.serviceAccount.name** ~ `string`
1945
1946The name of the service account to use.
1947If not set and create is true, a name is generated using the fullname template.
1948
1949#### **startupapicheck.serviceAccount.annotations** ~ `object`
1950> Default value:
1951> ```yaml
1952> helm.sh/hook: post-install
1953> helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
1954> helm.sh/hook-weight: "-5"
1955> ```
1956
1957Optional additional annotations to add to the Job's Service Account.
1958
1959#### **startupapicheck.serviceAccount.automountServiceAccountToken** ~ `bool`
1960> Default value:
1961> ```yaml
1962> true
1963> ```
1964
1965Automount API credentials for a Service Account.
1966
1967#### **startupapicheck.serviceAccount.labels** ~ `object`
1968
1969Optional additional labels to add to the startupapicheck's Service Account.
1970
1971#### **startupapicheck.volumes** ~ `array`
1972> Default value:
1973> ```yaml
1974> []
1975> ```
1976
1977Additional volumes to add to the cert-manager controller pod.
1978#### **startupapicheck.volumeMounts** ~ `array`
1979> Default value:
1980> ```yaml
1981> []
1982> ```
1983
1984Additional volume mounts to add to the cert-manager controller container.
1985#### **startupapicheck.enableServiceLinks** ~ `bool`
1986> Default value:
1987> ```yaml
1988> false
1989> ```
1990
1991enableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links.
1992#### **extraObjects** ~ `array`
1993> Default value:
1994> ```yaml
1995> []
1996> ```
1997
1998Create dynamic manifests via values.
1999
2000For example:
2001
2002```yaml
2003extraObjects:
2004 - |
2005 apiVersion: v1
2006 kind: ConfigMap
2007 metadata:
2008 name: '{{ template "cert-manager.fullname" . }}-extra-configmap'
2009```
2010
2011<!-- /AUTO-GENERATED -->
2012### Default Security Contexts
2013
2014The 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.
2015
2016Default pod-level securityContext:
2017```yaml
2018runAsNonRoot: true
2019seccompProfile:
2020 type: RuntimeDefault
2021```
2022
2023Default containerSecurityContext:
2024```yaml
2025allowPrivilegeEscalation: false
2026capabilities:
2027 drop:
2028 - ALL
2029```
2030
2031### Assigning Values
2032
2033Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
2034
2035Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
2036
2037```console
2038$ helm install my-release -f values.yaml .
2039```
2040> **Tip**: You can use the default [values.yaml](https://github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml)
2041
2042## Contributing
2043
2044This chart is maintained at [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager/tree/master/deploy/charts/cert-manager).