Skip to main content

k8shell Chart

The k8shell Helm chart is the base deployment for k8shell. It includes default configuration for all services and acts as the foundation for any k8shell installation. For the open-source edition, only OSS services are enabled by default. Services that require Early Access — such as the frontend console, API server, and session recording — are present in the chart but disabled; enabling them requires a valid license file.

Configuration reference

The sections below document every parameter accepted by the chart's values.yaml. Fields shared across charts — imageRegistry, certManager, postgresql, nats, and secret-valued parameters — are documented on the Common Fields page.

Top-level

Top-level fields in values.yaml.

ParameterDescription
authEnabledEnable JWT authentication for all inter-service communication. Default: true
tokenExpirationLifetime of issued JWT tokens, in seconds. Default: 600
grpc.roundRobinEnable client-side round-robin load balancing for gRPC connections between services. Services that expose a gRPC API will use a headless Service so clients can resolve all pod IPs. Default: true
imageRegistryPrivate container registry for image pulls. See imageRegistry.
certManagerTLS certificate issuance via cert-manager. See certManager.
postgresqlPostgreSQL backend for identity, session, and provisioner services. See postgresql.
natsNATS message broker for inter-service communication. See nats.
sshProxySSH proxy service configuration. See sshProxy.
identityIdentity and authentication service configuration. See identity.
provisionerWorkspace provisioner service configuration. See provisioner.
frontendWeb console configuration. See frontend.
apiServerREST API server configuration. See apiServer.
sessionSession state and recording service configuration. See session.

sshProxy

The SSH proxy service handles all inbound SSH connections and brokers workspace provisioning.

FieldDescription
replicasNumber of SSH proxy pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/ssh-proxy
image.tagContainer image tag. Default: v0.13.4
proxyProtocolEnable PROXY protocol support for preserving client IPs when behind a load balancer. Default: false
serverKeySSH host key. See secret fields.
writeOptionsSSH banner display options. See sshProxy.writeOptions.
publishSshFailuresNATS publishing of SSH authentication failures. See sshProxy.publishSshFailures.
recordingSession recording for SSH connections. See sshProxy.recording.
loadBalancerLoadBalancer Service exposure settings. See sshProxy.loadBalancer.
nodePortNodePort Service exposure settings. See sshProxy.nodePort.

sshProxy.writeOptions

Defines the information that should be provided on ssh connection to the user.

FieldDescription
showProvisionInfoShow workspace provisioning details in the SSH banner. Default: false
showPulseShow a progress pulse while a workspace is starting. Default: true
showPercentageShow provisioning progress as a percentage. Default: true
showErrorsShow user-facing errors in the SSH banner. Default: true
showSystemErrorsShow internal system errors in the SSH banner. Default: true

sshProxy.publishSshFailures

Defines whether ssh fialures will be published over NATS. This is required when SSH Shield service is present in the architecture to block IP addresses on external access interface.

FieldDescription
subjectNATS subject on which failures are published. Default: ssh.failures
publicIPOnlyOnly publish failures originating from public IP addresses. Default: true

sshProxy.recording

Controls session recording for SSH connections. Requires the session service to be enabled.

FieldDescription
recordShellRecord interactive shell sessions. Default: false
recordExecRecord exec channel sessions. Default: false
recordDirectTCPIPRecord direct-tcpip (port-forward) sessions. Default: false

sshProxy.loadBalancer

Expose the SSH proxy via a Kubernetes LoadBalancer Service.

FieldDescription
enabledEnable the LoadBalancer Service. Default: false
annotationsAnnotations to apply to the LoadBalancer Service (e.g. cloud provider-specific settings). Default: {}
portExternal port on the LoadBalancer Service. Default: 22

sshProxy.nodePort

Expose the SSH proxy via a Kubernetes NodePort Service.

FieldDescription
enabledEnable the NodePort Service. Default: false
portNodePort value (30000–32767). Default: 30022

identity

The identity service handles user authentication, JWT issuance, and credential management.

FieldDescription
replicasNumber of identity pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/identity
image.tagContainer image tag. Default: v0.14.3
usersList of statically defined users. Each entry requires username, uid, and gid. See user fields below. Default: Single admin user
remoteProvidersList of remote identity provider services the identity service can delegate authentication to. Each entry requires address (host:port) and optionally serverName for TLS. Default: []
jwtIssuerJWT token signing and lifetime configuration. See identity.jwtIssuer.
kubernetesLeader election and service account token issuance. See identity.kubernetes.

identity.jwtIssuer

JWT token issuer configuration.

FieldDescription
expiryLifetime of JWT tokens issued by the identity service. Default: 60m
privateKeyRSA/EC private key used to sign JWT tokens. See secret fields. Default: {}
signingMethodJWT signing algorithm (e.g. RS256, ES256). See secret fields. Default: {}

identity.kubernetes

Kubernetes integration for service account token issuance. See credential helpers.

FieldDescription
saToken.enabledEnable on-demand Kubernetes service account token issuance via the TokenRequest API. Default: true
saToken.ttlRequested lifetime for issued service account tokens. Kubernetes enforces a minimum of 10 minutes. Default: 1h
saToken.audiencesAudiences embedded in issued service account tokens. Default: [https://kubernetes.default.svc.cluster.local]

User fields

Each entry in identity.users supports the following fields:

FieldRequiredDescription
usernameYesLogin name for the user.
uidYesPOSIX user ID (minimum 1).
gidYesPOSIX group ID (minimum 1).
fullnameNoDisplay name.
emailNoEmail address.
blueprintsNoList of blueprint names the user may access. Use ["*"] to allow all.
sudoNoGrant the user passwordless sudo inside the workspace.
shellNoDefault login shell (e.g. /bin/bash).
rolesNoList of k8shell roles assigned to the user (e.g. admin, workspace-user).
organizationNoLogical organization or tenant the user belongs to.
publicKeyNoSSH public key for public-key authentication.

provisioner

The provisioner manages the full lifecycle of workspace pods.

FieldDescription
replicasNumber of provisioner pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/provisioner
image.tagContainer image tag. Default: v0.14.9
k8shelld.image.repositoryImage repository for the k8shelld sidecar injected into workspace pods. Default: ghcr.io/k8shell-io/k8shelld
k8shelld.image.tagImage tag for k8shelld. Default: v0.15.6
targetNamespaceRequired. Namespace in which workspace pods are created.
includeBlueprintSamplesInclude the sample blueprints (samples.yaml) alongside the base blueprints (base.yaml). The base blueprints are always included. Default: true
defaultCustomBlueprintBlueprint name used when a repository does not define a custom blueprint. Default: base
blueprintFilesConfigMapsList of ConfigMap names whose files are mounted into /app/blueprints alongside the built-in blueprint files. Default: []
injectNamespacesNamespaces where workspace injection is permitted. Use ["*"] for cluster-wide injection (grants a ClusterRole). Omit or leave empty to disable injection. Default: disabled
workspaceStorageClassStorage class used for workspace persistent volumes. Default: ""
nats.provisionBucketTTLTTL for entries in the NATS KV provisioning bucket. Default: 48h
extraEnvExtra environment variables injected into the provisioner pod. Names must not conflict with reserved variables (DEFAULT_REGISTRY_HOST, NATS_K8SHELL_PASSWORD, JWT_SIGNING_METHOD, DEFAULT_K8SHELLD_IMAGE, etc.). Default: []
defaultRegistryDefault container registry for workspace image pulls. See provisioner.defaultRegistry.
shellsShell session behavior for provisioned workspaces. See provisioner.shells.
saTokenSA token credential helper configuration. See provisioner.saToken.

provisioner.defaultRegistry

Default container registry for workspace images.

FieldDescription
hostDefault registry hostname. See secret fields. Default: {}

provisioner.privateRegistry

Private container registry for workspace image pulls.

FieldDescription
enabledEnable a private container registry for workspace image pulls. Default: false
hostPrivate registry hostname. See secret fields. Default: {}
usernamePrivate registry username. Default: {}
passwordPrivate registry password. Default: {}
certCA certificate for the private registry. Default: {}

provisioner.shells

Shell session behavior within provisioned workspaces.

FieldDescription
allowSessionDetachAllow clients to detach from an active PTY shell session without terminating it. Default: false
detachedTTLHow long a detached session is kept alive before automatic termination. Default: 30m
allowUnlimittedTTLAllow clients to set an unlimited TTL for detached sessions. Default: false

provisioner.saToken

SA token credential helper for Kubernetes API access inside workspaces.

FieldDescription
enabledEnable the SA token credential helper, which provides workspaces with Kubernetes API access. Default: true
cacheTokensCache retrieved service account tokens to reduce Kubernetes API server load. Default: false

frontend

The web console for k8shell. Disabled by default — requires Early Access.

FieldDescription
enabledEnable the frontend service. Default: false
replicasNumber of frontend pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/frontend
schemeURL scheme used for the frontend. One of http or https. Default: http
hostHostname at which the frontend is reachable. Default: localtest.me
sessionCookieHTTP session cookie configuration. See frontend.sessionCookie.

frontend.sessionCookie

HTTP session cookie settings for the web console.

FieldDescription
secureSet the Secure flag on the session cookie. Default: false
httpOnlySet the HttpOnly flag on the session cookie. Default: true
sameSiteSameSite policy for the session cookie. One of Strict, Lax, or None. Default: Strict
maxAgeSecondsSession cookie lifetime in seconds. Default: 86400
pathCookie path scope. Default: /api/v1
domainCookie domain scope. Default: ""

apiServer

The k8shell REST API. Disabled by default — requires Early Access.

FieldDescription
enabledEnable the API server. Default: false
replicasNumber of API server pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/api-server
image.tagContainer image tag. Default: v0.15.1
logging.requestHeadersLog incoming request headers. Default: false
logging.responseHeadersLog outgoing response headers. Default: false

session

Session state and terminal recording service. Disabled by default — requires Early Access.

FieldDescription
enabledEnable the session service. Default: false
replicasNumber of session pod replicas. Default: 1
image.repositoryContainer image repository. Default: ghcr.io/k8shell-io/session
image.tagContainer image tag. Default: v0.13.1
janitorExpired session cleanup settings. See session.janitor.
recordingTerminal session recording configuration. See session.recording.

session.janitor

Background process that sweeps expired sessions.

FieldDescription
ttlHow long after the last heartbeat a session is considered dead and swept by the janitor. Default: 5m
intervalHow often the janitor sweep runs. Default: 1m
batchSizeMaximum number of sessions the janitor processes per sweep. Default: 100

session.recording

Terminal session recording configuration.

FieldDescription
enabledEnable terminal session recording (asciinema v2 format). Default: false
gzipCompress recording files with gzip. Default: false
persistentVolumeClaimA PersistentVolumeClaim for recording storage. See: session.recording.persistentVolumeClaim.

session.recording.persistentVolumeClaim

Pesrsistent volume claim to store recording data.

FieldDescription
installCreate a PersistentVolumeClaim for recording storage. Default: false
storageClassNameStorage class for the recordings PVC. Default: ""
sizeSize of the recordings PVC. Default: 10Gi
annotationsAnnotations to apply to the recordings PVC. Default: {}