Skip to content

Helm values reference

Cloudkeel-DD installs from the d-detective Helm chart. This page covers the values you’ll most often set. Run helm show values <chart> for the complete, authoritative list shipped with your version.

ValueDefaultNotes
images.backend.repositorydriftdetective/ddetective-backendBackend/worker/beat image (one image, three commands)
images.backend.tagchart appVersionPin to a specific version in production
images.frontend.repositorydriftdetective/ddetective-frontendUI image
images.frontend.tagchart appVersion
imagePullSecrets[]Only needed for a private registry without workload-identity pull

The frontend proxies /api to the backend itself at runtime, so no Ingress controller is required to reach a fully working app: helm install then kubectl port-forward svc/<release>-frontend 3000:3000 is enough. Enable ingress for a stable, TLS-terminated hostname instead of port-forwarding (typical for production).

ValueDefaultNotes
ingress.enabledfalseSet true for a stable hostname/TLS
ingress.className""Your ingress controller’s class (only used when enabled)
ingress.hostd-detective.example.comSet this to your DNS name (only used when enabled)
ingress.tls.enabled / .secretNamefalse / ""Enable and supply a TLS secret in production
frontend.service.typeClusterIPSet LoadBalancer/NodePort for external access without ingress
ValueNotes
secrets.fernetKeyImmutable credential-encryption key. Set once; never change. See Secrets
secrets.jwtSecretSigns user session tokens. Rotating it logs everyone out
ValueNotes
postgresql.enabledSet false in production and point at managed PostgreSQL
postgresql.auth.passwordBundled-PostgreSQL password (pilot only)
External DB / RedisSupply host/port/credentials per your chart version’s keys
ValueNotes
Scan scheduleConfigurable per integration in the UI, or a global cadence
Worker replicasIncrease for more parallel scans; beat stays at 1

On chart 0.3.4 and newer, an unkeyed install scans unmetered for its trial window and then converts to Free: 1 enabled scope, 3 users and every feature. The timer uses a local date comparison against the values below: nothing phones home, there is no licence server, and an air-gapped install behaves identically. Charts 0.3.0–0.3.3 instead stopped new scans when the window ended.

ValueDefaultNotes
config.licenseTrialDays30Days from the later of the first workspace or the first enforcing upgrade before the window closes
config.licenseExpiresAt""An explicit UTC date (2026-12-31 or 2026-12-31T23:59:59Z). When set it wins over licenseTrialDays: this is how a window is extended
config.licenseEnforcementEnabledtrueSet false to run the timer in reporting-only mode: state is still computed and shown, nothing is blocked
secrets.licenseKey""A licence key, applied at install/upgrade time. Optional - without one the install runs its pilot window and then the Free allowance. Wins over a key entered in Settings. Chart 0.3.4+. See Licensing

The three config.* timer values live in the ConfigMap. The licence key is passed through a Kubernetes Secret; handle it as a bearer token.

Changing them is a plain helm upgrade. The backend, worker and beat pods carry a checksum annotation over this ConfigMap, so they roll themselves; there is no separate restart to remember.

Keep a version-controlled production-values.yaml (secrets referenced from your secret manager, never committed) and apply with helm upgrade --install ... -f production-values.yaml. See Upgrades.