Skip to main content
Version: next

Decision matrix

Choose the access path deliberately

Choose the access path deliberately.
PathUse it whenWhat the operator createsWatch for
IngressYou already have an ingress controller path and only need standard Kubernetes ingress semantics.An Ingress resource targeting the public OpenBao Service.This is usually a termination-oriented model and is less expressive than Gateway API for shared-platform routing.
Direct Service exposureYou want the simplest L4 path, often through a cloud load balancer or private network boundary.A LoadBalancer or NodePort-style Service configuration.You own more of the perimeter behavior yourself and lose the richer route-level policy surface.

Decision matrix

Where TLS should terminate

Where TLS should terminate.
PatternUse it whenWhy it fits or does not fit
Edge termination with backend TLSYou need HTTP-aware controls, policy enforcement, or centralized certificate handling at the edge.This is valid, but you must be explicit about how trust is re-established between the edge and OpenBao.
Temporary operator-managed trustYou are standing up a development or internal evaluation environment quickly.This is convenient, but it is not the Hardened production contract and should not become the long-term default by inertia.

Diagram

Exposure paths

The service boundary is a choice between where traffic enters, where TLS terminates, and how much of the edge behavior the operator is expected to own.

Representative configurations

Configure

Expose OpenBao through Gateway API

yaml

spec:
gateway:
enabled: true
tlsPassthrough: true
hostname: bao.example.com
gatewayRef:
name: main-gateway
namespace: gateway-system

Start here when Gateway API is your edge standard. For most production clusters, use TLS passthrough unless you have a specific need for termination at the Gateway.

Match the TLS mode to the exposure path

Reference table

TLS mode pairings

TLS mode pairings.
TLS modeGood exposure fitWhy
ACMEGateway passthrough or direct public exposureOpenBao must remain the TLS endpoint to complete ACME challenge and certificate lifecycle correctly.
OperatorManagedDevelopment or internal evaluation paths onlyThis is easy to start with, but the operator becomes the certificate authority and that is not the Hardened production posture.

External TLS Secret contract

What `tls.mode: External` actually expects

For the cluster-facing TLS path, the operator reads fixed same-namespace Secret names:

  • <cluster-name>-tls-ca with key ca.crt
  • <cluster-name>-tls-server with keys tls.crt and tls.key

The server certificate must chain to the CA bundle and cover the internal service name openbao-cluster-<cluster-name>.local, plus any configured ingress hostname, gateway hostname, and spec.tls.extraSANs.

Do not confuse edge TLS Secrets with the cluster server TLS Secrets

spec.ingress.tlsSecretName only controls the Secret referenced by the managed Ingress resource. It does not rename the Secrets that the OpenBao Pods use for their own listener certificate and CA trust.

Traefik v3 backend trust

If you use Traefik v3 with backend TLS validation, configure a ServersTransport that trusts the generated CA Secret for the cluster. This is an implementation detail of the ingress path, not a reason to change the underlying TLS model.

Continue service boundary setup

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.