Images
string
default:"ghcr.io/ricsam/r5d-chat-control-plane-community"
Control-plane image repository.
string
default:"(chart appVersion)"
Control-plane image tag. When empty, the chart’s
appVersion is used, so the
chart version pins the image published with it.string
default:"IfNotPresent"
Image pull policy for the control plane.
string
default:"ghcr.io/ricsam/r5d-chat-workspace"
Workspace image repository, used for every user pod the controller creates.
string
default:"(chart appVersion)"
Workspace image tag. When empty, the chart’s
appVersion is used.array
default:"[]"
Pull secrets for control-plane pods, for example
[{ name: ghcr-pull }]. This
does not apply to workspace pods; set workspace.imagePullSecret too.integer
default:"1"
Control-plane replica count.
object
default:"{}"
Node selector for the control-plane pod.
Core settings
string
default:"http://r5d-chat.local"
required
The exact external URL of the installation. Used for session cookies, auth
redirects, and the address workspaces use to call back into the control plane.
A mismatch causes login loops.
string
default:""
Name of a pre-created Secret holding the application credentials. Strongly
recommended for production. When set, the chart does not create a Secret and
the
secrets.* values are ignored.string
default:""
PostgreSQL connection string. Defaults to the bundled database when empty.
Only used when
existingSecret is empty.string
default:""
required
Session signing key of at least 32 characters. Required when
existingSecret
is empty.string
default:""
required
AES-256-GCM key of at least 32 characters that encrypts provider and OIDC
credentials. Required when
existingSecret is empty. Back it up with the
database; losing it makes stored credentials unreadable.string
default:""
One-time operator token required to create the first administrator. Set it
before exposing the installation publicly.
Service and ingress
string
default:"ClusterIP"
Service type for the control plane.
integer
default:"80"
Service port. It targets container port 3000.
boolean
default:"false"
Create an Ingress for the control plane.
string
default:"traefik"
Ingress class name.
string
default:"chat.example.com"
Hostname to route. Required when
ingress.enabled is true, and should match
the host in publicUrl.object
default:"{}"
Additional Ingress annotations, for example certificate issuer directives.
boolean
default:"false"
Allow provider and OIDC URLs that resolve to private, loopback, or link-local
addresses. Enable only for a trusted in-cluster or private-network service.
boolean
default:"false"
Allow plain HTTP provider URLs. This is normally paired with
allowPrivate=true for a cluster-local Service; keep it disabled for public
endpoints.MCP Apps
string
default:""
HTTPS origin template for interactive MCP Apps. Include exactly one
{server}
placeholder in the first DNS label, on a separate registrable domain from
publicUrl. Sets MCP_APPS_SANDBOX_ORIGIN and creates a separate sandbox
Deployment and Service on port 3002. Empty disables the sandbox.object
default:"{ cpu: 25m, memory: 64Mi }"
Resource requests for the sandbox container.
object
default:"{ cpu: 250m, memory: 256Mi }"
Resource limits for the sandbox container.
networkPolicy.enabled, the sandbox policy denies all
egress and permits ingress on TCP 3002, restricted by
networkPolicy.controlPlaneIngressFrom when configured.
Cloudflare Tunnel
Run a Cloudflare Tunnel connector next to the control plane to publish the installation without exposing an inbound port or provisioning TLS certificates yourself. The connector dials out to Cloudflare, so it works behind NAT and strict egress firewalls. Public hostnames and origin routing are configured remotely in Cloudflare (config_src: cloudflare), not in this chart. Point the tunnel’s public hostname
at the control-plane Service, for example
http://<release>-r5d-chat.<namespace>.svc.cluster.local:80.
publicUrl must still match the hostname users type in the browser, for
example https://chat.example.com. Cloudflare terminates TLS at its edge, so
keep the https:// scheme even though the tunnel forwards to the Service over
plain HTTP inside the cluster.ingress.enabled and cloudflared.enabled are independent. Enable only the
tunnel to publish exclusively through Cloudflare, or enable both to keep a
direct cluster-local entry point alongside it.
boolean
default:"false"
Deploy the
cloudflared connector.string
default:"cloudflared-tunnel"
Name of an existing Secret holding the tunnel connector token. Create it
separately so the credential is never stored in values files:
string
default:"token"
Key inside that Secret containing the token.
integer
default:"1"
Connector replicas. Each replica opens its own set of edge connections; use
two or more to survive a node failure without dropping the tunnel.
string
default:"cloudflare/cloudflared"
Connector image repository.
string
default:"2026.2.0"
Connector image tag. Pin it, and update deliberately, because
--no-autoupdate is set.string
default:"1"
Arbitrary value copied to a pod annotation. Change it to force a connector
restart, which is occasionally useful after editing remote tunnel routing.
object
Connector resource requests and limits.
Artifact storage
The control plane stores remote project/chat artifact bytes on one retainedReadWriteOnce claim mounted whole at /var/lib/r5d-chat/artifacts. It sets
ARTIFACT_STORAGE_PATH to that directory. Metadata and authorization live in
PostgreSQL; workspace home PVCs are not artifact storage.
string
default:"rook-ceph-block"
Storage class for the shared control-plane artifact PVC. It must support
ReadWriteOnce.string
default:"10Gi"
Requested size of the retained artifact PVC.
integer
default:"50000000"
Maximum artifact upload size in bytes.
Workspaces
string
default:"rook-ceph-block"
Storage class for per-user home PVCs. Must support
ReadWriteOnce.string
default:"5Gi"
Size of each user’s home volume. This applies at creation time; growing it
later affects only newly created workspaces.
integer
default:"1800"
Seconds of inactivity, with no active leases, before a workspace scales to
zero.
string
default:""
Optional RuntimeClass for workspace pods. Set to
kata or gvisor for a
stronger isolation boundary.string
default:""
Name of a pull secret attached to workspace pods. Required for private
workspace images.
object
default:"{}"
Node selector copied into every dynamically created workspace Deployment.
object
default:"{ cpu: 200m, memory: 512Mi }"
Resource requests for workspace pods.
object
default:"{ cpu: '2', memory: 2Gi }"
Resource limits for workspace pods. Raise the memory limit if agents run
builds or data processing.
object
default:"{ cpu: 50m, memory: 128Mi }"
Control-plane resource requests.
object
default:"{ cpu: 500m, memory: 512Mi }"
Control-plane resource limits.
Bundled PostgreSQL
boolean
default:"true"
Deploy the bundled single-replica PostgreSQL StatefulSet. Disable it to use an
external database.
string
default:"postgres:17.6-alpine"
PostgreSQL image. Version 17 is the tested baseline.
string
default:"r5d_chat"
Database user created on first start.
string
default:"r5d_chat"
Database name created on first start.
string
default:"r5d_chat"
Database password. Override it, or supply
POSTGRES_PASSWORD through
existingSecret.string
default:"rook-ceph-block"
Storage class for the database volume.
string
default:"2Gi"
Size of the database volume.
object
default:"{}"
Node selector for the bundled PostgreSQL StatefulSet. This is particularly
important with node-local storage classes.
Service account and network policy
boolean
default:"true"
Create a ServiceAccount with the Role needed to reconcile workspace objects.
string
default:""
Override the ServiceAccount name.
boolean
default:"true"
Create NetworkPolicies for the control plane and workspaces. Workspace ingress
is restricted to this release’s control plane and executor on TCP 7337.
Requires a NetworkPolicy-enforcing CNI; other policies can add access.
boolean
default:"true"
Allow workspace pods to reach public IPv4, excluding the configured
workspaceInternetExcept ranges (RFC1918, loopback, and link-local by
default). Setting false disables this internet rule, not DNS or the required
callback exception to this release’s control-plane pods on TCP 3000. It
prevents package downloads from the internet but does not create an air gap or
a URL-path allowlist. See the workspace network
boundary.Reference values file
The chart shipsvalues-r5d.yaml as a worked example of a hardened install with
Kata isolation and private images: