1# -- Partially override x509-certificate-exporter.fullname template (will prepend the release name)
3# -- Fully override x509-certificate-exporter.fullname template
5# -- Override the deployment namespace
9# items: {type: [object, string]}
11# -- Additional objects to deploy with the release
15# items: {type: [object, string]}
17# -- Same as `extraDeploy` but objects won't go through the templating engine
18extraDeployVerbatim: []
21# items: {type: object}
23# -- Specify docker-registry secret names as an array
26 # -- Exporter image registry. Empty string opts out of the registry prefix and lets the CRI fall back to its configured default (typically docker.io).
32 # -- Exporter image repository
33 repository: scratch-images/test-tmp/x509-certificate-exporter-fips
34 # -- Exporter image tag (defaults to Chart appVersion)
36 # -- Appended to the image tag to select a container flavor. Use `-busybox` for a shell-enabled image
38 # -- Exporter image digest. When set, takes precedence over `tag` (immutable reference)
39 digest: sha256:4c614542f017ca7538478a362663c1e10f837b352f46a95e3ad3854f7abc8a82
41 # enum: [Always, IfNotPresent, Never]
43 # -- Exporter image pull policy
44 pullPolicy: IfNotPresent
47 # -- kubectl image registry
49 # -- kubectl image repository
50 repository: scratch-images/test-tmp/kubectl-fips
51 # -- kubectl image tag. When set, takes precedence over the auto-detected cluster version.
53 # -- kubectl image digest. When set, takes precedence over `tag` (immutable reference)
54 digest: sha256:e6277609e7a52d8a60b59ec460b5011d04ca11c261f63f344b16e30c5b31e5db
56 # enum: [Always, IfNotPresent, Never]
58 # -- kubectl image pull policy
59 pullPolicy: IfNotPresent
62 # additionalProperties: {type: string}
64 # -- Annotations added to Helm hook Pods
68 # additionalProperties: {type: string}
70 # -- Additional labels added to Helm hook Pods
74 # additionalProperties: true
77 # -- ResourceRequirements for containers of Helm hooks
78 # @default -- see `values.yaml`
88 # additionalProperties: true
91 # -- PodSecurityContext for Pods of Helm hooks
92 # @default -- see `values.yaml`
99 # additionalProperties: true
102 # -- SecurityContext for containers of Helm hooks
103 # @default -- see `values.yaml`
107 readOnlyRootFilesystem: true
108 allowPrivilegeEscalation: false
112# -- Enable additional metrics to report per-certificate errors ; helps with identifying the origin of read errors without having to look at exporter logs, at the expense of additional storage on Prometheus
113exposePerCertificateErrorMetrics: false
114# -- Enable additional metrics with relative durations instead of absolute timestamps ; not recommended with Prometheus
115exposeRelativeMetrics: false
116# -- Expose `x509_cert_not_before` (Unix timestamp of the certificate's NotBefore). Off by default — most users only alert on expiry; enable if you specifically need to detect "issued in the future" misconfigurations or clock skew.
117exposeNotBeforeMetric: false
118# -- Expose `x509_cert_expired` (1 if the certificate is expired, 0 otherwise). On by default ; turn off to halve the per-cert series count if you only alert on `x509_cert_not_after - time()`.
119exposeExpiredMetric: true
120# -- Expose self-introspection metrics for debugging the exporter itself (`x509_parse_duration_seconds`, `x509_kube_request_duration_seconds`, `x509_kube_informer_scope`, `x509_informer_queue_depth`). Off by default ; enable when you actually need to look inside.
121exposeDiagnosticMetrics: false
123# type: [array, 'null']
124# items: {type: string}
126# -- (list) Restrict metric labels to this list if set. **Warning** : use with caution as reducing cardinality may yield metrics collisions and force the exporter to ignore certificates. This will also degrade the usability of the Grafana dashboard. This list should always include at least `filepath`, `secret_namespace` and `secret_name`. Also `subject_CN` is highly recommended for when a file contains multiple certificates.
127metricLabelsFilterList: null
129 # -- Should the Grafana dashboard be deployed as a ConfigMap (requires Grafana sidecar)
130 createDashboard: false
131 # -- ConfigMap label name the Grafana sidecar is looking for
132 sidecarLabel: grafana_dashboard
133 # -- ConfigMap label value the Grafana sidecar is looking for
134 sidecarLabelValue: "1"
137 # additionalProperties: {type: string}
139 # -- Annotations added to the Grafana dashboard ConfigMap (example in `values.yaml`)
141 # k8s-sidecar-target-directory: "/tmp/dashboards/Example"
144 # additionalProperties: {type: string}
146 # -- Additional labels added to the Grafana dashboard ConfigMap
149 # -- Should the TLS Secrets exporter be running
153 # additionalProperties: {type: string}
155 # -- Additional Deployment annotations
157 # -- Should debug messages be produced by the TLS Secrets exporter
163 # -- Desired number of TLS Secrets exporter Pods
168 # -- restartPolicy for Pods of the TLS Secrets exporter
169 restartPolicy: Always
172 # additionalProperties: true
174 # -- DeploymentStrategy for the TLS Secrets exporter
177 # type: [integer, 'null']
179 # -- (int) Number of old ReplicaSets to retain for rollback
180 revisionHistoryLimit:
183 # additionalProperties: true
186 # -- ResourceRequirements for containers of the TLS Secrets exporter
187 # @default -- see `values.yaml`
197 # additionalProperties: true
200 # -- Readiness probe definition for the secrets exporter (.httpGet cannot be changed)
201 # @default -- see `values.yaml`
203 initialDelaySeconds: 5
207 # additionalProperties: true
210 # -- Liveness probe definition for the secrets exporter (.httpGet cannot be changed)
211 # @default -- see `values.yaml`
213 initialDelaySeconds: 5
217 # additionalProperties: {type: string}
219 # -- Node selector for Pods of the TLS Secrets exporter
223 # items: {type: object}
225 # -- Tolerations for Pods of the TLS Secrets exporter
229 # additionalProperties: true
231 # -- Affinity for Pods of the TLS Secrets exporter
233 # -- PriorityClassName for Pods of the TLS Secrets exporter
234 priorityClassName: ""
237 # additionalProperties: {type: string}
239 # -- Additional labels added to Pods of the TLS Secrets exporter
243 # additionalProperties: {type: string}
245 # -- Annotations added to Pods of the TLS Secrets exporter
249 # additionalProperties: true
252 # -- PodSecurityContext for Pods of the TLS Secrets exporter
253 # @default -- see `values.yaml`
260 # additionalProperties: true
263 # -- SecurityContext for containers of the TLS Secrets exporter
264 # @default -- see `values.yaml`
268 readOnlyRootFilesystem: true
269 allowPrivilegeEscalation: false
275 # items: {type: object}
277 # -- Additional volumes added to Pods of the TLS Secrets exporter (combined with global `extraVolumes`)
281 # items: {type: object}
283 # -- Additional volume mounts added to Pod containers of the TLS Secrets exporter (combined with global `extraVolumeMounts`)
284 extraVolumeMounts: []
289 # additionalProperties: false
292 # type: {type: string, minLength: 1}
293 # key: {type: string}
296 # items: {type: string}
297 # format: {enum: [pem, pkcs12, der, jks]}
300 # additionalProperties: false
302 # passphrase: {type: string}
303 # passphraseKey: {type: string}
304 # passphraseFile: {type: string}
305 # passphraseSecretRef:
307 # additionalProperties: false
308 # required: [name, key]
310 # namespace: {type: string}
311 # name: {type: string}
312 # key: {type: string}
313 # tryEmptyPassphrase: {type: boolean}
316 # additionalProperties: false
318 # passphrase: {type: string}
319 # passphraseKey: {type: string}
320 # passphraseFile: {type: string}
321 # passphraseSecretRef:
323 # additionalProperties: false
324 # required: [name, key]
326 # namespace: {type: string}
327 # name: {type: string}
328 # key: {type: string}
329 # tryEmptyPassphrase: {type: boolean}
332 # - required: [keyPatterns]
334 # -- Which type of Secrets should be watched. Each entry takes either `key`
335 # (a single Secret data key — the matching regex `^<key>$` is built for
336 # you) or `keyPatterns` (a list of regexes, full control). Optional
337 # `format` is `pem` (default), `pkcs12`, `der`, or `jks` (Java KeyStore);
338 # `pkcs12` and `jks` blocks accept the same passphrase options:
339 # `passphrase`, `passphraseKey` (read passphrase from a sibling key in
340 # the same Secret), `passphraseFile`, `passphraseSecretRef` (read from a
341 # separate Secret, optionally in another namespace), `tryEmptyPassphrase`.
342 # @default -- see `values.yaml`
344 - type: kubernetes.io/tls
348 # items: {type: string}
350 # -- If the exporter should watch for certificates in ConfigMaps, just specify the keys it needs to watch. E.g.: `configMapKeys: ["tls.crt"]`
351 # @default -- see `values.yaml`
354 # type: [array, 'null']
355 # items: {type: string}
357 # -- Restrict the list of namespaces the TLS Secrets exporter should scan for certificates to watch (all namespaces if empty). Each entry is a shell-glob pattern (`*`, `?`, `[abc]`) or a literal name — e.g. `team-*` matches `team-alpha` and `team-beta`.
358 includeNamespaces: []
360 # type: [array, 'null']
361 # items: {type: string}
363 # -- Exclude namespaces from being scanned by the TLS Secrets exporter (evaluated after `includeNamespaces`). Same shell-glob syntax as `includeNamespaces`.
364 excludeNamespaces: []
366 # type: [array, 'null']
367 # items: {type: string}
369 # -- Only watch namespaces having these labels (all namespaces if empty). Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
370 includeNamespaceLabels: []
372 # type: [array, 'null']
373 # items: {type: string}
375 # -- Exclude namespaces having these labels. Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
376 excludeNamespaceLabels: []
378 # type: [array, 'null']
379 # items: {type: string}
381 # -- Only watch Secrets whose name matches one of these entries (all matching Secrets if empty). Each entry is a shell-glob pattern (`*`, `?`, `[abc]`) or a literal name — e.g. `tls-*` matches `tls-prod` and `tls-dev`.
384 # type: [array, 'null']
385 # items: {type: string}
387 # -- Exclude Secrets whose name matches one of these entries (evaluated after `includeSecrets`). Same shell-glob syntax as `includeSecrets`.
390 # type: [array, 'null']
391 # items: {type: string}
393 # -- Only watch ConfigMaps whose name matches one of these entries (all matching ConfigMaps if empty). Same shell-glob syntax as `includeSecrets`.
394 includeConfigMaps: []
396 # type: [array, 'null']
397 # items: {type: string}
399 # -- Exclude ConfigMaps whose name matches one of these entries (evaluated after `includeConfigMaps`). Same shell-glob syntax as `includeSecrets`.
400 excludeConfigMaps: []
402 # type: [array, 'null']
403 # items: {type: string}
405 # -- Only watch TLS Secrets having these labels (all secrets if empty). Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
408 # type: [array, 'null']
409 # items: {type: string}
411 # -- Exclude TLS Secrets having these labels. Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
414 # type: [array, 'null']
415 # items: {type: string}
417 # -- Expose selected labels from Kubernetes Secrets as Prometheus labels. **Beware of high-cardinality labels** (e.g. `pod-template-hash`, `controller-revision-hash`, build/git SHAs, timestamps, request IDs): each unique value adds a fresh series for every certificate metric, which can quickly explode the Prometheus index. Stick to slow-changing identifiers (app, team, environment, owner).
418 exposeSecretLabels: []
420 # type: [array, 'null']
421 # items: {type: string}
423 # -- Expose selected labels from Kubernetes ConfigMaps as Prometheus labels. Same caveat as `exposeSecretLabels` — keep the list to slow-changing identifiers and avoid high-cardinality values.
424 exposeConfigMapLabels: []
427 # items: {type: string}
429 # -- Additional arguments to append to the exporter command line. E.g.: `--watch-file="/extra-cert/tls.crt"`.
432 # -- Enable caching of Kubernetes objects to prevent scraping timeouts
438 # -- Maximum time an object can stay in cache unrefreshed (seconds) - it will be at least half of that
441 # -- Should requests to the Kubernetes API server be rate-limited
447 # -- Maximum rate of queries sent to the API server (per second)
453 # -- Burst bucket size for queries sent to the API server
459 # -- Page size used by the paginated initial LIST against the
460 # Kubernetes API. The exporter processes each page inline and
461 # releases it to the GC before fetching the next, so peak memory
462 # during sync is roughly proportional to this × average secret
463 # size. Default `50` is conservative enough to keep the pod under
464 # 100 Mi even on clusters with many large Helm release secrets;
465 # raise it for faster sync on smaller objects, lower it on
466 # memory-constrained pods. `0` keeps the built-in default.
470 # items: {type: object}
472 # -- Additional environment variables for containers
477 # -- Should the cluster-wide caBundle exporter be active. Watches inline `caBundle` PEM fields of admission resources (and other API discovery resources) cluster-wide and emits one series per (resource, webhook entry). Opt-in because it requires cluster-scoped get+list+watch on the corresponding API groups.
481 # additionalProperties: false
483 # -- Per-resource opt-in. Each true flag adds the corresponding rule to the ClusterRole and starts the matching informer. Toggle off the resource kinds you don't use to keep the RBAC scope minimal.
485 # -- Watch `MutatingWebhookConfiguration` resources (admissionregistration.k8s.io/v1).
487 # -- Watch `ValidatingWebhookConfiguration` resources (admissionregistration.k8s.io/v1).
489 # -- Watch `APIService` resources (apiregistration.k8s.io/v1) — surfaces caBundle expiry on aggregated APIs (metrics-server, prometheus-adapter, etc.).
491 # -- Watch `CustomResourceDefinition` resources with a conversion webhook (apiextensions.k8s.io/v1). CRDs with `conversion.strategy: None` are skipped silently — the vast majority — so enabling this is cheap.
494 # type: [array, 'null']
495 # items: {type: string}
497 # -- Only watch caBundle-bearing resources whose name matches one of these entries (all matching if empty). Each entry is a shell-glob pattern (`*`, `?`, `[abc]`) or a literal name.
500 # type: [array, 'null']
501 # items: {type: string}
503 # -- Exclude caBundle-bearing resources whose name matches one of these entries (evaluated after `includeNames`). Same shell-glob syntax as `includeNames`.
506 # type: [array, 'null']
507 # items: {type: string}
509 # -- Only watch caBundle-bearing resources having these labels (all if empty). Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
512 # type: [array, 'null']
513 # items: {type: string}
515 # -- Exclude caBundle-bearing resources having these labels. Items can be keys such as `my-label` or also require a value with syntax `my-label=my-value`.
518 # type: [array, 'null']
519 # items: {type: string}
521 # -- Expose selected labels from caBundle-bearing resources as Prometheus labels (prefix `cabundle_label_`). Same caveat as `exposeSecretLabels` — keep the list to slow-changing identifiers and avoid high-cardinality values.
526 # additionalProperties: {type: string}
528 # -- Additional DaemonSet annotations
530 # -- Should debug messages be produced by hostPath exporters (default for all hostPathsExporter.daemonSets)
532 # -- Skip symlinks when scanning files and directories. Does not apply to Kubernetes secrets.
534 # -- Polling interval at which the file source re-walks watched paths and re-parses changed files. Accepts a Go duration (e.g. `30s`, `5m`). Default is suited for slowly-rotated PKI; lower it for tests or fast-rotation flows.
535 refreshInterval: "300s"
539 # -- restartPolicy for Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
540 restartPolicy: Always
543 # additionalProperties: true
545 # -- updateStrategy for DaemonSets of hostPath exporters (default for all hostPathsExporter.daemonSets)
548 # type: [integer, 'null']
550 # -- (int) Number of old ReplicaSets to retain for rollback (default for all hostPathsExporter.daemonSets)
551 revisionHistoryLimit:
554 # additionalProperties: true
557 # -- ResourceRequirements for containers of hostPath exporters (default for all hostPathsExporter.daemonSets)
558 # @default -- see `values.yaml`
568 # additionalProperties: true
571 # -- Readiness probe definition for the host paths exporter (.httpGet cannot be changed)
572 # @default -- see `values.yaml`
574 initialDelaySeconds: 5
578 # additionalProperties: true
581 # -- Liveness probe definition for the host paths exporter (.httpGet cannot be changed)
582 # @default -- see `values.yaml`
584 initialDelaySeconds: 5
588 # additionalProperties: {type: string}
590 # -- Node selector for Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
594 # items: {type: object}
596 # -- Tolerations for Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
600 # additionalProperties: true
602 # -- Affinity for Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
604 # -- PriorityClassName for Pods of hostPath exporters
605 priorityClassName: ""
608 # additionalProperties: {type: string}
610 # -- Additional labels added to Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
614 # additionalProperties: {type: string}
616 # -- Annotations added to Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
620 # additionalProperties: true
623 # -- PodSecurityContext for Pods of hostPath exporters (default for all hostPathsExporter.daemonSets)
624 # @default -- see `values.yaml`
630 # additionalProperties: true
633 # -- SecurityContext for containers of hostPath exporters (default for all hostPathsExporter.daemonSets)
634 # @default -- see `values.yaml`
638 readOnlyRootFilesystem: true
639 allowPrivilegeEscalation: false
645 # items: {type: object}
647 # -- Additional volumes added to Pods of hostPath exporters (default for all hostPathsExporter.daemonSets ; combined with global `extraVolumes`)
651 # items: {type: object}
653 # -- Additional volume mounts added to Pod containers of hostPath exporters (default for all hostPathsExporter.daemonSets ; combined with global `extraVolumeMounts`)
654 extraVolumeMounts: []
656 # type: [string, 'null']
657 # enum: ['', Directory, DirectoryOrCreate, null]
659 # -- Type for HostPath volumes used with watched paths. Can be set to `""` or null to use Kubernetes defaults. May be required with RKE if Pods don't start.
660 hostPathVolumeType: Directory
663 # items: {type: string}
665 # -- [SEE README] List of directory paths of the host to scan for PEM encoded certificate files to be watched and exported as metrics. Each entry is a literal directory (scanned one level deep, default) or a shell-glob pattern with `**` for recursion — e.g. `/var/lib/kubelet/pods/**/*.crt` walks every Pod's volume subtree. The static prefix before any `*`/`?`/`[`/`**` is what gets mounted from the host, so a recursive pattern still binds the smallest containing directory rather than the whole filesystem.
669 # items: {type: string}
671 # -- [SEE README] List of directory paths of the host to scan for specific extension files to be watched and exported as metrics (one level deep)
672 watchSpecificExtensionDirectories: []
675 # items: {type: string}
677 # -- [SEE README] List of file paths of the host for PEM encoded certificates to be watched and exported as metrics (one level deep)
681 # items: {type: string}
683 # -- [SEE README] List of Kubeconf file paths of the host to scan for embedded certificates to export metrics about
684 watchKubeconfFiles: []
687 # items: {type: object}
689 # -- Additional environment variables for containers
696 # additionalProperties: {type: object}
698 # -- [SEE README] Map to define one or many DaemonSets running hostPath exporters. Key is used as a name ; value is a map to override all default settings set by `hostPathsExporter.*`.
705# -- TCP port to expose Pods on (whether kube-rbac-proxy is enabled or not)
712# -- TCP port for a separate plain-HTTP server exposing only `/healthz`
713# and `/readyz`, used as the kubelet probe target. `0` disables it; the
714# chart auto-enables `8080` when the main `/metrics` port is auth-gated
715# (`webConfiguration` set or `rbacProxy.enabled`), so kubelet probes
716# can succeed without a TLS / mTLS / Bearer credential. Set explicitly
717# to override the auto-default.
719# -- Enable hostNetwork mode. Useful when Prometheus is deployed outside of the Kubernetes cluster
722 # -- Expose internal cache statistics via HTML on the root endpoint (/)
724# -- HTTP server configuration for enabling TLS and authentication (password, mTLS) ; see [documentation at Exporter Toolkit](https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md)
726# -- Load the HTTP server configuration from an existing Secret instead of `webConfiguration`. Key must be `webconfig.yaml`.
727webConfigurationExistingSecret: ""
729 # -- Should a Service be installed, targeting all Deployment and DaemonSet instances (required for ServiceMonitor)
731 # -- Should the Service be headless (`clusterIP: None`).
738 # -- TCP port to expose the Service on
742 # additionalProperties: {type: string}
744 # -- Annotations to add to the Service
748 # additionalProperties: {type: string}
750 # -- Additional labels to add to the Service
754# additionalProperties: false
756prometheusServiceMonitor:
757 # -- Should a ServiceMonitor object be installed to scrape this exporter. For prometheus-operator (kube-prometheus) users.
759 # -- Target scrape interval set in the ServiceMonitor
761 # -- Target scrape timeout set in the ServiceMonitor
765 # additionalProperties: {type: string}
767 # -- Additional labels to add to ServiceMonitor objects
771 # additionalProperties: {type: string}
773 # -- Additional annotations to add to ServiceMonitor objects
777 # items: {type: object}
779 # -- Metric relabel config for the ServiceMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
780 metricRelabelings: []
783 # items: {type: object}
785 # -- Relabel config for the ServiceMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
788 # enum: [http, https]
790 # -- Scheme config for the ServiceMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
794 # additionalProperties: true
796 # -- BasicAuth credentials for the ServiceMonitor endpoint (Secret key selectors for `username` and `password`). Requires `scheme: https` (the chart refuses to render credentials over plaintext HTTP) and is mutually exclusive with `rbacProxy.enabled`, which authenticates scrapes with the Prometheus ServiceAccount bearer token — the chart refuses to render both. See: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.BasicAuth
800 # additionalProperties: true
802 # -- Custom TLS configuration, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.TLSConfig
806# additionalProperties: false
809 # -- Should a PodMonitor object be installed to scrape this exporter. For prometheus-operator (kube-prometheus) users.
811 # -- Target scrape interval set in the PodMonitor
813 # -- Target scrape timeout set in the PodMonitor
817 # additionalProperties: {type: string}
819 # -- Additional labels to add to PodMonitor objects
823 # items: {type: object}
825 # -- Metric relabel config for the PodMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
826 metricRelabelings: []
829 # items: {type: object}
831 # -- Relabel config for the PodMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
834 # enum: [http, https]
836 # -- Scheme config for the PodMonitor, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.Endpoint
840 # additionalProperties: true
842 # -- BasicAuth credentials for the PodMonitor endpoint (Secret key selectors for `username` and `password`). Requires `scheme: https` (the chart refuses to render credentials over plaintext HTTP) and is mutually exclusive with `rbacProxy.enabled`, which authenticates scrapes with the Prometheus ServiceAccount bearer token — the chart refuses to render both. See: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.BasicAuth
846 # additionalProperties: true
848 # -- Custom TLS configuration, see: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.TLSConfig
851 # -- Should a PrometheusRule object be installed to alert on certificate expiration. For prometheus-operator (kube-prometheus) users.
853 # -- Prefix prepended to the alert rule names of PrometheusRule rules
857 # additionalProperties: {type: string}
859 # -- Additional labels to add to PrometheusRule objects
863 # additionalProperties: {type: string}
865 # -- Additional labels to add to PrometheusRule rules
869 # additionalProperties: {type: string}
871 # -- Additional annotations to add to PrometheusRule rules
872 alertExtraAnnotations: {}
873 # ─── Source health alerts ──────────────────────────────────────────────
874 # -- Should the SourceErrors / SourceErrorsSustained alerting rules be created to notify when a source produces decode or transport errors. Two bands share one toggle and one expression: warning fires after >5 errors in 15 minutes (aggregated across reasons, so a single malformed cert won't page), critical fires once that condition has held continuously for 30 minutes.
875 alertOnSourceErrors: true
877 # enum: [info, warning, critical]
879 # -- Severity for the SourceErrors alerting rule (warning band — >5 errors in 15min)
880 sourceErrorsSeverity: warning
882 # enum: [info, warning, critical]
884 # -- Severity for the SourceErrorsSustained alerting rule (critical band — warning condition has held for ≥30min)
885 sourceErrorsSustainedSeverity: critical
886 # -- Should the SourceDown alerting rule be created to notify when a source fails its initial sync or stops reporting (`x509_source_up == 0`). A source that is down means every certificate it normally watches has stopped being checked — a silently expired cert is then possible.
887 alertOnSourceDown: true
889 # enum: [info, warning, critical]
891 # -- Severity for the SourceDown alerting rule
892 sourceDownSeverity: critical
893 # -- Should the KubeTransportErrors / KubeTransportErrorsSustained alerting rules be created to notify when the Kubernetes source records LIST/WATCH/informer-level failures (auth rotation drift, apiserver throttling, persistent network issues). The two share one toggle and one expression but two severities: warning fires after >5 errors in 15 minutes (filters out the 1–3 events a rolling control-plane upgrade typically produces), critical fires once that condition has held continuously for 30 minutes. Independent from SourceErrors: this one is scoped to Kubernetes API transport state (watch flapping, list backoff, namespace informer sync timeouts), the other covers decode-level errors across all source kinds.
894 alertOnKubeTransportErrors: true
896 # enum: [info, warning, critical]
898 # -- Severity for the KubeTransportErrors alerting rule (warning band — >5 events in 15min)
899 kubeTransportErrorsSeverity: warning
901 # enum: [info, warning, critical]
903 # -- Severity for the KubeTransportErrorsSustained alerting rule (critical band — warning condition has held for ≥30min)
904 kubeTransportErrorsSustainedSeverity: critical
905 # -- Should the KeystorePassphraseFailures alerting rule be created to notify when PKCS#12 or JKS/JCEKS decoding fails with `bad_passphrase`. A misconfigured passphraseKey/passphraseSecretRef would otherwise leak only into logs and a counter that no one watches.
906 alertOnKeystorePassphraseFailures: true
908 # enum: [info, warning, critical]
910 # -- Severity for the KeystorePassphraseFailures alerting rule
911 keystorePassphraseFailuresSeverity: warning
912 # ─── Certificate lifecycle alerts ──────────────────────────────────────
913 # CertificateRenewal and CertificateExpiration have no toggle: expiration
914 # monitoring is the exporter's core value, disabling them would defeat
915 # the purpose of the chart. The remaining rules guard against specific
916 # operational failure modes and are individually opt-out.
917 # -- Should the CertificateError alerting rule be created to notify when the exporter can't decode or process a certificate. Depends on `exposePerCertificateErrorMetrics: true` — without it the underlying `x509_cert_error` series isn't emitted and the rule is a silent no-op.
918 alertOnCertificateError: true
920 # enum: [info, warning, critical]
922 # -- Severity for the CertificateError alerting rule
923 certificateErrorSeverity: warning
925 # enum: [info, warning, critical]
927 # -- Severity for the CertificateRenewal alerting rule
928 certificateRenewalsSeverity: warning
930 # enum: [info, warning, critical]
932 # -- Severity for the CertificateExpiration alerting rule
933 certificateExpirationsSeverity: critical
938 # -- Raise a warning alert when fewer than this many days are left before a certificate expiration (cert-manager would renew Let's Encrypt certs before day 29)
944 # -- Raise a critical alert when fewer than this many days are left before a certificate expiration (two weeks to deal with ACME rate limiting should this be an issue)
946 # -- Should the CertificateNotYetValid alerting rule be created to notify when a certificate's `notBefore` is in the future. Depends on `exposeNotBeforeMetric: true` — without it the underlying `x509_cert_not_before` series isn't emitted and the rule is a silent no-op.
947 alertOnCertificateNotYetValid: true
949 # enum: [info, warning, critical]
951 # -- Severity for the CertificateNotYetValid alerting rule
952 certificateNotYetValidSeverity: warning
953 # -- Should the CertificateCollision alerting rule be created to notify when at least one certificate was dropped because of a label collision (registry `Collision=Never` policy). The detect-only counter `x509_cert_collision_total` keeps ticking under the default `Collision=Auto` policy where the discriminator label resolves the overlap — that signal stays on dashboards but does not page.
954 alertOnCertificateCollision: true
956 # enum: [info, warning, critical]
958 # -- Severity for the CertificateCollision alerting rule
959 certificateCollisionSeverity: warning
960 # ─── CRL lifecycle alerts ──────────────────────────────────────────────
961 # No toggle: same rationale as CertificateRenewal/Expiration. The
962 # underlying `x509_crl_*` series only exist when a CRL is actually
963 # observed, so installations that don't watch any CRL get no alerts.
968 # -- Raise a warning alert when fewer than this many days are left before a CRL reaches its nextUpdate. CRLs are typically refreshed daily to weekly; 7 days gives a comfortable margin for a publisher running on a weekly cadence.
969 crlWarningDaysLeft: 7
971 # enum: [info, warning, critical]
973 # -- Severity for the CRLNeedsRefresh alerting rule
974 crlNeedsRefreshSeverity: warning
976 # enum: [info, warning, critical]
978 # -- Severity for the CRLStale alerting rule (fires once `x509_crl_stale > 0`, i.e. the CRL's nextUpdate is in the past)
979 crlStaleSeverity: critical
980 # -- Skip all built-in alerts when using extraAlertGroups
981 disableBuiltinAlertGroup: false
984 # items: {type: object}
986 # -- Additional alert groups for custom configuration (example in `values.yaml`)
988 # - name: x509-certificate-exporter.custom
990 # # Flag certificates that have been past their NotAfter for more
991 # # than 24 hours. The built-in CertificateExpiration keeps firing
992 # # once a cert crosses its expiry, but doesn't distinguish
993 # # "expired today" from "expired three weeks ago and nobody renewed".
994 # - alert: CertificateExpiredForTooLong
995 # expr: (time() - x509_cert_not_after) > 86400
1000 # summary: Certificate is expired and has not been renewed
1001 # # extraAlertGroups content is run through Helm's `tpl` with
1002 # # the chart root as context, so AlertManager template actions
1003 # # ({{ $labels.X }}, {{ humanizeDuration $value }}) must be
1004 # # backtick-escaped to survive Helm's pass unchanged.
1005 # description: Certificate for `{{`{{ $labels.subject_CN }}`}}` has been expired for {{`{{ humanizeDuration $value }}`}}.
1007 # ─── Per-alert overrides ───────────────────────────────────────────────
1008 # Targeted escape hatches when an environment needs to tweak a single
1009 # alert without disabling the whole built-in group via
1010 # `disableBuiltinAlertGroup` + reproducing everything in
1011 # `extraAlertGroups`. Keys are the bare alert names (no `rulePrefix`).
1012 # Overrides are taken whole — there's no merge with the default; if
1013 # you override CertificateRenewal's `expr`, you must reproduce any
1014 # threshold or conjunction the default value contains.
1017 # additionalProperties: {type: string}
1019 # -- Map of alertName -> Prometheus expression that replaces the default `expr:` of the built-in rule with the same name. Useful for adding label filters in multi-cluster setups (`max by (cluster, …) (x509_cert_not_after - time()) < …`), swapping in aggregation functions, or anything else that doesn't fit through the existing knobs.
1020 alertExprOverrides: {}
1021 # CertificateRenewal: |-
1022 # max by (cluster, subject_CN, secret_namespace, secret_name, filepath) (
1023 # x509_cert_not_after - time()
1024 # ) < (28 * 86400) and (x509_cert_not_after - time()) > 0
1027 # additionalProperties: {type: string, pattern: '^([0-9]+\.[0-9]+(ms|s|m|h|d|w|y)|([0-9]+(ms|s|m|h|d|w|y))+)$'}
1029 # -- Map of alertName -> `for:` duration that replaces the default. The shipped defaults are 5m for operational signals (Source*, KubeTransport*), 15m for state-based ones (Certificate*, CRL*, Keystore*), and 30m for the Sustained critical bands. Override values must be valid Prometheus duration strings (e.g. `30s`, `5m`, `1h`).
1030 alertForOverrides: {}
1031 # KubeTransportErrorsSustained: "1h"
1032 # CertificateError: "1m"
1035# additionalProperties: {type: string}
1037# -- Additional labels added to all chart objects
1041# additionalProperties: {type: string}
1043# -- Additional labels added to all Pods
1047# additionalProperties: {type: string}
1049# -- Annotations added to all Pods
1051# prometheus.io/port: "9793"
1052# prometheus.io/scrape: "true"
1054# -- PriorityClassName set for all Pods by default (can be overridden with `secretsExporter` and `hostPathsExporter` specific values)
1055priorityClassName: ""
1058# items: {type: object}
1060# -- Additional volumes added to all Pods (see also the `secretsExporter` and `hostPathsExporter` variants)
1064# items: {type: object}
1066# -- Additional volume mounts added to all Pod containers (see also the `secretsExporter` and `hostPathsExporter` variants)
1067extraVolumeMounts: []
1069 # -- Should Pod Security Policy objects be created
1072 # -- Should RBAC objects be created
1076 # type: [string, 'null']
1078 # -- Name of the ServiceAccount for the Secrets exporter (required if `rbac.create=false`)
1082 # additionalProperties: {type: string}
1084 # -- Annotations added to the ServiceAccount for the Secrets exporter
1085 serviceAccountAnnotations: {}
1088 # additionalProperties: {type: string}
1090 # -- Annotations added to the ClusterRole for the Secrets exporter
1091 clusterRoleAnnotations: {}
1094 # additionalProperties: {type: string}
1096 # -- Annotations added to the ClusterRoleBinding for the Secrets exporter
1097 clusterRoleBindingAnnotations: {}
1100 # type: [string, 'null']
1102 # -- Name of the ServiceAccount for hostPath exporters (required if `rbac.create=false`)
1106 # additionalProperties: {type: string}
1108 # -- Annotations added to the ServiceAccount for the hostPath exporters
1109 serviceAccountAnnotations: {}
1112 # additionalProperties: {type: string}
1114 # -- Annotations added to the ClusterRole for the hostPath exporters
1115 clusterRoleAnnotations: {}
1118 # additionalProperties: {type: string}
1120 # -- Annotations added to the ClusterRoleBinding for the hostPath exporters
1121 clusterRoleBindingAnnotations: {}
1123 # -- Should kube-rbac-proxy be used to expose exporters
1126 # -- Pre-provisioned Secret carrying `tls.crt` + `tls.key` for the
1127 # kube-rbac-proxy serving cert. When empty, the chart auto-generates
1128 # a self-signed cert at install time and reuses it across upgrades
1129 # via `lookup`. Set this to a cert-manager-managed Secret (or
1130 # similar) for a cert with a real chain you can rotate independently.
1131 existingSecretName: ""
1133 # -- kube-rbac-proxy image registry. Empty string opts out of the registry prefix and lets the CRI fall back to its configured default (typically docker.io).
1139 # -- kube-rbac-proxy image repository
1140 repository: scratch-images/test-tmp/kube-rbac-proxy-fips
1141 # -- kube-rbac-proxy image tag
1143 # -- kube-rbac-proxy image digest. When set, takes precedence over `tag` (immutable reference)
1144 digest: sha256:8547dfc680fd0028022bd46093be64142bc9fe5d0a3d7c1317733a34ca135935
1146 # enum: [Always, IfNotPresent, Never]
1148 # -- kube-rbac-proxy image pull policy
1149 pullPolicy: IfNotPresent
1155 # -- Listen port for the exporter running inside kube-rbac-proxy exposed Pods
1156 upstreamListenPort: 9091
1159 # additionalProperties: true
1162 # -- ResourceRequirements for all containers of kube-rbac-proxy
1163 # @default -- see `values.yaml`
1173 # additionalProperties: true
1176 # -- SecurityContext for all containers of kube-rbac-proxy
1177 # @default -- see `values.yaml`
1182 readOnlyRootFilesystem: true
1183 allowPrivilegeEscalation: false