Skip to main content

openbox-core

Purpose

openbox-core is the data-plane orchestration service for OpenBox agents. It runs a single pod with 5 sibling containers that share lifecycle and localhost: an HTTP API server, three Temporal SDK workers (governance / attestation / observability), and a cron scheduler. All agent workflow execution flows through this pod.

Plane: Data plane.

Ports & endpoints

PortProtocolPurposeExposed via
8086HTTP/RESTCore API (called by backend + external)Istio Gateway
gRPC → externalTemporal SDK worker trafficCluster-internal (no exposed port)

Sibling openbox-core-codec runs as a separate rollout (not part of the 5-container pod):

  • Port 8443 HTTPS · Path /codec/api — payload codec for Temporal Web UI

Runtime

Pod topology — 5 containers per pod:

ContainerPurposeNotes
openbox-core-service-serverHTTP API :8086Public REST endpoints
openbox-core-service-governance-workerTemporal SDKGovernance-workflow task queue
openbox-core-service-attestation-workerTemporal SDKCryptographic attestation workflows
openbox-core-service-observability-workerTemporal SDKObservability + audit-log workflows
openbox-core-service-schedulercronScheduled workflow launcher

All 5 share pod lifecycle, filesystem, and localhost — a pod restart kills all 5.

PropertyValue (per-container)Value (per-pod total)
Resource requests200m CPU / 500 Mi RAM1 vCPU / 2.5 Gi RAM
Resource limits1 vCPU / 2 Gi RAM5 vCPU / 10 Gi RAM
HPA min → max pods1 → 5 (target CPU 70%)
Node placementGeneral-purpose CPU pool

Scaling pods 1 → 5 gives you 5 → 25 container instances total.

Configuration

Chart values keys (top-level openbox-core.*)

Authoritative reference: values-reference. Most-configured keys:

KeyPurpose
image.repository / image.tagContainer image (shared by all 5 containers)
autoscaling.*Pod-level HPA (scales all 5 containers together)
resourcesPer-container resources — total pod = sum of 5
redis.external.host / .portElastiCache / Memorystore endpoint (overrides in-cluster Redis)
temporal.modecloud or self-hosted — see Temporal variants
temporal.cloud.namespace / .address / .tlsSecretRefTemporal Cloud connection details
temporal.server.replicasSelf-hosted Temporal server pod count (default 4)
serviceAccount.annotationsIRSA for KMS access

Runtime env vars

  • TEMPORAL_ADDRESS — Temporal frontend gRPC endpoint (Cloud or self-hosted)
  • TEMPORAL_NAMESPACE — from temporal.cloud.namespace OR default openbox
  • REDIS_URL — Redis connection string
  • KMS_KEY_ARN — from values (envelope encryption)
  • OPA_URL, GUARDRAILS_URL, KEYCLOAK_URL — inter-service endpoints

IRSA / IAM permissions required (AWS)

Same subset as openbox-backend for KMS (Encrypt/Decrypt/GenerateDataKey/DescribeKey). No S3 permissions needed (only backend touches OPA bundles).

Dependencies

Downstream

TargetProtocolPurpose
temporal-frontendgRPC :7233Workflow start/signal/query (workers + scheduler)
openbox-backendHTTP/RESTAuth check, user context
opa-appHTTP/JSON :8181Authorization on agent operations
guardrails-apiHTTP/REST :8000ML content filter for agent I/O
llamafirewall-serverHTTP/REST :8000Deep prompt-injection detection
openbox-core-redisRedis TCP :6379Session/state cache
openbox-postgresqlJDBC :5432Persistent agent state
AWS KMSHTTPS AWS APIEnvelope encryption

Upstream

  • Istio Gateway (via ingress) — external clients
  • openbox-backend (cluster-internal) — for orchestration triggers

Deployment guidelines

Prod

  • Never disable any of the 5 containers — the chart treats them as one atomic pod. Disabling one silently breaks workflows.
  • autoscaling.maxReplicas: 5+ typical. Beyond 10, review Temporal task-queue backpressure first.
  • Pin image.tag — all 5 containers share the tag.
  • Use Temporal Cloud OR self-hosted (see Temporal variants); pick before install — migration mid-flight requires a maintenance window.

Local PoC

  • autoscaling.minReplicas: 1, maxReplicas: 1 — laptop can't afford 5 pods × 5 containers = 25 instances
  • Use in-cluster Redis (Bitnami)
  • Temporal mode: cloud if you have creds, else self-hosted with replicas: 1 (still 4 Temporal server pods but low resource limits)

Troubleshooting

Only 1 of 5 containers Ready, others CrashLoopBackOff → Temporal frontend unreachable. Workers can't connect. Check TEMPORAL_ADDRESS env var + Temporal frontend Service kubectl get svc -n temporal.

Pod stuck in Pending → Not enough node CPU. 5 vCPU limit per pod is heavy — check kubectl describe pod for Insufficient cpu events. Scale node group up OR reduce resources.limits.

Scheduler container idle — no workflows firing → Cron schedule config missing. Check kubectl logs deploy/openbox-core -c openbox-core-service-scheduler — should show Scheduler started with N cron jobs. If N=0, values-side scheduler config is empty.

Workflow starts but never completes → Worker container for the target queue is failing / lagging. kubectl logs deploy/openbox-core -c openbox-core-service-governance-worker --tail 50 and grep for errors. Task queue backpressure = need more pods (HPA up).

Guardrails-api errors flood logs → Downstream guardrails-api down or llamafirewall GPU unhealthy. Core does not fail-closed by default — agent runs continue with degraded safety. Fix guardrails-api first, then this stops.