1# This file has been modified by Chainguard, Inc.
3# Copyright Chainguard, Inc. All Rights Reserved.
4# Chainguard, Inc. modifications are subject to the license
5# available at: https://www.chainguard.dev/legal/software-license-agreement
7# Copyright Broadcom, Inc. All Rights Reserved.
8# SPDX-License-Identifier: APACHE-2.0
10## @section Global parameters
13 ## Global Docker image parameters
14 ## Please, note that this will override the image parameters, including dependencies, configured to use the global value
15 ## @param global.imageRegistry Global Docker Image registry
16 ## @param global.imagePullSecrets Global Docker registry secret names as an array
20 ## @param global.defaultStorageClass Global default StorageClass for Persistent Volume(s)
22 defaultStorageClass: ""
23 ## Security parameters
24 ## @param global.security.allowInsecureImages Allows skipping image verification
27 allowInsecureImages: false
28 ## Compatibility adaptations for Kubernetes platforms
31 ## Compatibility adaptations for Openshift
32 ## @param global.compatibility.openshift.adaptSecurityContext Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation)
35 adaptSecurityContext: auto
36 ## @param global.compatibility.omitEmptySeLinuxOptions If set to true, removes the seLinuxOptions from the securityContexts when it is set to an empty object
38 omitEmptySeLinuxOptions: false
40## @section Common parameters
42## @param kubeVersion Override Kubernetes version reported by .Capabilities
45## @param apiVersions Override Kubernetes API versions reported by .Capabilities
48## @param nameOverride String to partially override common.names.name
51## @param fullnameOverride String to fully override common.names.fullname
54## @param namespaceOverride String to fully override common.names.namespace
57## @param commonLabels Labels to add to all deployed objects
60## @param commonAnnotations Annotations to add to all deployed objects
63## @param clusterDomain Default Kubernetes cluster domain
65clusterDomain: cluster.local
66## @param extraDeploy Array of extra objects to deploy with the release
70## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden)
71## @param diagnosticMode.command Command to override all containers in the chart release
72## @param diagnosticMode.args Args to override all containers in the chart release
80## @param useHelmHooks Enable use of Helm hooks if needed, e.g. on post-install jobs
83## @param usePasswordFiles Mount credentials as files instead of using environment variables
86## @section Keycloak parameters
88## Iamguarded Keycloak image version
89## @param image.registry [default: REGISTRY_NAME] Keycloak image registry
90## @param image.repository [default: REPOSITORY_NAME/keycloak] Keycloak image repository
91## @skip image.tag Keycloak image tag (immutable tags are recommended)
92## @param image.digest Keycloak image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
93## @param image.pullPolicy Keycloak image pull policy
94## @param image.pullSecrets Keycloak image pull secrets
95## @param image.debug Enable Keycloak image debug mode
99 repository: chainguard-private/keycloak-iamguarded
102 ## Specify a imagePullPolicy
103 ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
105 pullPolicy: IfNotPresent
106 ## Optionally specify an array of imagePullSecrets (secrets must be manually created in the namespace)
107 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
110 ## - myRegistryKeySecretName
114## Keycloak authentication parameters
117 ## @param auth.adminUser Keycloak administrator user
120 ## @param auth.adminPassword Keycloak administrator password for the new user
123 ## @param auth.existingSecret Existing secret containing Keycloak admin password
126 ## @param auth.passwordSecretKey Key where the Keycloak admin password is being stored inside the existing secret.
128 passwordSecretKey: ""
129 ## @param auth.annotations Additional custom annotations for Keycloak auth secret object
132## @param production Run Keycloak in production mode. TLS configuration is required except when using proxy headers
137## @param tls.enabled Enable TLS in Keycloak
138## @param tls.usePemCerts Use PEM certificates as input instead of PKS12/JKS stores
139## @param tls.autoGenerated.enabled Enable automatic generation of TLS certificates
140## @param tls.autoGenerated.engine Mechanism to generate the certificates (allowed values: helm, cert-manager)
141## @param tls.autoGenerated.certManager.existingIssuer The name of an existing Issuer to use for generating the certificates (only for `cert-manager` engine)
142## @param tls.autoGenerated.certManager.existingIssuerKind Existing Issuer kind, defaults to Issuer (only for `cert-manager` engine)
143## @param tls.autoGenerated.certManager.keyAlgorithm Key algorithm for the certificates (only for `cert-manager` engine)
144## @param tls.autoGenerated.certManager.keySize Key size for the certificates (only for `cert-manager` engine)
145## @param tls.autoGenerated.certManager.duration Duration for the certificates (only for `cert-manager` engine)
146## @param tls.autoGenerated.certManager.renewBefore Renewal period for the certificates (only for `cert-manager` engine)
147## @param tls.existingSecret The name of an existing Secret containing the TLS certificates for Keycloak replicas
148## @param tls.certFilename Certificate filename inside the existing secret (when tls.usePemCerts=true and tls.autoGenerated.enabled=false)
149## @param tls.certKeyFilename Certificate key filename inside the existing secret (when tls.usePemCerts=true and tls.autoGenerated.enabled=false)
150## @param tls.keystoreFilename Keystore filename inside the existing secret
151## @param tls.truststoreFilename Truststore filename inside the existing secret
152## @param tls.keystorePassword Password to access the keystore when it's password-protected
153## @param tls.truststorePassword Password to access the truststore when it's password-protected
154## @param tls.passwordsSecret The name of an existing Secret containing the keystore/truststore passwords (expected keys: `tls-keystore-password` and `tls-truststore-password`)
164 existingIssuerKind: ""
169 ## Create this secret following the steps below:
170 ## 1) Generate your truststore and keystore files (more info at https://www.keycloak.org/server/enabletls)
171 ## 2) Rename your truststore to `keycloak.truststore.jks`
172 ## 3) Rename your keystores to `keycloak.keystore.jks`
173 ## 4) Run the command below where SECRET_NAME is the name of the secret you want to create:
174 ## kubectl create secret generic SECRET_NAME --from-file=./keycloak.truststore.jks --from-file=./keycloak.keystore.jks
175 ## NOTE: If tls.usePemCerts enabled, make sure the PEM key and cert are named 'tls.key' and 'tls.crt' respectively.
178 certFilename: "tls.crt"
179 certKeyFilename: "tls.key"
180 keystoreFilename: "keycloak.keystore.jks"
181 truststoreFilename: "keycloak.truststore.jks"
183 truststorePassword: ""
185## Keycloak management interface (health/metrics), listening on containerPorts.management (9000)
186## ref: https://www.keycloak.org/server/management-interface
187## @param managementInterface.scheme Scheme for the management interface and its health probes. Empty ("", the default) preserves the chart's legacy behavior: probes use HTTP and KC_HTTP_MANAGEMENT_SCHEME is left unset (Keycloak's own default applies). Set to "inherited" to serve HTTPS on port 9000 when tls.enabled (the health probes switch to HTTPS to match); set to "http" to force plaintext. Maps to KC_HTTP_MANAGEMENT_SCHEME
188## @param managementInterface.clientAuth Mutual-TLS client-certificate policy for the management interface: none, request or required. Emitted only when scheme=inherited and tls.enabled; "none" lets health/metrics probes connect without a client certificate even when the main server enables mTLS (KC_HTTPS_CLIENT_AUTH). Maps to KC_HTTPS_MANAGEMENT_CLIENT_AUTH
189## @param managementInterface.tls.certFilename Optional dedicated PEM certificate filename (inside the TLS secret) for the management listener, decoupling it from the main server's mTLS context. Empty inherits the main certificate. Used only when scheme=inherited. Maps to KC_HTTPS_MANAGEMENT_CERTIFICATE_FILE
190## @param managementInterface.tls.certKeyFilename Optional dedicated PEM key filename for the management listener. Maps to KC_HTTPS_MANAGEMENT_CERTIFICATE_KEY_FILE
198## @param trustedCertsExistingSecret Name of the existing Secret containing the trusted certificates to validate communications with external services
199## ref: https://www.keycloak.org/server/keycloak-truststore
201trustedCertsExistingSecret: ""
202## @param adminRealm Name of the admin realm
205## @param proxyHeaders Set Keycloak proxy headers
208## @param hostnameStrict Disables dynamically resolving the hostname from request headers (ignored if ingress.enabled is false).
209## Should always be set to true in production, unless your reverse proxy overwrites the Host header.
210## If enabled, the ingress.hostname option needs to be specified.
213## @param httpEnabled Force enabling HTTP endpoint (by default is only enabled if TLS is disabled)
216## @param httpRelativePath Set the path relative to '/' for serving resources
219## Keycloak cache configuration
220## ref: https://www.keycloak.org/server/caching
221## @param cache.enabled Switch to enable or disable the Keycloak distributed cache for kubernetes.
222## NOTE: Set to false to use 'local' cache (only supported when replicaCount=1).
223## @param cache.stack Cache stack to use
224## @param cache.configFile Path to the file from which cache configuration should be loaded from
225## @param cache.useHeadlessServiceWithAppVersion Create a headless service used for ispn containing the app version
226## @param cache.javaOptsAppendExtra Extra java options to append to the java options
231 configFile: "cache-ispn.xml"
232 useHeadlessServiceWithAppVersion: false
233 javaOptsAppendExtra: ""
234## Keycloak logging configuration
235## ref: https://www.keycloak.org/server/logging
236## @param logging.output Alternates between the default log output format or json format
237## @param logging.level Allowed values as documented: FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL, OFF
242## @param configuration Keycloak Configuration. Auto-generated based on other parameters when not specified
243## NOTE: This will override configuring Keycloak based on environment variables (including those set by the chart)
244## The keycloak.conf is auto-generated based on other parameters when this parameter is not specified
252## @param existingConfigmap Name of existing ConfigMap with Keycloak configuration
253## NOTE: When it's set the configuration parameter is ignored
256## @param extraStartupArgs Extra default startup args
259## @param initdbScripts Dictionary of initdb scripts
260## Specify dictionary of scripts to be run at first boot
263## my_init_script.sh: |
265## echo "Do something."
268## @param initdbScriptsConfigMap ConfigMap with the initdb scripts (Note: Overrides `initdbScripts`)
270initdbScriptsConfigMap: ""
271## @param command Override default container command (useful when using custom images)
274## @param args Override default container args (useful when using custom images)
277## @param extraEnvVars Extra environment variables to be set on Keycloak container
284## @param extraEnvVarsCM Name of existing ConfigMap containing extra env vars
287## @param extraEnvVarsSecret Name of existing Secret containing extra env vars
289extraEnvVarsSecret: ""
290## @param containerPorts.http Keycloak HTTP container port
291## @param containerPorts.https Keycloak HTTPS container port
292## @param containerPorts.management Keycloak management container port
298## @param extraContainerPorts Optionally specify extra list of additional ports for Keycloak container
300## extraContainerPorts:
302## containerPort: 9090
304extraContainerPorts: []
305## Keycloak pods' SecurityContext
306## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
307## @param podSecurityContext.enabled Enabled Keycloak pods' Security Context
308## @param podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
309## @param podSecurityContext.sysctls Set kernel settings using the sysctl interface
310## @param podSecurityContext.supplementalGroups Set filesystem extra groups
311## @param podSecurityContext.fsGroup Set Keycloak pod's Security Context fsGroup
315 fsGroupChangePolicy: Always
317 supplementalGroups: []
319## Keycloak containers' Security Context
320## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
321## @param containerSecurityContext.enabled Enabled containers' Security Context
322## @param containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
323## @param containerSecurityContext.runAsUser Set containers' Security Context runAsUser
324## @param containerSecurityContext.runAsGroup Set containers' Security Context runAsGroup
325## @param containerSecurityContext.runAsNonRoot Set container's Security Context runAsNonRoot
326## @param containerSecurityContext.privileged Set container's Security Context privileged
327## @param containerSecurityContext.readOnlyRootFilesystem Set container's Security Context readOnlyRootFilesystem
328## @param containerSecurityContext.allowPrivilegeEscalation Set container's Security Context allowPrivilegeEscalation
329## @param containerSecurityContext.capabilities.drop List of capabilities to be dropped
330## @param containerSecurityContext.seccompProfile.type Set container's Security Context seccomp profile
332containerSecurityContext:
339 readOnlyRootFilesystem: true
340 allowPrivilegeEscalation: false
344 type: "RuntimeDefault"
345## Keycloak resource requests and limits
346## ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
347## @param resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if resources is set (resources is recommended for production).
349resourcesPreset: "small"
350## @param resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
361## Configure extra options for Keycloak containers' liveness, readiness and startup probes
362## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
363## @param livenessProbe.enabled Enable livenessProbe on Keycloak containers
364## @param livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
365## @param livenessProbe.periodSeconds Period seconds for livenessProbe
366## @param livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
367## @param livenessProbe.failureThreshold Failure threshold for livenessProbe
368## @param livenessProbe.successThreshold Success threshold for livenessProbe
372 initialDelaySeconds: 120
377## @param readinessProbe.enabled Enable readinessProbe on Keycloak containers
378## @param readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
379## @param readinessProbe.periodSeconds Period seconds for readinessProbe
380## @param readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
381## @param readinessProbe.failureThreshold Failure threshold for readinessProbe
382## @param readinessProbe.successThreshold Success threshold for readinessProbe
386 initialDelaySeconds: 30
391## @param startupProbe.enabled Enable startupProbe on Keycloak containers
392## @param startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
393## @param startupProbe.periodSeconds Period seconds for startupProbe
394## @param startupProbe.timeoutSeconds Timeout seconds for startupProbe
395## @param startupProbe.failureThreshold Failure threshold for startupProbe
396## @param startupProbe.successThreshold Success threshold for startupProbe
400 initialDelaySeconds: 30
405## @param customLivenessProbe Custom Liveness probes for Keycloak
407customLivenessProbe: {}
408## @param customReadinessProbe Custom Readiness probes Keycloak
410customReadinessProbe: {}
411## @param customStartupProbe Custom Startup probes for Keycloak
413customStartupProbe: {}
414## @section Keycloak StatefulSet parameters
416## @param replicaCount Number of Keycloak replicas to deploy
419## @param updateStrategy.type Keycloak StatefulSet type
420## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
423 ## Can be set to RollingUpdate or OnDelete
426## @param revisionHistoryLimitCount Number of controller revisions to keep
428revisionHistoryLimitCount: 10
429## @param minReadySeconds How many seconds a pod needs to be ready before killing the next, during update
432## @param statefulsetAnnotations Optionally add extra annotations on the StatefulSet resource
434statefulsetAnnotations: {}
435## @param automountServiceAccountToken Mount Service Account token in Keycloak pods
437automountServiceAccountToken: true
438## @param hostAliases Deployment pod host aliases
439## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
442## @param podLabels Extra labels for Keycloak pods
443## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
446## @param podAnnotations Annotations for Keycloak pods
447## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
450## @param podAffinityPreset Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
451## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
454## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
455## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
457podAntiAffinityPreset: soft
458## Node affinity preset
459## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
462 ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
465 ## @param nodeAffinityPreset.key Node label key to match. Ignored if `affinity` is set.
467 ## key: "kubernetes.io/e2e-az-name"
470 ## @param nodeAffinityPreset.values Node label values to match. Ignored if `affinity` is set.
477## @param affinity Affinity for pod assignment
478## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
481## @param nodeSelector Node labels for pod assignment
482## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
485## @param tolerations Tolerations for pod assignment
486## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
489## @param topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
490## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
492topologySpreadConstraints: []
493## @param podManagementPolicy Pod management policy for the Keycloak StatefulSet
495podManagementPolicy: Parallel
496## @param priorityClassName Keycloak pods' Priority Class Name
497## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
500## @param schedulerName Use an alternate scheduler, e.g. "stork".
501## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
504## @param terminationGracePeriodSeconds Seconds Keycloak pod needs to terminate gracefully
505## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
507terminationGracePeriodSeconds: ""
508## @param lifecycleHooks LifecycleHooks to set additional configuration at startup
511## @param dnsPolicy DNS Policy for pod
512## @param dnsConfig DNS Configuration pod
513## ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
517## @param enableServiceLinks If set to false, disable Kubernetes service links in the pod spec
518## Ref: https://kubernetes.io/docs/tutorials/services/connect-applications-service/#accessing-the-service
520enableServiceLinks: true
521## @param extraVolumes Optionally specify extra list of additional volumes for Keycloak pods
524## @param extraVolumeMounts Optionally specify extra list of additional volumeMounts for Keycloak container(s)
527## @param initContainers Add additional init containers to the Keycloak pods
530## - name: your-image-name
532## imagePullPolicy: Always
535## containerPort: 1234
538## @param sidecars Add additional sidecar containers to the Keycloak pods
541## - name: your-image-name
543## imagePullPolicy: Always
546## containerPort: 1234
549## @section Traffic Exposure Parameters
551## Service configuration
554 ## @param service.type Kubernetes service type
557 ## @param service.http.enabled Enable http port on service
561 ## @param service.ports.http Keycloak service HTTP port
562 ## @param service.ports.https Keycloak service HTTPS port
567 ## Node ports to expose
568 ## @param service.nodePorts.http Node port for HTTP
569 ## @param service.nodePorts.https Node port for HTTPS
570 ## NOTE: choose port between <30000-32767>
575 ## @param service.extraPorts Extra port to expose on Keycloak service
578 ## @param service.sessionAffinity Control where client requests go, to the same pod or round-robin
579 ## Values: ClientIP or None
580 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/
582 sessionAffinity: None
583 ## @param service.sessionAffinityConfig Additional settings for the sessionAffinity
584 ## sessionAffinityConfig:
586 ## timeoutSeconds: 300
588 sessionAffinityConfig: {}
589 ## @param service.clusterIP Keycloak service clusterIP IP
594 ## @param service.loadBalancerIP loadBalancerIP for the SuiteCRM Service (optional, cloud specific)
595 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
598 ## @param service.loadBalancerSourceRanges Address that are allowed when service is LoadBalancer
599 ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
601 ## loadBalancerSourceRanges:
604 loadBalancerSourceRanges: []
605 ## @param service.externalTrafficPolicy Enable client source IP preservation
606 ## ref https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
608 externalTrafficPolicy: Cluster
609 ## @param service.annotations Additional custom annotations for Keycloak service
612 ## Headless service properties
615 ## @param service.headless.annotations Annotations for the headless service.
618 ## @param service.headless.extraPorts Extra ports to expose on Keycloak headless service
621## Keycloak ingress parameters
622## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
625 ## @param ingress.enabled Enable ingress record generation for Keycloak
628 ## @param ingress.pathType Ingress path type
630 pathType: ImplementationSpecific
631 ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set)
634 ## @param ingress.hostname Default host for the ingress record (evaluated as template)
636 hostname: keycloak.local
637 ## @param ingress.ingressClassName IngressClass that will be be used to implement the Ingress (evaluated as template)
638 ## Required if you have more than one IngressClass marked as the default for your cluster
641 ## @param ingress.controller The ingress controller type. Currently supports `default` and `gce`
642 ## leave as `default` for most ingress controllers.
643 ## set to `gce` if using the GCE ingress controller
646 ## @param ingress.path Default path for the ingress record
648 path: "{{ .Values.httpRelativePath }}"
649 ## @param ingress.servicePort Backend service port to use
650 ## Default is http. Alternative is https.
653 ## @param ingress.annotations [object] Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
654 ## Use this parameter to set the required annotations for cert-manager, see
655 ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
658 ## kubernetes.io/ingress.class: nginx
659 ## cert-manager.io/cluster-issuer: cluster-issuer-name
662 ## @param ingress.labels Additional labels for the Ingress resource.
668 ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter
669 ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" (tpl .Values.ingress.hostname .) }}`
671 ## - Use the `ingress.secrets` parameter to create this TLS secret
672 ## - Rely on cert-manager to create it by setting the corresponding annotations
673 ## - Rely on Helm to create self-signed certificates by setting `ingress.selfSigned=true`
676 ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
679 ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
682 ## - name: keycloak.local
686 ## @param ingress.extraPaths Any additional arbitrary paths that may need to be added to the ingress under the main host.
687 ## For example: The ALB ingress controller requires a special rule for handling SSL redirection.
691 ## serviceName: ssl-redirect
692 ## servicePort: use-annotation
695 ## @param ingress.extraTls The tls configuration for additional hostnames to be covered with this ingress record.
696 ## see: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
700 ## secretName: keycloak.local-tls
703 ## @param ingress.secrets If you're providing your own certificates, please use this to add the certificates as secrets
704 ## key and certificate should start with -----BEGIN CERTIFICATE----- or
705 ## -----BEGIN RSA PRIVATE KEY-----
707 ## name should line up with a tlsSecret set further up
708 ## If you're using cert-manager, this is unneeded, as it will create the secret for you if it is not set
710 ## It is also possible to create and manage the certificates outside of this helm chart
711 ## Please see README.md for more information
713 ## - name: keycloak.local-tls
718 ## @param ingress.extraRules Additional rules to be covered with this ingress record
719 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
722 ## - host: keycloak.local
732## Network Policy configuration
733## ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
736 ## @param networkPolicy.enabled Specifies whether a NetworkPolicy should be created
739 ## @param networkPolicy.allowExternal Don't require server label for connections
740 ## The Policy model to apply. When set to false, only pods with the correct
741 ## server label will have network access to the ports server is listening
742 ## on. When true, server will accept connections from any source
743 ## (with the correct destination port).
746 ## @param networkPolicy.allowExternalEgress Allow the pod to access any range of port and all destinations.
748 allowExternalEgress: true
749 ## @param networkPolicy.addExternalClientAccess Allow access from pods with client label set to "true". Ignored if `networkPolicy.allowExternal` is true.
751 addExternalClientAccess: true
752 ## @param networkPolicy.kubeAPIServerPorts [array] List of possible endpoints to kube-apiserver (limit to your cluster settings to increase security)
754 kubeAPIServerPorts: [443, 6443, 8443]
755 ## @param networkPolicy.extraIngress [array] Add extra ingress rules to the NetworkPolicy
765 ## - matchExpressions:
771 ## @param networkPolicy.extraEgress [array] Add extra ingress rules to the NetworkPolicy
781 ## - matchExpressions:
788 ## @param networkPolicy.ingressPodMatchLabels [object] Labels to match to allow traffic from other pods. Ignored if `networkPolicy.allowExternal` is true.
790 ## ingressPodMatchLabels:
793 ingressPodMatchLabels: {}
794 ## @param networkPolicy.ingressNSMatchLabels [object] Labels to match to allow traffic from other namespaces
795 ## @param networkPolicy.ingressNSPodMatchLabels [object] Pod labels to match to allow traffic from other namespaces
797 ingressNSMatchLabels: {}
798 ingressNSPodMatchLabels: {}
799## @section Other parameters
801## ServiceAccount configuration
802## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
805 ## @param serviceAccount.create Specifies whether a ServiceAccount should be created
808 ## @param serviceAccount.name The name of the ServiceAccount to use.
809 ## If not set and create is true, a name is generated using the common.names.fullname template
812 ## @param serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
815 ## @param serviceAccount.automountServiceAccountToken Automount service account token for the server service account
817 automountServiceAccountToken: true
818 ## @param serviceAccount.extraLabels Additional Service Account labels (evaluated as a template)
821## Keycloak Pod Disruption Budget configuration
822## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
823## @param pdb.create Enable/disable a Pod Disruption Budget creation
824## @param pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
825## @param pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable. Defaults to `1` if both `pdb.minAvailable` and `pdb.maxUnavailable` are empty.
831## Keycloak Autoscaling configuration
832## ref: https://kubernetes.io/docs/concepts/workloads/autoscaling/
835 ## @param autoscaling.vpa.enabled Enable VPA for Keycloak pods
836 ## @param autoscaling.vpa.annotations Annotations for VPA resource
837 ## @param autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
838 ## @param autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
839 ## @param autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
844 controlledResources: []
847 ## @param autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy
848 ## Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
849 ## Possible values are "Off", "Initial", "Recreate", and "Auto".
853 ## @param autoscaling.hpa.enabled Enable HPA for Keycloak pods
854 ## @param autoscaling.hpa.minReplicas Minimum number of Keycloak replicas
855 ## @param autoscaling.hpa.maxReplicas Maximum number of Keycloak replicas
856 ## @param autoscaling.hpa.targetCPU Target CPU utilization percentage
857 ## @param autoscaling.hpa.targetMemory Target Memory utilization percentage
865 ## HPA Scaling Behavior
866 ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#configurable-scaling-behavior
869 ## HPA behavior when scaling up
870 ## @param autoscaling.hpa.behavior.scaleUp.stabilizationWindowSeconds The number of seconds for which past recommendations should be considered while scaling up
871 ## @param autoscaling.hpa.behavior.scaleUp.selectPolicy The priority of policies that the autoscaler will apply when scaling up
872 ## @param autoscaling.hpa.behavior.scaleUp.policies [array] HPA scaling policies when scaling up
874 ## Policy to scale 20% of the pod in 60s
880 stabilizationWindowSeconds: 120
883 ## HPA behavior when scaling down
884 ## @param autoscaling.hpa.behavior.scaleDown.stabilizationWindowSeconds The number of seconds for which past recommendations should be considered while scaling down
885 ## @param autoscaling.hpa.behavior.scaleDown.selectPolicy The priority of policies that the autoscaler will apply when scaling down
886 ## @param autoscaling.hpa.behavior.scaleDown.policies [array] HPA scaling policies when scaling down
888 ## Policy to scale one pod in 300s
891 ## periodSeconds: 300
894 stabilizationWindowSeconds: 300
900## @section Metrics parameters
902 ## @param metrics.enabled Enable exposing Keycloak metrics
905 ## Keycloak metrics service parameters
908 ## @param metrics.service.ports.metrics Metrics service Metrics port
912 ## @param metrics.service.annotations [object] Annotations for enabling prometheus to access the metrics endpoints
915 prometheus.io/scrape: "true"
916 prometheus.io/port: "{{ .Values.metrics.service.ports.metrics }}"
917 ## @param metrics.service.extraPorts [array] Add additional ports to the keycloak metrics service
920 ## Prometheus Operator ServiceMonitor configuration
923 ## @param metrics.serviceMonitor.enabled if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`)
926 ## @param metrics.serviceMonitor.namespace Namespace in which Prometheus is running
929 ## @param metrics.serviceMonitor.annotations Additional custom annotations for the ServiceMonitor
932 ## @param metrics.serviceMonitor.labels Extra labels for the ServiceMonitor
935 ## @param metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in Prometheus
938 ## @param metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels
941 ## @param metrics.serviceMonitor.tlsConfig [object] TLS configuration used for scrape endpoints used by Prometheus
944 ## @param metrics.serviceMonitor.interval Interval at which metrics should be scraped.
945 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
950 ## @param metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended
951 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
953 ## scrapeTimeout: 10s
956 ## @param metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics
958 metricRelabelings: []
959 ## @param metrics.serviceMonitor.relabelings Specify general relabeling
962 ## @param metrics.serviceMonitor.selector Prometheus instance selector labels
964 ## prometheus: my-prometheus
967 ## Prometheus Operator alert rules configuration
970 ## @param metrics.prometheusRule.enabled Create PrometheusRule Resource for scraping metrics using PrometheusOperator
973 ## @param metrics.prometheusRule.namespace Namespace which Prometheus is running in
976 ## @param metrics.prometheusRule.labels Additional labels that can be used so PrometheusRule will be discovered by Prometheus
979 ## @param metrics.prometheusRule.groups Groups, containing the alert rules.
984 ## - alert: KeycloakInstanceNotAvailable
986 ## message: "Keycloak instance in namespace {{ `{{` }} $labels.namespace {{ `}}` }} has not been available for the last 5 minutes."
988 ## absent(kube_pod_status_ready{namespace="{{ include "common.names.namespace" . }}", condition="true"} * on (pod) kube_pod_labels{pod=~"{{ include "common.names.fullname" . }}-\\d+", namespace="{{ include "common.names.namespace" . }}"}) != 0
991 ## severity: critical
993## @section keycloak-config-cli parameters
995## Configuration for keycloak-config-cli
996## ref: https://github.com/adorsys/keycloak-config-cli
999 ## @param keycloakConfigCli.enabled Whether to enable keycloak-config-cli job
1002 ## Iamguarded keycloak-config-cli image
1003 ## @param keycloakConfigCli.image.registry [default: REGISTRY_NAME] keycloak-config-cli container image registry
1004 ## @param keycloakConfigCli.image.repository [default: REPOSITORY_NAME/keycloak-config-cli] keycloak-config-cli container image repository
1005 ## @skip keycloakConfigCli.image.tag keycloak-config-cli container image tag
1006 ## @param keycloakConfigCli.image.digest keycloak-config-cli container image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
1007 ## @param keycloakConfigCli.image.pullPolicy keycloak-config-cli container image pull policy
1008 ## @param keycloakConfigCli.image.pullSecrets keycloak-config-cli container image pull secrets
1012 repository: chainguard-private/keycloak-config-cli-iamguarded
1015 ## Specify a imagePullPolicy
1016 ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
1018 pullPolicy: IfNotPresent
1019 ## Optionally specify an array of imagePullSecrets.
1020 ## Secrets must be manually created in the namespace.
1021 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
1024 ## - myRegistryKeySecretName
1027 ## @param keycloakConfigCli.annotations [object] Annotations for keycloak-config-cli job
1030 ## @param keycloakConfigCli.command Command for running the container (set to default if not set). Use array form
1033 ## @param keycloakConfigCli.args Args for running the container (set to default if not set). Use array form
1036 ## @param keycloakConfigCli.automountServiceAccountToken Mount Service Account token in pod
1038 automountServiceAccountToken: true
1039 ## @param keycloakConfigCli.hostAliases Job pod host aliases
1040 ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
1043 ## Keycloak config CLI resource requests and limits
1044 ## ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
1045 ## @param keycloakConfigCli.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if keycloakConfigCli.resources is set (keycloakConfigCli.resources is recommended for production).
1047 resourcesPreset: "small"
1048 ## @param keycloakConfigCli.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
1059 ## keycloak-config-cli containers' Security Context
1060 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
1061 ## @param keycloakConfigCli.containerSecurityContext.enabled Enabled keycloak-config-cli Security Context
1062 ## @param keycloakConfigCli.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
1063 ## @param keycloakConfigCli.containerSecurityContext.runAsUser Set keycloak-config-cli Security Context runAsUser
1064 ## @param keycloakConfigCli.containerSecurityContext.runAsGroup Set keycloak-config-cli Security Context runAsGroup
1065 ## @param keycloakConfigCli.containerSecurityContext.runAsNonRoot Set keycloak-config-cli Security Context runAsNonRoot
1066 ## @param keycloakConfigCli.containerSecurityContext.privileged Set keycloak-config-cli Security Context privileged
1067 ## @param keycloakConfigCli.containerSecurityContext.readOnlyRootFilesystem Set keycloak-config-cli Security Context readOnlyRootFilesystem
1068 ## @param keycloakConfigCli.containerSecurityContext.allowPrivilegeEscalation Set keycloak-config-cli Security Context allowPrivilegeEscalation
1069 ## @param keycloakConfigCli.containerSecurityContext.capabilities.drop List of capabilities to be dropped
1070 ## @param keycloakConfigCli.containerSecurityContext.seccompProfile.type Set keycloak-config-cli Security Context seccomp profile
1072 containerSecurityContext:
1079 readOnlyRootFilesystem: true
1080 allowPrivilegeEscalation: false
1084 type: "RuntimeDefault"
1085 ## keycloak-config-cli pods' Security Context
1086 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
1087 ## @param keycloakConfigCli.podSecurityContext.enabled Enabled keycloak-config-cli pods' Security Context
1088 ## @param keycloakConfigCli.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
1089 ## @param keycloakConfigCli.podSecurityContext.sysctls Set kernel settings using the sysctl interface
1090 ## @param keycloakConfigCli.podSecurityContext.supplementalGroups Set filesystem extra groups
1091 ## @param keycloakConfigCli.podSecurityContext.fsGroup Set keycloak-config-cli pod's Security Context fsGroup
1095 fsGroupChangePolicy: Always
1097 supplementalGroups: []
1099 ## @param keycloakConfigCli.backoffLimit Number of retries before considering a Job as failed
1100 ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
1103 ## @param keycloakConfigCli.podLabels Pod extra labels
1104 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
1107 ## @param keycloakConfigCli.podAnnotations Annotations for job pod
1108 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
1111 ## @param keycloakConfigCli.nodeSelector Node labels for pod assignment
1112 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
1116 ## @param keycloakConfigCli.tolerations Tolerations for job pod assignment
1117 ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
1120 ## keycloak-config-cli availability-check configuration
1121 ## ref: https://github.com/adorsys/keycloak-config-cli#Configuration
1122 ## @param keycloakConfigCli.availabilityCheck.enabled Whether to wait until Keycloak is available
1123 ## @param keycloakConfigCli.availabilityCheck.timeout Timeout for the availability check (Default is 120s)
1128 ## @param keycloakConfigCli.extraEnvVars Additional environment variables to set
1135 ## @param keycloakConfigCli.extraEnvVarsCM ConfigMap with extra environment variables
1138 ## @param keycloakConfigCli.extraEnvVarsSecret Secret with extra environment variables
1140 extraEnvVarsSecret: ""
1141 ## @param keycloakConfigCli.extraVolumes Extra volumes to add to the job
1144 ## @param keycloakConfigCli.extraVolumeMounts Extra volume mounts to add to the container
1146 extraVolumeMounts: []
1147 ## @param keycloakConfigCli.initContainers Add additional init containers to the Keycloak config cli pod
1150 ## - name: your-image-name
1151 ## image: your-image
1152 ## imagePullPolicy: Always
1155 ## containerPort: 1234
1158 ## @param keycloakConfigCli.sidecars Add additional sidecar containers to the Keycloak config cli pod
1161 ## - name: your-image-name
1162 ## image: your-image
1163 ## imagePullPolicy: Always
1166 ## containerPort: 1234
1169 ## @param keycloakConfigCli.configuration keycloak-config-cli realms configuration
1170 ## NOTE: nil keys will be considered files to import locally
1175 ## "realm": "realm1",
1183 ## @param keycloakConfigCli.existingConfigmap ConfigMap with keycloak-config-cli configuration
1184 ## NOTE: This will override keycloakConfigCli.configuration
1186 existingConfigmap: ""
1187 ## Automatic Cleanup for Finished Jobs
1188 ## @param keycloakConfigCli.cleanupAfterFinished.enabled Enables Cleanup for Finished Jobs
1189 ## @param keycloakConfigCli.cleanupAfterFinished.seconds Sets the value of ttlSecondsAfterFinished
1190 ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/
1192 cleanupAfterFinished:
1195## @section Default init container parameters
1197## Default init Containers
1199defaultInitContainers:
1200 ## 'prepare-write-dirs' init container
1201 ## Copies writable directories to an empty dir volume in order to not break the application functionality
1204 ## @param defaultInitContainers.prepareWriteDirs.enabled Enable init container that copies writable directories to an empty dir
1207 ## Configure "prepare-write-dirs" init-container Security Context
1208 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
1209 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.enabled Enabled "prepare-write-dirs" init-containers' Security Context
1210 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in "prepare-write-dirs" init-containers
1211 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.runAsUser Set runAsUser in "prepare-write-dirs" init-containers' Security Context
1212 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.runAsGroup Set runAsGroup in "prepare-write-dirs" init-containers' Security Context
1213 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.runAsNonRoot Set runAsNonRoot in "prepare-write-dirs" init-containers' Security Context
1214 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.privileged Set privileged in "prepare-write-dirs" init-containers' Security Context
1215 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.readOnlyRootFilesystem Set readOnlyRootFilesystem in "prepare-write-dirs" init-containers' Security Context
1216 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.allowPrivilegeEscalation Set allowPrivilegeEscalation in "prepare-write-dirs" init-containers' Security Context
1217 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.capabilities.drop List of capabilities to be dropped in "prepare-write-dirs" init-containers
1218 ## @param defaultInitContainers.prepareWriteDirs.containerSecurityContext.seccompProfile.type Set seccomp profile in "prepare-write-dirs" init-containers
1220 containerSecurityContext:
1227 readOnlyRootFilesystem: true
1228 allowPrivilegeEscalation: false
1232 type: "RuntimeDefault"
1233 ## Keycloak "prepare-write-dirs" init container resource requests and limits
1234 ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
1235 ## @param defaultInitContainers.prepareWriteDirs.resourcesPreset Set Keycloak "prepare-write-dirs" init container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if defaultInitContainers.prepareWriteDirs.resources is set (defaultInitContainers.prepareWriteDirs.resources is recommended for production).
1237 resourcesPreset: "nano"
1238 ## @param defaultInitContainers.prepareWriteDirs.resources Set Keycloak "prepare-write-dirs" init container requests and limits for different resources like CPU or memory (essential for production workloads)
1249## @section Database parameters
1251## PostgreSQL chart configuration
1252## @param postgresql.enabled Switch to enable or disable the PostgreSQL helm chart
1253## @param postgresql.auth.postgresPassword Password for the "postgres" admin user. Ignored if `auth.existingSecret` with key `postgres-password` is provided
1254## @param postgresql.auth.username Name for a custom user to create
1255## @param postgresql.auth.password Password for the custom user to create
1256## @param postgresql.auth.database Name for a custom database to create
1257## @param postgresql.auth.existingSecret Name of existing secret to use for PostgreSQL credentials
1258## @param postgresql.auth.secretKeys.userPasswordKey Name of key in existing secret to use for PostgreSQL credentials. Only used when `auth.existingSecret` is set.
1259## @param postgresql.architecture PostgreSQL architecture (`standalone` or `replication`)
1264 postgresPassword: ""
1265 username: ig_keycloak
1267 database: iamguarded_keycloak
1270 userPasswordKey: password
1271 architecture: standalone
1274 repository: chainguard-private/postgres-iamguarded
1280 repository: chainguard-private/prometheus-postgres-exporter-iamguarded
1286 repository: chainguard-private/os-shell-iamguarded
1289## External PostgreSQL configuration
1290## All of these values are only used when postgresql.enabled is set to false
1291## @param externalDatabase.host Database host
1292## @param externalDatabase.port Database port number
1293## @param externalDatabase.user Non-root username for Keycloak
1294## @param externalDatabase.password Password for the non-root username for Keycloak
1295## @param externalDatabase.database Keycloak database name
1296## @param externalDatabase.schema Keycloak database schema
1297## @param externalDatabase.existingSecret Name of an existing secret resource containing the database credentials
1298## @param externalDatabase.existingSecretUserKey Name of an existing secret key containing the database user
1299## @param externalDatabase.existingSecretPasswordKey Name of an existing secret key containing the database credentials
1300## @param externalDatabase.annotations Additional custom annotations for external database secret object
1301## @param externalDatabase.extraParams Additional JDBC connection parameters appended to the JDBC URL (KC_DB_URL).
1307 database: iamguarded_keycloak
1311 existingSecretUserKey: ""
1312 existingSecretPasswordKey: ""