--- title: Configuration sidebar_label: Configuration --- This guide covers the major configuration options for the Zitadel Helm chart. For a complete list of options, see the [values.yaml](https://github.com/zitadel/zitadel-charts/blob/main/charts/zitadel/values.yaml) in the chart repository. ## Global Settings Global settings affect multiple components of the deployment. ### Replica Count Set the number of Zitadel replicas: ```yaml replicaCount: 2 ``` ### Container Images #### Zitadel Image Configure the Zitadel container image: ```yaml image: repository: ghcr.io/zitadel/zitadel tag: "v4.9.1" pullPolicy: IfNotPresent ``` #### Login Image Configure the Login container image: ```yaml login: image: repository: ghcr.io/zitadel/login tag: "v4.9.1" pullPolicy: IfNotPresent ``` ### Pod Security Context Configure security settings for the pods. These settings apply globally to all pods in the deployment: ```yaml podSecurityContext: runAsNonRoot: true runAsUser: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault securityContext: runAsNonRoot: true runAsUser: 1000 readOnlyRootFilesystem: true privileged: false allowPrivilegeEscalation: false capabilities: drop: - ALL ``` ## Zitadel Settings ### ExternalDomain The domain where Zitadel is accessible. This is used for generating URLs, cookies, and OIDC endpoints. ```yaml zitadel: configmapConfig: ExternalDomain: "zitadel.example.com" ExternalPort: 443 ExternalSecure: true ``` | Setting | Description | |------------------|----------------------------------------------| | `ExternalDomain` | The public domain name (no protocol or port) | | `ExternalPort` | The public port (443 for HTTPS, 80 for HTTP) | | `ExternalSecure` | Whether the external connection uses HTTPS | ### TLS TLS is terminated at the ingress controller. The Zitadel containers do not handle TLS termination: ```yaml zitadel: configmapConfig: TLS: Enabled: false ``` ### FirstInstance / Bootstrapping Configure the initial Zitadel instance created during setup. ```yaml zitadel: configmapConfig: FirstInstance: Org: Human: UserName: "admin" Password: "SecurePassword123!" FirstName: "Zitadel" LastName: "Admin" Email: "admin@zitadel.example.com" PasswordChangeRequired: false ``` #### Machine User for System API For programmatic access, configure a system user with RSA keys: ```yaml zitadel: configmapConfig: SystemAPIUsers: systemuser: KeyData: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... -----END PUBLIC KEY----- ``` Generate the RSA private key: ```bash openssl genrsa -out system-user-private.pem 2048 ``` Extract the public key: ```bash openssl rsa -in system-user-private.pem -pubout -out system-user-public.pem ``` ## Secrets ### Referenced Secrets Reference Kubernetes Secrets for sensitive values: ```yaml zitadel: masterkeySecretName: zitadel-masterkey configSecretName: zitadel-config-secret ``` Create the masterkey secret: ```bash kubectl create secret generic zitadel-masterkey \ --from-literal=masterkey="$(tr -dc A-Za-z0-9