Owner: Eng. Review cadence: whenever a tier-level capability changes (scheduler, secrets backend, key-management story, compliance scope).
MeterBox ships in three operating models. Same Helm chart, same APIs, same data-plane image — only where it runs and who runs it differs.
| Tier | Operator | Cluster | Best for |
|---|---|---|---|
| Cloud | MeterBox | Shared multi-tenant control plane + per-(org, env) data planes | SaaS teams that don't want to operate Kubernetes |
| Self-Managed | You | Your existing Kubernetes (EKS, GKE, AKS, k3s, OpenShift, on-prem) | Data residency, regulatory control, zero outbound deps |
| Managed (sovereign) | MeterBox SRE | Single-tenant cluster in your sovereign cloud / region | Defense, public sector, fintech, healthcare with FedRAMP / HIPAA / GDPR-grade requirements |
The customer-facing summary lives at the Deployment section on the home
page (data sourced from
src/web/data/tiers.json). This document is the operator-facing
runbook that backs those promises.
All three tiers ship the same surface:
/v1/* data-plane API (customers, plans, metering, entitlements,
credits, coupons, webhooks, ledger)./cp/* control plane (auth, MFA, SSO, audit, retention, env
lifecycle, backup mirror).README.md.Differences below are purely operational.
Self-Managed and Managed run a dedicated control + data plane per tenant org. That's the value — and the constraint:
For the Self-Managed tier specifically, also note:
/cp/scim/v2/* and /cp/sso/* on the
Self-Managed control plane, and the quarterly access-review snapshot
(GET /cp/access-review) is yours to download — no data leaves your
cluster to produce it, which is what most enterprise security reviewers
ask for first.# 1. Mirror the images into your registry (air-gapped clusters).
docker pull ghcr.io/<owner>/meterbox/control-plane:<tag>
docker pull ghcr.io/<owner>/meterbox/data-plane:<tag>
docker tag ghcr.io/<owner>/meterbox/control-plane:<tag> your-registry.example.com/meterbox/control-plane:<tag>
docker tag ghcr.io/<owner>/meterbox/data-plane:<tag> your-registry.example.com/meterbox/data-plane:<tag>
docker push your-registry.example.com/meterbox/control-plane:<tag>
docker push your-registry.example.com/meterbox/data-plane:<tag>
# 2. Configure values.
cp deploy/helm/meterbox/values.yaml my-values.yaml
# Edit: images.controlPlane / dataPlane, ingress.host, secrets.*, ...
# 3. Install.
helm install meterbox deploy/helm/meterbox -f my-values.yaml -n meterbox
| Value | Default | Notes |
|---|---|---|
images.controlPlane / dataPlane |
GHCR | Point at your registry mirror in air-gapped clusters |
images.pullSecretName |
unset | Required if the registry is private |
secrets.adminApiKey |
unset | Legacy admin-key gate; rotate yourself |
controlPlane.appBaseUrl |
empty | Where the SPA is served (used for reset links, SSO redirect) |
controlPlane.ingress.host |
meterbox.local |
The ingress hostname for the cp / spa |
postgres.bundled |
true |
Must stay true — in-cluster Postgres is the supported store |
redis.bundled |
true |
Same rule |
warmPool.size / warmPool.regions |
3 / 3 regions | Pre-warmed slots per region (see warm-pool service) |
backupMirror.enabled |
false |
Opt in to the encrypted off-cluster mirror |
backupMirror.key |
empty | 32-byte AES-256-GCM key (64 hex chars) — cluster-wide default |
backupMirror.defaultTarget.kind |
stub |
stub / s3 / gcs / azure |
Per-tenant overrides for the backup target are also available via
PATCH /cp/organizations/me/backup-target — see
backup-mirror.js.
controlPlane.ingress.tls lets
you point at an existing Secret; cert-manager / your own PKI plug in
there.The Managed tier is Self-Managed run by MeterBox SRE. The customer chooses the region (AWS GovCloud, GCP Assured, Azure Government, EU-only AWS, or on-prem) and the operating cluster is single-tenant — no other customer's data ever lands on it.
Customers in this tier:
src/control-plane/services/backup-mirror.js
for the envelope-encryption seam.GET /cp/audit/export) plus an ongoing batched push handled by SRE.The operator-side procedures behind these promises — provisioning, on-call,
upgrades, backup/restore drills, key rotation, SIEM cron-push samples for
Splunk/Datadog/S3, and VPC-peering shapes (peered / Transit Gateway /
air-gap) — live in docs/operator-runbook.md.
| Tier | SOC 2 | HIPAA | FedRAMP | ISO 27001 | GDPR data residency |
|---|---|---|---|---|---|
| Cloud | Anchor cert (in progress — see docs/compliance/) |
— | — | Roadmap | EU shared cluster planned |
| Self-Managed | Inherits customer's controls | HIPAA-ready (customer signs BAA with their cloud) | Customer-led, on customer infra | Roadmap | Inherent (your cluster, your region) |
| Managed (sovereign) | Anchor cert + customer's controls | Yes (with BAA) | Moderate — target | Yes (target) | Yes — region-pinned |
Detailed control narratives live in
docs/compliance/soc2-evidence-map.md and
docs/compliance/audit-trail-architecture.md.
These are not gaps to close — they are explicit non-goals so the operating model stays clear:
fixed_rate tax provider, which runs fully in-cluster
with zero egress./v1/* and /cp/* endpoints; the differences are operational, not
product.src/web/data/tiers.json — single source of truth for the
customer-facing tier descriptions