Release Notes
Release notes summarize user-visible changes, breaking changes, and migration requirements for each MaaS version.
RHOAI to MaaS Release Mapping
This table maps each supported Red Hat OpenShift AI (RHOAI) release to the corresponding MaaS component version.
| RHOAI Version | MaaS Version | RHOAI Image Tag | Status | Notes |
|---|---|---|---|---|
| 3.5 | v0.2.1 | v3.5 |
GA | Multi-tenancy; body-based routing; xKS support; see Upgrade Guide |
| 3.4 | v0.1.1 | v3.4 |
GA | Subscription-based access; Tenant CR; see Upgrade Guide |
| 3.3 | v0.0.2 | v3.3 |
Tech Preview | ModelsAsService CR added to DSC; operator-managed deployment |
| 3.2 | v0.0.2 | v3.2 |
Tech Preview | Tier-based access; standalone deploy (modelsAsService not in DSC schema) |
Image registries:
- Upstream (ODH):
quay.io/opendatahub/maas-api:<tag>,quay.io/opendatahub/maas-controller:<tag> - Downstream (RHOAI):
registry.redhat.io/rhoai/odh-maas-api-rhel9:<tag>,registry.redhat.io/rhoai/odh-maas-controller-rhel9:<tag>
For dependency version requirements (OCP, Kuadrant/RHCL, Gateway API), see Version Compatibility.
v0.2.1
Release Date: TBD
Breaking Changes
X-MaaS-Tenant header eliminated (RHOAIENG-70517)
- The X-MaaS-Tenant header is no longer sent or expected. Tenant identity is now derived from the AITenant CR and namespace context. Clients and middleware that depend on this header must be updated.
AITenant automatic RBAC bindings removed
- AITenant.spec.rbac is deprecated and ignored. Existing manifests that still include the field remain schema-valid, but the controller no longer creates RoleBindings from it. The controller still creates tenant-admin Roles; platform administrators must create standard Kubernetes RoleBindings to grant access. See Tenant RBAC.
Tenant configuration migrated to MaasTenantConfig
- MaaS runtime settings (apiKeys, telemetry) previously in the legacy Tenant CR are now managed via the namespace-scoped MaasTenantConfig CR. OIDC and gateway context moved to the owning AITenant. Existing Tenant.spec fields are copied to MaasTenantConfig/default-tenant automatically during the migration grace window.
Infrastructure namespace separation - MaaS infrastructure resources (secrets, config) now reside in a dedicated infrastructure namespace rather than the controller namespace. Existing deployments are migrated automatically.
New Features
Body-based routing (BBR)
- Models can now be selected via the
modelfield in the request body (OpenAI-compatible format) in addition to URL path routing. Enables standard OpenAI SDK compatibility without path manipulation. - Canonical BBR model ID surfaced in
GET /v1/modelsandMaaSModelRef.status. - Model-provider-resolver and maas-headers-guard added to the IPP pipeline for BBR support.
Multi-tenancy enhancements
- Default
AITenantbootstrapped automatically for single-tenant deployments. - Any MaaS tenant can now be removed (not just non-default tenants).
- Validating webhook prevents multiple
AITenantCRs from claiming the same namespace. - Per-tenant IPP (Inference Payload Processing) stacks deployed for each
AITenantgateway. - Configurable
AITenantdeletion timeout with force-remove finalizer. GET /v1/tenantsendpoint for gateway discovery.
Observability
- OTel Collector deployment for usage log collection.
- EnvoyFilter for OTel structured usage logging with model and tenant context.
- Logs-based usage dashboards and tenant-specific dashboard panels.
- Tenant-level metrics, tracing, and logging.
- Perses dashboards deployed via
maas-controller.
Controller self-teardown
maas-controllersupports clean uninstallation — removes managed resources while preserving tenant namespaces.
Non-OpenShift Kubernetes (xKS) support
- New
xKSoverlay enables MaaS deployment on vanilla Kubernetes clusters. - OpenShift-only watchers are skipped on xKS to prevent cache-sync timeouts.
Security hardening
- Container hardening:
readOnlyRootFilesystem,seccompProfile(FIND-007). - Request body size limit to prevent OOM (FIND-011).
- Startup fails on missing gateway host; non-HTTPS probe URLs rejected (FIND-010).
- Debug CORS restricted to
http://localhostonly (FIND-Debug-CORS). - Database credentials removed from error messages (FIND-006).
X-MaaS-UsernameandX-MaaS-Groupadded to sensitive headers (FIND-014).- SA token automount disabled on cleanup CronJob (FIND-015).
X-MaaS-Subscriptionheader ignored for non-API-key requests (FIND-009).- Username hashed/redacted in logs.
- GitHub Actions pinned to immutable commit SHAs.
govulncheckadded for maas-api and maas-controller.
Bulk API key revocation enhancements
- Subscription-scoped bulk revoke: administrators can revoke all API keys bound to a specific
MaaSSubscriptionin a single call. - Combined scope: revoke keys for a specific user within a specific subscription.
- Dry-run mode (
dryRun: true): preview how many keys would be revoked without mutating any data. - Structured audit records emitted for every actual bulk revoke operation (action, actor, scope, count, tenant).
- See API Key Administration for usage examples.
Additional features
- OpenShift cluster TLS profiles honored for gateway and controller TLS configuration.
- OIDC JWKS cache TTL configurable via
TenantCR and wired to Authorino. maas-apiandpayload-processingreplica count configurable viaTenantannotation.- API key display name exposed in auth identity.
- Unauthorized models filtered from
GET /subscriptionsresponse. stream_options.include_usageenforced in IPP pipeline.- KServe upgraded to v0.19.0 with model-based routing support.
- New AI Gateway base manifest entry point for modularized deployment.
- Configurable Limitador scrape interval.
- API key update debouncing.
Model access authorization externalized
- Model access checks moved from inline allowlists in the gateway AuthPolicy to
accessAllowedmetadata returned by maas-api during subscription selection. The gateway authorization rule is now fixed-size regardless of how many subscriptions or models exist, removing a scaling limit caused by per-model allowlists growing the AuthPolicy CR.
Key Fixes
- CVE-2026-33815 / CVE-2026-33816: pgx memory-safety and SQL injection fixes.
- Prevent crash-loop when Kuadrant or KServe CRDs are not installed.
- Preserve MaaS traffic during RHOAI 3.5 upgrades.
- Require both
AcceptedandEnforcedconditions for gatewayAuthPolicyreadiness. - Scope gateway
deny-allauth to model inference paths only; exempt/v1/subscriptionsand/v1/api-keys. - Resolve body-routed model names in gateway
AuthPolicyand subscription validation. - Gracefully handle empty
monitoring-namespaceconfiguration. - Scope Secret informer cache to infrastructure namespace.
- Parse Authorino bracket-wrapped groups header format.
- Return empty list (not error) from management endpoints when no auth context present.
Known Limitations
- Token rate limits for non-OpenAI API formats: Token-based rate limiting counts tokens only for OpenAI-compatible request/response formats. Models using other API formats (e.g., Anthropic Messages API) are not metered. See Token Rate Limiting.
- External models in multi-tenant deployments: External models are not yet fully supported in multi-tenant configurations. See External Model Setup.
v0.2.0
Release Date: TBD
Breaking Changes
Gateway-level AuthPolicy (RHOAIENG-62571)
- The maas-controller now creates a single AuthPolicy/maas-gateway-auth in the gateway namespace (openshift-ingress) instead of one per-model AuthPolicy in each model namespace.
- Per-model AuthPolicy objects managed by the controller are deleted on the first reconcile after upgrade.
- status.authPolicies now references maas-gateway-auth / openshift-ingress instead of per-model policy names.
- New admission webhooks (failurePolicy=Ignore) validate that MaaSAuthPolicy and MaaSSubscription are created in namespaces that contain a MaasTenantConfig CR.
- AITenant created outside the configured --aitenant-namespace are now rejected at admission instead of being accepted and later marked Failed/InvalidPlacement by the controller.
- Minimum Kuadrant version: v1.4.2 or later required for spec.defaults.rules support.
- End-user auth behavior is unchanged — valid API key + active subscription + allowed group still returns 200.
New Features
Singleton gateway AuthPolicy
- All per-model allowlists aggregated into one CEL expression in maas-gateway-auth
- Dynamic model identity extracted from X-Gateway-Model-Name header with request.path fallback
- Model-aware cache keys prevent subscription result pollution across models
- Response header injection: X-MaaS-Subscription, userId, username, groups
Admission webhooks
- Validating webhooks for MaaSAuthPolicy and MaaSSubscription enforce namespace tenancy requirements
v0.1.1
Release Date: 2026-05-01
Breaking Changes
Required spec field for MaaS CRs
- MaaSAuthPolicy, MaaSSubscription, and MaaSModelRef now require the spec field
- CRs without spec are marked as Invalid and new CRs without spec are blocked
- Tenant.Spec remains optional
- Migration: Add a spec field to existing MaaSAuthPolicy, MaaSSubscription, and MaaSModelRef CRs that lack one (e.g., add spec: {} if needed)
New Features
MaasTenantConfig CR
- MaaS runtime configuration centralized in the MaasTenantConfig CR (maas.opendatahub.io/v1alpha1)
- Auto-bootstrapped as default-tenant in models-as-a-service namespace
- Configurable API key lifetime and telemetry via spec fields
- See MaasTenantConfig CR Configuration
Observability - Perses dashboards for model usage visualization - Admin usage dashboard for token consumption tracking - ServiceMonitor for maas-controller metrics
OIDC Enhancements
- OIDC token support for /v1/models endpoint
- Configurable cluster audience via --cluster-audience flag
External Models
- External models (introduced in v0.1.0) now included in /v1/models listings
- Namespace prefix added to HTTPRoute paths for LLMInferenceService parity
Key Improvements
- Fail-close logic when Limitador is unavailable prevents rate limit bypass
- Degraded/failed subscriptions rejected at auth layer
- Token rate limit validation aligned with Kuadrant TokenRateLimitPolicy windows
- Terminating namespace handling during RHOAI upgrades
- Local Kind deployment support for development
Known Limitations
- Shared HTTPRoute token rate limits: Multiple
MaaSModelRefresources on the sameHTTPRoutecreate multipleTokenRateLimitPolicyobjects, but only one may be enforced at the gateway. See Quota and Access Configuration for workarounds.
v0.1.0
Release Date: 2026-04-01
Breaking Changes
Subscription-based access model
- Legacy tier-based access control (ConfigMap tier-to-group-mapping) fully removed
- All deployments must use subscription CRDs: MaaSModelRef, MaaSAuthPolicy, MaaSSubscription
- Migration: See Migration Guide: Tier-Based to Subscription Model
CRD Changes
- MaaSModel renamed to MaaSModelRef
- New required CRDs: MaaSSubscription, MaaSAuthPolicy, ExternalModel
- Namespace scoping: MaaS API watches a configurable namespace for subscriptions
Required tokenRateLimits field
- All MaaSSubscription resources must include inline tokenRateLimits specification
- The tokenRateLimitRef field has been removed
- Migration: See Migration Guide: Tier-Based to Subscription Model for subscription examples with inline rate limits
New Features
Authentication & Authorization - API key management: create, revoke, set expiration - Ephemeral API keys with cleanup CronJob - Salt-based encryption for API key hashing - OIDC authentication integration with maas-api AuthPolicy - RBAC aggregation for namespace users
Model Management
- New ExternalModel CRD for external model support with Istio-based egress routing
- /v1/models endpoint returns available models with subscription info
- /v1/subscriptions endpoint for subscription management
- Support for Vertex AI (Gemini) API translation
Rate Limiting & Quotas
- Token-based rate limiting via tokenRateLimits specification
- Integration with Kuadrant TokenRateLimitPolicy
- Configurable Authorino caching for AuthPolicy evaluators
Operations
- FIPS compliance enabled
- Auto-create models-as-a-service namespace on controller startup
- Multi-arch image builds
- Subscription flow E2E tests with group support
v0.0.2
Release Date: 2026-01-22
New Features
Security - End-to-end TLS for external API traffic - NetworkPolicy to allow Authorino access to MaaS components
Deployment - Updated deploy script for new RHOAI Operator flow - Centralized maas-api image substitution - Flexible CSV version checking and dynamic deployment discovery
API - Fixed model listing authorization to target actual API endpoint - Corrected authorization checks for proper JWT validation
Operations - GitHub Release Action automation - Installation documentation for ODH-based deployments - Kustomize component handling in manifest validation
0.0.1
Release Date: 2025-11-24
Initial release