Skip to main content
Version: next
Default production model

Multi-tenant mode is the recommended production operating model for OpenBao Operator. Use Single-Tenant Mode for dedicated environments where one team directly owns one namespace and does not need the default tenant-onboarding boundary.

Diagram

Control-plane split

Namespace introduction and tenant guardrails stay with the Provisioner. Workload reconciliation stays with the tenant-scoped Controller. That separation prevents one long-running identity from both granting and consuming tenant access.

Decision matrix

Control-plane security boundaries

Control-plane security boundaries.
SurfacePrimary ownerWhy it stays separateIf you shortcut it
Workload reconciliationControllerThe Controller stays namespace-scoped and only acts where onboarding already introduced access.A cluster-wide controller increases blast radius for config and Secret-facing mistakes.
Tenant user accessTenant-scoped rolesUsers can manage clusters without automatically gaining Secret read access.Operators and tenant users start sharing too much of the same trust surface.
Backup and restore executionJob-specific identitiesDay 2 jobs need narrower, time-bounded capabilities than the main controller.The controller role quietly becomes a universal credential for routine and destructive operations.
Onboarding is a real handoff, not just a prerequisite list item

In multi-tenant mode, the controller does not start mutating OpenBaoCluster resources in a namespace until the Provisioner has written the tenant RoleBinding. If OpenBaoTenant and OpenBaoCluster arrive together, reconciliation pauses and requeues until that handoff exists instead of failing with transient status-patch errors.

Reference table

Default tenant roles

Default tenant roles.
RoleScopeUse it forWhat it does not allow
openbaocluster-editor-roleNamespaceManaging OpenBaoCluster resources in an onboarded tenant namespace.It does not grant broad Secret read access.
openbaotenant-editor-roleNamespaceSelf-service onboarding through OpenBaoTenant in the same namespace.It does not allow arbitrary cross-namespace onboarding.

Decision matrix

Isolation layers to validate

Isolation layers to validate.
LayerDefault modelValidate thisGo deeper
Network policyOpenBao workloads default toward restricted ingress, and backup or restore jobs use their own network contract.Confirm cross-tenant traffic is blocked and backup egress is intentionally scoped.Network security
Quota and namespace guardrailsOnboarding applies default tenant quotas, limit ranges, and guardrail labels before the first cluster lands.Inspect the tenant namespace for the expected quota, limit range, and labels after onboarding.Onboard the target namespace
Backup storage isolationUse object-storage credentials or prefixes that do not overlap with other tenants.Make sure backup credentials cannot list or read other tenants' snapshot paths.Backup operations

Validate the shared-operator boundary

Inspect

Inspect tenant guardrails after onboarding

bash

kubectl get openbaotenant <name> -n <namespace> -o yaml
kubectl get rolebinding,resourcequota,limitrange,networkpolicy -n <target-namespace>

This gives you the fast check: the onboarding request is provisioned, the namespace-scoped RBAC exists, and the expected tenant guardrails were actually introduced. The tenant RoleBinding is also the controller handoff marker for workload reconciliation.

Verify

Check tenant access stays scoped

bash

kubectl auth can-i create openbaoclusters.openbao.org -n <target-namespace> --as <tenant-user>
kubectl auth can-i get secrets -n <target-namespace> --as <tenant-user>

Expect the normal tenant editor path to allow cluster lifecycle work without granting broad Secret reads by default.

Supplemental policy engines are optional

Kyverno or Gatekeeper can still add cluster-wide guardrails, but they are not the primary tenant-isolation mechanism here. The primary controls are the split-controller model, namespace introduction through OpenBaoTenant, built-in RBAC, and admission policy enforcement.

Go deeper

Next release documentation

You are reading the unreleased main docs. Use the version menu for the newest published release, or check the release notes for what is already out.

Was this page helpful?

Use Needs work to open a structured GitHub issue for this page. The Yes button only acknowledges the signal locally.