Cluster requirements
Baseline capabilities OpenBox depends on. Everything listed here is cloud-agnostic — the chart works on EKS, AKS, GKE, self-managed K8s (kops, kubeadm, Rancher, OpenShift), and hobby setups (Minikube, kind, k3s) with equivalent capabilities.
Kubernetes
| Requirement | Value |
|---|---|
| K8s version | ≥ 1.27 (chart kubeVersion: ">=1.27.0-0") |
| Container runtime | containerd (modern K8s default) |
| CNI | any CNI supporting NetworkPolicy (AWS VPC CNI / Calico / Cilium / Flannel + NetworkPolicy addon) |
| DNS | CoreDNS (default) |
Node capacity
Minimum for a small prod deploy:
- ≥ 8 worker nodes (or equivalent) — see System requirements → cluster sizing
- Total: ~24 vCPU, ~128 GB RAM
- 1 node with GPU (A10G / L4 / T4 24 GB) if you enable the LlamaFirewall deep prompt-injection detector — otherwise disable in values
You do NOT need Karpenter or a specific autoscaler — the chart uses HorizontalPodAutoscaler (v2 API), which works with any cluster-autoscaling mechanism.
StorageClass
- At least one
StorageClasssupportingReadWriteOncevolumes - Recommended: gp3 on AWS, StandardSSD_LRS on Azure,
pd-balancedon GCP, Longhorn/Rook on-prem - Chart uses default StorageClass unless overridden per-service
Verify:
kubectl get storageclass
# Expect: at least one with (default) annotation
Ingress controller
Any of the following works — chart supports them all via global.ingress.type:
| Type | Chart setting | Notes |
|---|---|---|
| Istio | global.ingress.type: istio | Chart default. Requires Istio installed + namespace labeled istio-injection=enabled |
| NGINX | global.ingress.type: nginx | Emits Ingress resources with ingressClassName: nginx |
| AWS ALB | global.ingress.type: nginx + ALB Ingress Controller | Handles annotations |
| Traefik | global.ingress.type: traefik | Emits Ingress with Traefik annotations |
| None (dev) | global.ingress.type: none | Chart skips ingress; you port-forward |
Verify at least one is present:
kubectl get ingressclass
Add-ons required
| Add-on | Why | Verify |
|---|---|---|
metrics-server | HPA scaling | kubectl top nodes returns data |
| Certificate manager (optional) | Automatic TLS | kubectl get clusterissuer (cert-manager) OR kubectl get certificate -A |
| Secret sync (optional) | Pull from Vault / AWS SM | kubectl get externalsecret -A (ESO) |
| Argo Rollouts (optional) | Canary strategy for guardrails | `kubectl get crd |
If Argo Rollouts CRD is missing, set openbox-guardrails-service.rollout.enabled: false in values (chart falls back to Deployment).
Cluster-level permissions (customer-owned)
Chart pods need these Kubernetes RBAC permissions inside the OpenBox namespace:
- Standard workload permissions (Deployments, Services, ConfigMaps, Secrets)
- ServiceAccount + annotations (for IRSA on AWS or Workload Identity on GKE/AKS)
- HorizontalPodAutoscaler + PodDisruptionBudget
- Optionally: NetworkPolicy (chart emits some — customer may layer more)
The chart does NOT need cluster-wide admin during install — namespace-admin is sufficient.
What OpenBox does not need on the cluster
- ❌ ArgoCD — you can install with plain
helm install - ❌ Karpenter — HPA suffices; any cluster autoscaler works
- ❌ Cilium ClusterMesh — chart is single-cluster
- ❌ Service mesh (Istio is default but optional; NGINX works)
- ❌ GPU operator preinstalled — only needed if using LlamaFirewall vllm