DIAL Deployment Manager Backend configuration
Deployment Manager Backend configures cluster access, image builds, workload lifecycles, storage, and authentication through Spring Boot properties and environment variables. This reference is for platform engineers who deploy the backend. For the settings on DIAL Admin and in the cluster, start with Configuration overview.
Version scope
Defaults below are checked against Backend 0.22.0 application.yml, with behavior described in that release's configuration reference. The YAML is authoritative where its defaults differ from the reference tables: for example, Knative startup is 60 seconds and informer resync is 600 seconds.
The development reference is newer than this release and removes the NIM configuration. The 0.22.0 reference table lists KServe's informer interval as K8S_NIM_DEPLOYMENT_INFORMER_RESYNC_INTERVAL_SEC, but the released YAML reads K8S_KSERVE_DEPLOYMENT_INFORMER_RESYNC_INTERVAL_SEC; the tables below follow the YAML.
Spring configuration
Environment variables, external YAML/properties, command-line arguments, and Java system properties can supply configuration. SPRING_CONFIG_ADDITIONAL_LOCATION=file:/config/override.yml adds an external file. Normal Spring precedence applies; external files do not override higher-priority environment variables or command-line options.
Full Kubernetes templates can be overridden through Spring configuration, including service accounts, pod security, volumes, annotations, and resource defaults. For example:
app:
knative-service-config:
spec:
template:
spec:
serviceAccountName: managed-workload
automountServiceAccountToken: false
Kubernetes connection and RBAC
| Variable or property | Default | Description |
|---|---|---|
K8S_CONNECT_TYPE | CONFIG_FILE | CONFIG_FILE or TOKEN. |
app.kubernetes.config_file.kube-config | ${user.home}/.kube/config | Kubeconfig path for file-based access. Mount the file and override this property when needed. |
K8S_DEPLOY_CONTEXT | — | Kubeconfig context for managed resources. |
K8S_MASTER_URL | — | Kubernetes API URL; required in token mode. |
K8S_OAUTH_TOKEN | — | Kubernetes credential; required in token mode. |
K8S_BUILD_NAMESPACE | default | Namespace for build, copy, and analysis jobs. |
The backend needs permissions in each enabled workload namespace, not only its own namespace. The upstream RBAC reference covers jobs, pods/logs/events, secrets, Knative Services, NIMService, and InferenceService resources. Workload metrics additionally use pod proxy access and metrics.k8s.io; Cilium enforcement needs policy permissions. The full security-model guide includes the broader bindings for these features.
Security
| Variable | Default | Description |
|---|---|---|
CONFIG_REST_SECURITY_MODE | none | oidc, basic, or none. Use oidc for Admin's forwarded user tokens. |
SECURITY_ROLES_MAPPING | {"ConfigAdmin":["FULL_ADMIN"],"admin":["FULL_ADMIN"]} | Default mapping from identity-provider roles to backend roles. |
CLAIMS_EMAIL_KEY | unique_name | Default email claim. |
SECURITY_USER_CLAIM | oid | Default principal claim; Keycloak commonly uses sub instead. |
SECURITY_REQUIRE_EMAIL | false | Require an email claim. |
DISABLE_SWAGGER_AUTHORIZATION | false | Disable Swagger UI authorization. |
FULL_ADMIN allows modifying operations. READ_ONLY_ADMIN is the read-only backend role. Configure these mappings on Deployment Manager independently of the Admin Frontend role names and Core admin rules. Basic authentication uses Spring's spring.security.user.name and spring.security.user.password properties.
Identity providers
Configure one or more named providers. The table uses property names; environment equivalents follow Spring binding, for example PROVIDERS_KEYCLOAK_ISSUER, PROVIDERS_KEYCLOAK_JWKSETURI, and PROVIDERS_KEYCLOAK_ROLECLAIMS.
| Property | Description |
|---|---|
providers.<name>.issuer | Accepted issuer(s), matching the token's iss. |
providers.<name>.jwk-set-uri | JWKS URL for signature validation. |
providers.<name>.user-info-endpoint | User-info endpoint for opaque tokens, as an alternative to JWKS validation. |
providers.<name>.audiences | Accepted aud values. |
providers.<name>.role-claims | Comma-separated claim paths from which roles are read. |
providers.<name>.roles-mapping | Provider-specific role mapping, merged with defaults; the provider wins for overlapping keys. |
providers.<name>.principal-claim | Override the principal claim for this provider. |
providers.<name>.email-claims | Email claim paths; used by providers that require them, such as GCP. |
providers.<name>.aliases | Azure issuer aliases. |
Without an effective role mapping, authenticated requests are denied with 403. See the OIDC example for a Keycloak configuration aligned with Admin.
API-key authentication
API-key authentication is optional and requires OIDC security mode. The backend validates an Api-Key header through Core's GET /v1/user/info. It does not maintain its own store of API keys.
| Variable | Default | Description |
|---|---|---|
API_KEY_ENABLED | false | Accept Core API keys alongside OIDC tokens. |
API_KEY_CORE_URL | — | Required Core base URL when enabled. |
API_KEY_CACHE_TTL_SECONDS | 60 | Cache lifetime for successful introspection. Revocation can take up to this interval to be observed. |
API_KEY_CACHE_MAX_SIZE | 10000 | Maximum cached introspection results. |
API_KEY_REQUEST_TIMEOUT_MS | 3000 | Core introspection timeout, in milliseconds. |
API_KEY_ROLES_MAPPING | — | Maps project-key roles to backend roles. |
API_KEY_STARTUP_PROBE | true | Probe Core at startup; unreachable Core aborts startup. |
Project-key callers use API_KEY_ROLES_MAPPING. JWT-rooted per-request keys use the default OIDC role, principal, and email mappings instead. At least one of those role mappings must be nonempty. When both Authorization and Api-Key are present, the token path takes precedence.
Core non-success responses and malformed user-info responses become 401; transport failures become 503. Failures are not cached. See the upstream API-key reference for the two response shapes and mapping examples.
Database
The backend stores image definitions, deployment state, and audit revisions in its database. Flyway applies migrations at startup; Hibernate validates the schema.
| Variable | Default | Description |
|---|---|---|
DATASOURCE_VENDOR | H2 | H2, POSTGRES, or MS_SQL_SERVER. |
DATASOURCE_AUTH_TYPE | basic | basic, azure, or gcp. |
H2_FILE | ./deployment_manager | H2 file path. |
H2_OPS | CIPHER=AES;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE | H2 connection options. |
H2_DATASOURCE_MASTER_KEY | — | H2 encryption master key. |
H2_DATASOURCE_ENCRYPTED_FILE_KEY | — | H2 encrypted file key. |
H2_DATASOURCE_PASSWORD | — | H2 password. The H2 user is sa. |
POSTGRES_HOST, POSTGRES_PORT | localhost, 5432 | PostgreSQL endpoint. |
POSTGRES_DATABASE, POSTGRES_OPS | testdb, empty | Database and JDBC query options. |
POSTGRES_DATASOURCE_USERNAME, POSTGRES_DATASOURCE_PASSWORD | postgres, postgres | PostgreSQL basic credentials. |
MS_SQL_SERVER_HOST, MS_SQL_SERVER_PORT | localhost, 1433 | SQL Server endpoint. |
MS_SQL_SERVER_DATABASE, MS_SQL_SERVER_OPS | testdb, encrypt=false; | Database and connection options. Use encrypted transport in production. |
MS_SQL_SERVER_DATASOURCE_USERNAME, MS_SQL_SERVER_DATASOURCE_PASSWORD | sa, SQLServerPassword1 | SQL Server basic credentials. |
SPRING_JPA_HIBERNATE_DDL_AUTO | validate | Schema validation strategy. |
SPRING_FLYWAY_ENABLED | true | Enable migrations for the selected vendor. |
AUTH_AZURE_TYPE | none | Azure authentication type: none, credential, cli, or managed. |
AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET | — | Azure credentials when required by the selected authentication type. |
Warning
H2 is intended for development and testing. Its file-copy backup/restore is unreliable; use PostgreSQL or SQL Server for production and keep database backups together with the cluster and registry recovery plan. Replace the example/default database credentials.
SQL Server's upstream configuration recommends a case-sensitive, accent-sensitive collation such as SQL_Latin1_General_CP1_CS_AS. Standard Spring datasource properties can override the generated JDBC URL. Migration locations are selected from datasource.vendor; the DB_VENDOR name in the upstream documentation table is not used by the 0.22.0 YAML.
Image builds and registries
| Variable or property | Default | Description |
|---|---|---|
DOCKER_REGISTRY | test-docker-registry | Registry into which images are built or copied. Set it for the deployment. |
DOCKER_REGISTRY_PROTOCOL | https | Registry transport. |
DOCKER_REGISTRY_AUTH | NONE | NONE or BASIC. |
DOCKER_REGISTRY_USER, DOCKER_REGISTRY_PASSWORD | — | Credentials for basic registry authentication. |
TRUSTED_PRIVATE_REGISTRIES | — | JSON array of source registries: registry, optional protocol, authScheme, user, and password. |
AUTO_PULL_SECRET_ENABLED | true | Create and attach pull secrets for credentialed primary/trusted registries used by image-based deployments and chained transformer images. |
TRUSTED_PRIVATE_GIT_REPOS | — | JSON array of scoped Git credentials; see Private Git repositories. |
GIT_CLONE_IMAGE | alpine/git:2.52.0 | Clone container image; needs Git and an SSH client for SSH access. |
app.builder-rootless-image | moby/buildkit:v0.27.1-rootless | Rootless BuildKit image. |
app.builder-root-image | moby/buildkit:v0.27.1 | Privileged root builder image. |
app.analyser-image | anchore/syft:v1.40.0 | Image analyzer. |
app.copy-image | quay.io/skopeo/stable:v1.21.0 | Image copy/push tool. |
app.docker-config-path | /kaniko/.docker/config.json | Credential mount path inside build containers. |
IMAGE_NAME_FORMAT | app-%s | Built image name; must contain %s for the definition ID. |
RESOURCE_NAME_PREFIX | Empty | Prefix for generated resources. Do not change it on an existing installation: existing images and Kubernetes resources will no longer be found under their expected names. |
PIPELINE_RUNNER_MAX_LOG_COUNT, PIPELINE_RUNNER_MAX_LOG_LENGTH | 10000, 10000 | Limits on build-log entries and entry length. |
SECRETS_VOLUME_MOUNT_PATH | /etc/secrets | Secret-file mount location for managed workloads. |
The MCP proxy image variables select the stdio wrapper executable artifacts. They do not select the BuildKit image or the MCP server's own image.
Private Git repositories
Entries use host and optional path to scope credentials. HTTPS/HTTP credentials use user and token; SSH credentials use sshKeyPath and sshKnownHostsPath, with files mounted into the backend. Store credential values in secrets, for example Helm manager.secrets.
[
{"host":"git.example.com","path":"team/service-a","user":"builder","token":"<REPOSITORY_TOKEN>"},
{"host":"git.example.com","path":"team","user":"builder","token":"<GROUP_TOKEN>"}
]
An exact host wins over parent domains, then the longest matching host wins. Within that host, an exact repository path wins over a group prefix, which wins over a host-wide credential. Host matching is case-insensitive; paths are case-sensitive. Duplicate (host, path, authentication type) scopes fail startup in 0.21.0 and later. See Backend 0.21.0.
Build and workload templates
The following Spring properties expose the remaining build defaults and full Kubernetes specs. Their structure is in the release YAML; external configuration can override individual fields.
| Property | Default / purpose |
|---|---|
app.image-label | latest |
app.image-build-timeout-sec, app.image-build-stop-timeout-sec | 300, 45 seconds |
app.image-build-logs-size-limit | 1000 |
app.heartbeat-period-sec | 30 seconds |
app.max-error-log-lines, app.max-error-log-chars | 20, 1000 |
app.build.secrets.git | Credential/config filenames and mount locations used by build jobs. |
app.builder-job-config, app.analyzer-job-config, app.copy-image-job-config | Kubernetes Job templates, with backoffLimit: 0, no service-account token mount, and restartPolicy: Never. |
app.init-builder-container-config, app.builder-root-container-config, app.builder-rootless-container-config | Clone/build container specs, including commands, mounts, and security contexts. The root builder is privileged; the rootless builder runs as UID/GID 1000. |
app.push-container-config, app.analyzer-container-config, app.copy-image-container-config, app.builder-secret-config | Push/analyze/copy container and build Secret templates. |
app.knative-service-config, app.knative-service-container-config | Full Knative Service and container specs. Default container requests: 250m CPU, 250M memory, 500M ephemeral storage; limits: 1000m, 4G, 1G. |
app.inference-service-config, app.text-classification-transformer-container-config | KServe predictor and optional transformer specs. |
app.nim-service-config, app.nim-service-expose-ingress-config | NIMService and ingress specs in 0.22.0. |