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