Skip to content

Configuration ​

The Web edition (kubron-server) is configured through environment variables, command-line flags and Helm chart values. This reference lists the variables operators use most. The full operations guide in the repository covers the rest.

Durations use Go syntax (30s, 15m, 12h). Boolean variables accept 1, true, yes or on. Many settings also have a command-line flag (see kubron-server --help), but secrets and tokens are environment-only. The Helm chart exposes many of them as values, and anything else can go through kubron.extraEnv.

Core ​

VariableDefaultPurpose
KUBRON_LISTEN127.0.0.1:8080HTTP listen address.
KUBRON_ALLOW_REMOTEoffRequired to listen on a non-loopback address. Unsafe without a TLS proxy: the server does not serve TLS.
KUBRON_DATA_DIR~/.kubronData directory for file storage (used when no database is configured).
KUBRON_REPLICA_IDhostname + random suffixUnique replica identity: letters, digits, - and _, up to 63 characters.

Storage and encryption ​

VariableDefaultPurpose
KUBRON_DATABASE_URLempty (file storage)PostgreSQL 14+ connection string. Setting it turns on service mode: users, clusters, sessions and audit live in PostgreSQL. Prefer the variable over the --database-url flag, whose value is visible in the process list.
KUBRON_DB_LISTEN_URL—Direct PostgreSQL connection for LISTEN/NOTIFY. Required behind transaction-mode PgBouncer, which does not support LISTEN.
KUBRON_SECRET_KEY—Encryption key (id:base64, 32 random bytes) for kubeconfigs and credentials at rest. Required whenever a database is used.
KUBRON_SECRET_KEY_PREVIOUS—Comma-separated earlier keys, used while rotating with kubron-server rekey.
KUBRON_ALLOW_KEY_MISMATCHoffRecovery only: start even though the key does not match the stored data, for example to export the audit log after losing the key. Cluster secrets stay unavailable.

First administrator ​

VariableDefaultPurpose
KUBRON_SETUP_TOKEN—Token of at least 16 characters required to create the first administrator over the network in service mode. Environment only, there is no flag.
KUBRON_ADMIN_PASSWORD—Password read by kubron-server create-admin (alternative to standard input). Never pass a password as an argument.

HTTP, proxy and sessions ​

VariableDefaultPurpose
KUBRON_PUBLIC_URL—Public origin of Kubron, for example https://kubron.example.com, used as the return address of OIDC browser-callback sign-in. https only in production; http is accepted for localhost development. No path, credentials, query or fragment. An invalid value stops startup.
KUBRON_TRUST_PROXYoffTrust X-Forwarded-Proto from the reverse proxy and mark the session cookie Secure. Enable only when the server is reachable solely through the proxy.
KUBRON_TRUSTED_PROXY_HOPS1How many trusted proxies stand in front of the server. The client address is taken from the right of X-Forwarded-For, for example 2 for ingress-nginx behind a cloud load balancer.
KUBRON_TRUSTED_PROXIES—Comma-separated CIDRs or addresses of trusted proxies. When set, it replaces the hop count: the peer must be in the list, otherwise the header is ignored.
KUBRON_ALLOWED_HOSTSempty (check off)Comma-separated accepted Host values (name or IP, optional port, IPv6 in brackets); other hosts get 421. *.pf.<domain> is allowed automatically when port-forward is on.
KUBRON_CSP_REPORT_ONLYoffSend the Content-Security-Policy as Report-Only while rolling it out: violations are reported by the browser, nothing is blocked.
KUBRON_SESSION_TTL12hLifetime of a web session, a Go duration such as 8h or 24h.

Access limits ​

VariableDefaultPurpose
KUBRON_DISABLE_EXECoffDisable pod terminals and the node shell for everyone.
KUBRON_DISABLE_NODE_SHELLoffDisable the node shell for everyone.
KUBRON_DISABLE_PORT_FORWARDoffDisable port-forward for everyone.
KUBRON_MAX_TERMINALS8Terminals per user. 0 means unlimited.
KUBRON_MAX_LOG_STREAMS20Log streams per user. 0 means unlimited.
KUBRON_MAX_PORT_FORWARDS10Port-forwards per user. 0 means unlimited.
KUBRON_TERMINAL_MAX_DURATION8hMaximum lifetime of a terminal. 0 means unlimited.
KUBRON_TERMINAL_IDLE_TIMEOUT30mClose a terminal after this time without input. 0 means unlimited.

Port-forward ​

VariableDefaultPurpose
KUBRON_PF_BASE_DOMAIN—Base domain for server-mode port-forward; each stream gets https://{id}.pf.<base-domain>. Use a separate registrable domain, and provide a wildcard DNS record and certificate for *.pf.<base-domain>. Without it, port-forward is off in service mode.
KUBRON_PF_SCHEMEhttpsScheme of stream addresses. http is allowed only for local development.
KUBRON_PF_IDLE_TIMEOUT / KUBRON_PF_MAX_DURATIONserver defaultsIdle and absolute lifetime of a port-forward stream.

Network policy and cluster sign-in ​

VariableDefaultPurpose
KUBRON_CLUSTER_ADDR_POLICYpermissive in service modeWhich cluster API and identity-provider addresses the server may connect to: permissive blocks loopback, link-local and cloud metadata; strict also blocks private networks; off disables the check (a warning is logged). A single-user loopback server has no check by default.
KUBRON_CLUSTER_ADDR_ALLOW_CIDRS—Exceptions to the policy: comma-separated CIDRs or addresses. They never open cloud metadata addresses.
KUBRON_HELM_ADDR_POLICYstrictThe same policy for Helm repository and OCI registry addresses (SSRF protection): strict, permissive or off.
KUBRON_HELM_ALLOW_CIDRS—Exceptions for Helm, for example an internal repository on 10.20.0.0/16.
KUBRON_GKE_OAUTH_CLIENT_ID—OAuth client ID that lets users sign in to GKE with their own Google account. Without it GKE uses a service-account key.
KUBRON_GKE_OAUTH_CLIENT_SECRET—Secret of that client. Keep it in a Secret. The server refuses a secret without a client ID.

Operations, audit and logging ​

VariableDefaultPurpose
KUBRON_DRAIN_DELAY—Pause between SIGTERM and closing WebSocket connections, so the load balancer can stop routing to the replica. At most 60s.
KUBRON_METRICS_LISTENempty (off)Address of the separate Prometheus /metrics listener. Do not expose it through the ingress.
KUBRON_AUDIT_RETENTION0 (forever)How long audit entries are kept in PostgreSQL. A non-zero value must be at least 24h.
KUBRON_AUDIT_STDOUToffAlso write every audit entry as a JSON line to stdout, for an external log collector. The database log stays the primary one.
KUBRON_CLUSTER_CHECK_INTERVAL30sHow often cluster connectivity is checked in the background. 0 disables the check.
KUBRON_LOG_LEVELinfodebug, info, warn or error.
KUBRON_LOG_FORMATjsonjson, or text for readable development output.

Secrets and key rotation ​

Use a secret manager or orchestrator-managed Secret for database credentials and encryption keys. Do not put production secrets in Helm values or command-line arguments.

The encryption key format is id:base64, where the base64 value encodes exactly 32 random bytes. For rotation, configure the new key as KUBRON_SECRET_KEY, provide the old key via KUBRON_SECRET_KEY_PREVIOUS, then run kubron-server rekey. Remove previous keys only after re-encryption has completed and been verified.

Network and TLS ​

The server does not terminate TLS. Use a trusted reverse proxy or ingress, configure trusted proxy headers only when direct access to the pod is restricted, and keep the metrics listener off the public ingress.

See the full deployment guide and metrics reference.

Released under the Apache-2.0 License.