Skip to content

Configuration overview

Choose how to configure networking, data stores, sandboxes, authentication, and advanced settings for self-hosted Dreadnode.

Everything in the Configure group is chart configuration. It is declarative, it is applied by a redeploy, and it rolls pods. Dreadnode exposes the same chart settings through three configuration interfaces:

InterfaceUse it forConfiguration shape
HelmExisting Kubernetes clustersUmbrella-chart values overlay
Admin ConsoleInteractive Embedded Cluster installs and editsLabeled fields under Config
KOTS ConfigValuesAutomated Embedded Cluster installationReplicated ConfigValues YAML

Settings that live in the running product instead — model deployments, credentials, users, organizations, signup rules — are not here. See Model deployments and Users and organizations.

Every configuration section below uses the same three tabs. Your selection follows you across this section. A KOTS ConfigValues file uses the Admin Console field’s internal item name, not the Helm value path. Every ConfigValues scalar is a string, including numbers and booleans; password items use valuePlaintext so KOTS encrypts them during installation.

Start with the domain, scheme, ingress class, and resource preset on this page. Use the focused guides for settings that need additional infrastructure or verification.

The domain appears in every URL Dreadnode generates, including OAuth redirects, presigned S3 URLs, and password reset links.

Set both values in your Helm overlay:

global:
domain: dreadnode.example.com
scheme: https # http (default) or https

Set both values correctly before first use. When you change either value, redeploy the release and access Dreadnode through the newly configured URL. Before changing an Embedded Cluster install from HTTP to HTTPS, create the TLS Secret and follow TLS certificates.

The chart emits standard Kubernetes Ingress resources. Set the class to the controller that should reconcile them:

global:
ingress:
className: traefik
annotations: {}
httpsRedirect: auto # auto | traefik | none

Global annotations cascade to the API, frontend, and MinIO Ingress resources. Use subchart-specific annotations only when one route needs different controller behavior.

Choosing https decides what URLs Dreadnode generates. It does not by itself stop the ingress controller answering on port 80, so a bookmarked http:// link still loads a working UI whose API calls travel in cleartext. The httpsRedirect setting is what closes that:

ValueBehavior
autoDefault. Renders a Traefik redirect Middleware when an enabled Ingress resolves to class traefik. Covers Embedded Cluster, which bundles Traefik.
traefikAlways renders it. Use when Traefik is the cluster’s default class and you left className empty.
noneRenders nothing. Use only when a load balancer or proxy ahead of the cluster already redirects.

On a Helm install using another controller, the chart cannot render a portable redirect, so you own it through annotations. For ingress-nginx:

global:
ingress:
className: nginx
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
dreadnode-api:
config:
network:
trustedProxyHops: 1

Dreadnode reads the client address this many hops from the right of X-Forwarded-For. The default of 1 is correct when your ingress controller is the only thing in front of the platform. Add one for each additional load balancer or CDN. Setting it too low attributes activity to your load balancer instead of the user; setting it too high lets a client spoof its own address in the audit trail.

Item submission integrations deliver findings to external systems — Linear, Jira, bug bounty platforms, and arbitrary webhooks. Turn them off if findings must not leave your network:

dreadnode-api:
config:
integrations:
enabled: false

This is a hard stop rather than a display preference. The integrations API refuses every request while it is off, so a user driving the API directly cannot submit either, and a submission already in progress when you apply the change is recorded as failed instead of being delivered.

Existing connections and submission history are kept. Turning integrations back on makes them reachable again with nothing to reconfigure — but read the audit trail first if you switched off in response to an incident, because the history is unreachable through the product while the switch is off.

Bundled PostgreSQL, ClickHouse, and object storage each get their own volume:

dreadnode-base:
postgresql:
primary:
persistence:
size: 8Gi
storageClass: '' # empty uses the cluster default
clickhouse:
persistence:
size: 10Gi
minio:
persistence:
size: 10Gi

Size these before the first deploy. Growing a volume afterward requires a StorageClass with allowVolumeExpansion plus a manual edit, and shrinking one is not possible at all.

ClickHouse is the volume that fills first, because every agent run writes trace spans to it. If you would rather cap growth than add disk, see the retention settings in Operations.

global:
resourcesPreset: small # small | medium | large

The preset applies a component-specific resource profile across the release:

PresetSuggested deployment sizeAPI requestsAPI limits
smallUp to about 50 users250m, 1536Mi500m, 2Gi
mediumAbout 50–200 users500m, 2Gi1000m, 3Gi
largeMore than 200 users1000m, 3Gi4000m, 8Gi

The small preset is the default. See Install with Helm — Resource guidance for cluster capacity guidance.

Keep your overlay in source control and apply it with helm upgrade:

Terminal window
helm upgrade dreadnode oci://registry.replicated.com/dreadnode/dreadnode \
--version <version> \
--namespace <namespace> \
-f values.yaml

For settings without a dedicated Admin Console field or ConfigValues item, use Advanced Helm Values. For every available Helm value and its default, pull the chart’s values file:

Terminal window
helm show values oci://registry.replicated.com/dreadnode/dreadnode --version <version>