Skip to content

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 model field 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/models and MaaSModelRef.status.
  • Model-provider-resolver and maas-headers-guard added to the IPP pipeline for BBR support.

Multi-tenancy enhancements

  • Default AITenant bootstrapped automatically for single-tenant deployments.
  • Any MaaS tenant can now be removed (not just non-default tenants).
  • Validating webhook prevents multiple AITenant CRs from claiming the same namespace.
  • Per-tenant IPP (Inference Payload Processing) stacks deployed for each AITenant gateway.
  • Configurable AITenant deletion timeout with force-remove finalizer.
  • GET /v1/tenants endpoint 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-controller supports clean uninstallation — removes managed resources while preserving tenant namespaces.

Non-OpenShift Kubernetes (xKS) support

  • New xKS overlay 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://localhost only (FIND-Debug-CORS).
  • Database credentials removed from error messages (FIND-006).
  • X-MaaS-Username and X-MaaS-Group added to sensitive headers (FIND-014).
  • SA token automount disabled on cleanup CronJob (FIND-015).
  • X-MaaS-Subscription header ignored for non-API-key requests (FIND-009).
  • Username hashed/redacted in logs.
  • GitHub Actions pinned to immutable commit SHAs.
  • govulncheck added 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 MaaSSubscription in 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 Tenant CR and wired to Authorino.
  • maas-api and payload-processing replica count configurable via Tenant annotation.
  • API key display name exposed in auth identity.
  • Unauthorized models filtered from GET /subscriptions response.
  • stream_options.include_usage enforced 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 accessAllowed metadata 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 Accepted and Enforced conditions for gateway AuthPolicy readiness.
  • Scope gateway deny-all auth to model inference paths only; exempt /v1/subscriptions and /v1/api-keys.
  • Resolve body-routed model names in gateway AuthPolicy and subscription validation.
  • Gracefully handle empty monitoring-namespace configuration.
  • 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.

Full Changelog


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

Full Changelog


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 MaaSModelRef resources on the same HTTPRoute create multiple TokenRateLimitPolicy objects, but only one may be enforced at the gateway. See Quota and Access Configuration for workarounds.

Full Changelog


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

Full Changelog


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

Full Changelog


0.0.1

Release Date: 2025-11-24

Initial release