Helm Chart Reference

Overview

The claude-in-a-box Helm chart deploys a StatefulSet running Claude Code with 32+ SRE/DevOps tools into any Kubernetes cluster. It manages RBAC permissions, network policies, persistent storage, and health probes.

Chart Nameclaude-in-a-box
Version0.1.0
App Versiondev
Typeapplication
API Versionv2 (Helm 3 required)

Security Profiles

The chart supports three security profiles, selected via values overlay files. The default profile is readonly -- safe for production use.

Feature Readonly (default) Operator Airgapped
RBAC Level get, list, watch + delete pods, create exec, update deployments get, list, watch (readonly)
NetworkPolicy Egress DNS + HTTPS + K8s API DNS + HTTPS + K8s API DNS + K8s API only (no HTTPS)
Registry Source Public (DockerHub/GHCR) Public (DockerHub/GHCR) Private registry
Use Case Safe cluster inspection Active debugging / incident response Air-gapped / restricted environments
Values File values.yaml (default) values-operator.yaml values-airgapped.yaml

Values Reference

Complete reference for all configurable values. Descriptions are sourced from the -- comment annotations in values.yaml.

Key Type Default Description
replicaCountint1Number of replicas (StatefulSet)
image.repositorystringclaude-in-a-boxContainer image repository
image.pullPolicystringIfNotPresentImage pull policy
image.tagstring"dev"Image tag (overrides appVersion)
imagePullSecretslist[]Image pull secrets for private registries
nameOverridestring""Override the release name
fullnameOverridestring"claude-agent"Force resource names regardless of release name
serviceAccount.createbooltrueCreate a ServiceAccount
serviceAccount.namestring""ServiceAccount name (auto-generated if empty)
serviceAccount.automountServiceAccountTokenbooltrueAutomount API credentials
claudeModestring"interactive"Claude Code operating mode (interactive, remote-control, headless)
operator.enabledboolfalseEnable operator ClusterRole and ClusterRoleBinding
networkPolicy.enabledbooltrueCreate NetworkPolicy resource
networkPolicy.egress.dns.enabledbooltrueAllow DNS egress (UDP/TCP 53)
networkPolicy.egress.https.enabledbooltrueAllow HTTPS egress (TCP 443)
networkPolicy.egress.https.cidrstring"0.0.0.0/0"CIDR for HTTPS egress (Anthropic API)
networkPolicy.egress.k8sApi.enabledbooltrueAllow K8s API server egress (TCP 6443)
networkPolicy.egress.k8sApi.cidrstring"0.0.0.0/0"CIDR for K8s API server
podSecurityContext.runAsUserint10000User ID for container process
podSecurityContext.runAsGroupint10000Group ID for container process
podSecurityContext.fsGroupint10000Filesystem group for volume mounts
podSecurityContext.fsGroupChangePolicystringOnRootMismatchWhen to apply fsGroup ownership
podSecurityContext.runAsNonRootbooltrueReject containers running as root
resources.requests.memorystring"512Mi"Memory request for scheduling
resources.requests.cpustring"250m"CPU request for scheduling
resources.limits.memorystring"2Gi"Memory limit (caps burst)
resources.limits.cpustring"2000m"CPU limit (caps burst)
persistence.sizestring"1Gi"Storage size for PVC
persistence.storageClassNamestring""Storage class (empty = cluster default)
persistence.accessModestringReadWriteOnceAccess mode for PVC
livenessProbe.exec.commandlist["/usr/local/bin/healthcheck.sh"]Liveness probe command (pgrep -f claude)
livenessProbe.initialDelaySecondsint10Delay before first liveness check
livenessProbe.periodSecondsint30Interval between liveness checks
livenessProbe.timeoutSecondsint5Timeout for liveness check
readinessProbe.exec.commandlist["/usr/local/bin/readiness.sh"]Readiness probe command (claude auth status)
readinessProbe.initialDelaySecondsint10Delay before first readiness check
readinessProbe.periodSecondsint30Interval between readiness checks
readinessProbe.timeoutSecondsint10Timeout for readiness check
terminationGracePeriodSecondsint60Grace period for pod shutdown

RBAC Architecture

The chart creates a ServiceAccount with reader-tier RBAC by default. Operator-tier permissions are opt-in via operator.enabled: true.

RBAC Architecture

ServiceAccount with two-tier ClusterRole bindings. Operator role is conditional (dashed when disabled).

ServiceAccount claude-agent ClusterRoleBinding ClusterRole: reader Always created get, list, watch: pods, services, events, nodes namespaces, configmaps, PVCs apps/v1: deployments, statefulsets, daemonsets batch/v1 + networking.k8s.io: jobs, cronjobs, ingresses ClusterRoleBinding ClusterRole: operator Conditional (operator.enabled) delete: pods create: pods/exec update, patch: deployments, statefulsets

Network Policy

The chart creates a default-deny-all NetworkPolicy with selective egress rules. All ingress is blocked. Egress is allowed only to DNS, HTTPS (Anthropic API), and the Kubernetes API server. A CNI that enforces NetworkPolicy (like Calico) is required -- the default KIND CNI (kindnet) silently ignores these rules.

Network Policy

Default-deny with selective egress. Ingress is fully blocked.

claude-agent Pod DNS UDP/TCP 53 HTTPS TCP 443 (0.0.0.0/0) K8s API TCP 6443 (0.0.0.0/0) Ingress BLOCKED Requires CNI with NetworkPolicy support (Calico)

Template Files

The chart includes the following template files in helm/claude-in-a-box/templates/:

File Kind Description
statefulset.yamlStatefulSetMain workload with PVC template, probes, and security context
service.yamlServiceClusterIP service for internal pod access
serviceaccount.yamlServiceAccountPod identity with API token automount
networkpolicy.yamlNetworkPolicyDefault-deny with selective egress rules
clusterrole-reader.yamlClusterRoleRead-only RBAC (get/list/watch across resource types)
clusterrole-operator.yamlClusterRoleElevated RBAC for debugging (conditional on operator.enabled)
clusterrolebinding-reader.yamlClusterRoleBindingBinds reader ClusterRole to ServiceAccount
clusterrolebinding-operator.yamlClusterRoleBindingBinds operator ClusterRole to ServiceAccount (conditional)
_helpers.tplTemplate helpersReusable named templates for labels, names, and selectors
NOTES.txtPost-install notesUsage instructions displayed after helm install

Installation Examples

Default (Readonly Profile)

helm install (readonly)
$ helm install claude-agent ./helm/claude-in-a-box

Operator Profile

Adds pod delete, exec, and deployment update permissions for active debugging.

helm install (operator)
$ helm install claude-agent ./helm/claude-in-a-box -f helm/claude-in-a-box/values-operator.yaml

Airgapped Profile

Blocks external HTTPS egress and uses a private registry. For air-gapped or restricted environments.

helm install (airgapped)
$ helm install claude-agent ./helm/claude-in-a-box -f helm/claude-in-a-box/values-airgapped.yaml