Skip to content

Environment variables

Every environment variable dwpk actually reads, grepped from the three binaries' own main.go files so nothing here is invented. Flags (--metrics-bind-address, --leader-elect, and so on - see cmd/manager --help) are a separate mechanism and are not repeated here; the Helm chart's values.yaml maps most of them for you. Where a value corresponds to a Helm value, that mapping is noted.

dwpk-ui

The web UI and REST API. All variables are read once at process start (cmd/ui/main.go); nothing here is re-read while the process is running.

Variable Default Notes
DWPK__UI_LISTEN_ADDRESS :8080 (see DWPK__UI_PORT) Full host:port bind address. Takes precedence over DWPK__UI_PORT when both are set.
DWPK__UI_PORT 8080 Port only, on all interfaces. Ignored if DWPK__UI_LISTEN_ADDRESS is set.
DWPK__UI_KUBECONFIG in-cluster config Path to a kubeconfig file. Leave unset when running inside the cluster - the Pod's own ServiceAccount is used instead.
DWPK__UI_GATEWAY_HOST dwpk.example.com Hostname shown in a workspace's SSH endpoint (<workspace>@<gateway-host>). Maps to ui.gatewayHost in Helm.
DWPK__UI_BASE_URL none The UI's own externally reachable URL, used to derive <baseURL>/callback/<provider> when a provider's own redirect URL is not set, and as the base for password-reset links. Maps to ui.baseURL.
DWPK__UI_BASE_PATH none (root) Path prefix when the UI is served behind a proxy under a non-root path, e.g. /dwpk. Maps to ui.basePath.
DWPK__UI_SESSION_TTL 15m Idle session window, a Go duration (30m, 2h). Maps to ui.sessionTTL.
DWPK__UI_COOKIE_SECURE true Whether the session cookie is marked Secure. Only turn this off for a plain-HTTP local/dev deployment; never in production. Maps to ui.cookieSecure.
DWPK__UI_LOG_LEVEL info One of debug, info, warn, error. Maps to ui.logLevel.
DWPK__UI_LOCAL_AUTH_ENABLED false Turns on username/password login alongside OAuth2 (§7.8). Maps to ui.localAuth.enabled.
DWPK__UI_LOCAL_AUTH_NAMESPACE dwpk-system Namespace holding local user Secrets. Maps to ui.localAuth.namespace.
DWPK__UI_TOKEN_NAMESPACE dwpk-system Namespace holding API bearer token Secrets. Maps to ui.tokenNamespace.

Per-provider OAuth2 variables

Repeat the block below once per provider you enable, replacing <PROVIDER> with ENTRA_ID, GOOGLE, GITLAB, KEYCLOAK or GITHUB. A provider with none of its four required variables set is treated as not configured and is not offered on the login page.

Variable Required Notes
DWPK__UI_PROVIDER_<PROVIDER>_CLIENT_ID Yes OAuth2/OIDC client ID.
DWPK__UI_PROVIDER_<PROVIDER>_CLIENT_SECRET Yes OAuth2 client secret. Put this in a Secret, not plaintext values - see ui.oauth.existingSecret in docs/INSTALLATION.md.
DWPK__UI_PROVIDER_<PROVIDER>_ISSUER_URL Yes (all except GitHub) OIDC discovery issuer. GitHub has no OIDC discovery document and does not use this variable.
DWPK__UI_PROVIDER_<PROVIDER>_REDIRECT_URL No if DWPK__UI_BASE_URL is set Explicit callback URL. Derived as <baseURL>/callback/<provider> when omitted.
DWPK__UI_PROVIDER_<PROVIDER>_ADMIN_GROUPS No Comma-separated group names/object IDs (§7.9). A login whose ID token groups claim matches one of these gets the admin role for that session, regardless of the UserSpace's own spec.role. Unset (with _USER_GROUPS also unset) means group mapping is off - spec.role alone decides, as before this existed.
DWPK__UI_PROVIDER_<PROVIDER>_USER_GROUPS No Comma-separated group names/object IDs. A login matching one of these (and none of _ADMIN_GROUPS) gets the user role for that session.

GitHub has no group claim at all - it maps org/team membership through a separate API instead - so _ADMIN_GROUPS/_USER_GROUPS have no effect for DWPK__UI_PROVIDER_GITHUB_*. See docs/INSTALLATION.md for a worked Entra ID example of the group-mapping variables.

Helm maps these from ui.oauth.<provider>.* values; see docs/INSTALLATION.md's OAuth2 provider configuration section for the exact key names and the required Secret.

dwpk-manager (the operator)

Controllers, webhooks and the one-shot admin bootstrap Job read these. Most of the manager's configuration is flags, not environment variables - see cmd/manager --help or helm-dwpk/values.yaml's manager.args. Only the admin bootstrap options are environment variables, since they run inside a Helm post-install hook Job where flags are less convenient to template than Secret-backed env vars.

Variable Default Notes
DWPK__ADMIN_USERSPACE admin Name of the UserSpace created for the bootstrap admin.
DWPK__ADMIN_USERNAME admin Local username for the bootstrap admin login.
DWPK__ADMIN_EMAIL admin@dwpk.local Owner email recorded on the bootstrap UserSpace.
DWPK__ADMIN_PASSWORD generated Password for the bootstrap admin. Left unset, a random password is generated and written once to a throwaway Secret for you to read and delete - see the Helm install output. Set explicitly only for a scripted/demo environment; never check a real value into source control.

This bootstrap is idempotent: once the admin UserSpace and local user exist, re-running the Job (a Helm upgrade, for example) does nothing further.

Manager flags worth knowing

Two flags decide what a user sees as their SSH endpoint, and they interact:

Flag Helm value Notes
--gateway-service derived The gateway's own Service, as <namespace>/<name>. When that Service has a LoadBalancer address, the address is published in Workspace.status.endpoint. The chart sets this automatically whenever gateway.enabled is true; it is omitted otherwise.
--gateway-host manager.gatewayHost The fallback hostname, used when --gateway-service is unset, names a Service that does not exist, or names one with no LoadBalancer address yet.

Resolution order is hostname, then IP, then the fallback. A hostname wins because an internal AWS NLB publishes a hostname and no address, and the hostname keeps working when the address behind it is reassigned.

This exists because a cluster-internal Service DNS name (dwpk-gateway.dwpk-system.svc.cluster.local) is not resolvable from the VPN users connect over, so it cannot be pasted into ssh.

dwpk-gateway

The SSH gateway takes all of its configuration through command-line flags (--listen-address, --host-key-path, and the standard zap logging flags) rather than environment variables. See cmd/gateway --help or helm-dwpk/values.yaml's gateway.listenAddress, gateway.hostKey.path and gateway.extraArgs for the full list.