Model Setup Guide
This guide explains how to configure models for the MaaS platform. MaaS supports two model kinds:
- On-cluster models (
LLMInferenceService) - vLLM/KServe models running in your cluster - External models (
ExternalModel) - Hosted providers like OpenAI, Anthropic, Azure OpenAI (Tech Preview)
Legacy tier annotations removed
The alpha.maas.opendatahub.io/tiers annotation for tier-based access control is deprecated and no longer documented here. Model access and rate limits are now managed exclusively through MaaSAuthPolicy and MaaSSubscription CRDs. If you are still using tier annotations, see the Migration Guide: Tier-Based to Subscription Model for instructions on migrating to the subscription model.
On-Cluster Models
On-cluster models use LLMInferenceService (vLLM via KServe) and route through the MaaS gateway for authentication and rate limiting.
Gateway Architecture
MaaS uses a segregated gateway approach. Models route through either:
- Standard gateway (ODH/KServe default) - No MaaS policies
- MaaS gateway (
maas-default-gateway) - Full MaaS policy enforcement
| Standard gateway | MaaS gateway | |
|---|---|---|
| Authentication | ODH/KServe auth | Token-based (API keys, OpenShift tokens) |
| Rate limits | None | Subscription-based (Limitador) |
| Token tracking | No | Yes |
| Access control | Platform-level | Per-model (MaaSAuthPolicy, MaaSSubscription) |
Only models routing through maas-default-gateway appear in the MaaS catalog and have policies applied.
graph TB
subgraph cluster["Cluster"]
defaultGW["Standard Gateway"]
maasGW["MaaS Gateway<br/>maas-default-gateway"]
standardModel["LLMInferenceService<br/>(Standard)"]
maasModel["LLMInferenceService<br/>(MaaS-enabled)"]
defaultGW -.-> standardModel
maasGW ==> maasModel
end
users["Users"] --> defaultGW
apiUsers["API Clients"] --> maasGW
Note
The maas-default-gateway is created during MaaS installation.
Configuration Requirements
To enable MaaS policies for an LLMInferenceService:
- Set gateway reference - Add
spec.router.gateway.refspointing tomaas-default-gateway - Create MaaSModelRef - Register the model in the MaaS catalog
- Add display metadata (optional) - Annotations for
/maas-api/v1/modelsAPI response
Without the gateway reference, the model uses the standard gateway and MaaS policies do not apply.
External Models
External models route traffic to providers outside the cluster (OpenAI, Anthropic, Azure OpenAI, etc.). MaaS handles authentication, rate limiting, and request proxying.
How It Works
- Define ExternalModel CR - Specify provider, endpoint, credentials, and target model
- Register with MaaSModelRef - Reference the ExternalModel by name
- Controller creates routing - Service, ServiceEntry, DestinationRule, HTTPRoute (owned by ExternalModel CR)
- Apply policies - MaaSAuthPolicy and MaaSSubscription work the same as on-cluster models
- Traffic flows - Requests route through the gateway → Inference Payload Processor (IPP) injects provider API key → external provider
The Inference Payload Processor (ext-proc) handles provider-specific authentication and request/response translation.
Setup
For complete setup including IPP deployment, provider credentials, and examples, see External Model Setup (Tech Preview).
Examples
Example 1: On-Cluster Model
LLMInferenceService with MaaS gateway:
apiVersion: serving.kserve.io/v1alpha1
kind: LLMInferenceService
metadata:
name: qwen3-model
namespace: llm
spec:
model:
uri: hf://Qwen/Qwen3-0.6B
name: Qwen/Qwen3-0.6B
replicas: 1
router:
route: { }
gateway:
refs:
- name: maas-default-gateway
namespace: openshift-ingress
template:
containers:
- name: main
image: "vllm/vllm-openai:latest"
resources:
limits:
nvidia.com/gpu: "1"
memory: 12Gi
requests:
nvidia.com/gpu: "1"
memory: 8Gi
MaaSModelRef with display metadata:
apiVersion: maas.opendatahub.io/v1alpha1
kind: MaaSModelRef
metadata:
name: qwen3-model
namespace: llm
annotations:
openshift.io/display-name: "Qwen 3 0.6B"
openshift.io/description: "Qwen 3 model for chat workloads"
opendatahub.io/genai-use-case: "chat"
opendatahub.io/context-window: "8192"
spec:
modelRef:
kind: LLMInferenceService
name: qwen3-model
Example 2: External Model
See External Model Setup (Tech Preview) for complete examples including:
- ExternalModel CR configuration
- Provider-specific settings (OpenAI, Anthropic, Azure, Vertex AI, Bedrock)
- Credential management
- MaaSModelRef registration
Verification
After configuring your model, verify it's accessible.
Access Control Required
Both model kinds require MaaSModelRef for registration, MaaSAuthPolicy for access control, and MaaSSubscription for rate limits. See Quota and Access Configuration for complete policy setup.
API Key Required
These verification steps require an API key. See API Key Management for how to create one.
1. Check the model appears in the catalog:
# Set HOST to your MaaS gateway URL (e.g., https://maas.your-cluster-domain.com)
curl -sS ${HOST}/maas-api/v1/models \
-H "Authorization: Bearer $API_KEY" | jq .
2. Verify the model status:
# Check the backend resource
kubectl get llminferenceservice <llmisvc-name> -n <namespace> # On-cluster
kubectl get externalmodel <external-name> -n <namespace> # External
# Check MaaSModelRef (both kinds)
kubectl get maasmodelref <modelref-name> -n <namespace>
3. Test inference request:
# Get MODEL_URL from step 1 above (data[].url field)
curl -sS -H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "my-model", "messages": [{"role": "user", "content": "Hello"}]}' \
"${MODEL_URL}/v1/chat/completions"
Troubleshooting
Model Not Appearing in /maas-api/v1/models
- Verify gateway reference:
name: maas-default-gateway,namespace: openshift-ingress - Check model status shows ready
- Ensure MaaSModelRef is created in the same namespace as the model
401 Unauthorized
- Verify API key or token is valid
- Check MaaSAuthPolicy grants your group access to the model
- Ensure MaaSSubscription exists for your identity
403 Forbidden
- Verify MaaSAuthPolicy includes the model in
modelRefs - Check MaaSSubscription ownership matches your identity
- Verify maas-controller has reconciled the policies
TLS Certificate Errors
If curl returns curl: (60) SSL certificate problem, your cluster uses certificates not in your system trust store. See Troubleshooting - TLS Certificate Validation for solutions.
References
- Quota and Access Configuration - Configure MaaSAuthPolicy and MaaSSubscription
- Model Listing Flow - How models appear in the catalog
- External Model Setup - Complete guide for external models
- MaaSModelRef CRD - CRD reference and field details