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