| TLS everywhere (backend / mTLS) | The public edge terminates TLS; in-cluster hops stay HTTP. A single trusted-tenant lab gains little from intra-cluster mTLS, and it adds a cert-rotation surface. | Untrusted in-cluster workloads, or a compliance requirement for encryption-in-transit between pods. |
| Full RBAC / tenant isolation | The tenancy boundary is LiteLLM (virtual keys/budgets), not the K8s namespace; tenants consume a /v1 endpoint, not a namespace. Per-tenant namespace + ResourceQuota + RBAC + NetworkPolicy is the baseline, but multi-team RBAC, SCIM, and audit are not wired. | More than one team shares the cluster; the multi-tenancy/governance milestone (home SSO + a self-service key portal). |
| Rate limiting at the gateway | LiteLLM enforces per-key TPM/RPM and budgets (the economic limit). A separate edge rate-limit (e.g. agentgateway/MCP) is not configured. | A public-facing or MCP-exposed surface needs abuse protection independent of per-key budgets. |
| Fail-closed budgets (SR3) | The lab runs allow_requests_on_db_unavailable: true (availability-first): if Postgres is down, requests pass un-metered. Fail-closed is a profile knob requiring CloudNativePG HA (instances ≥ 3) + a Redis-backed budget/rate cache. | The prod profile, where overspend risk outweighs availability; rides the HA hardening work. |
| SLO breach alerting | SLOs are recorded and dashboarded but Alertmanager is disabled; the SLOs are baseline-only (one model, one GPU). | First multi-replica/multi-model serving ⇒ per-model SLOs + alerting. |