model field in each request, and routes the request to the matching upstream model endpoint. In this setup, each upstream endpoint is a Poolside model server running in your Kubernetes cluster.
Bifrost is third-party software. You are responsible for Bifrost configuration, access controls, persistence, upgrades, and security hardening. For production deployment guidance, see the Bifrost Helm documentation.
How it works
Bifrost ships as a single Go binary that serves the API, administration dashboard, and Prometheus/metrics endpoint on one port.
This setup includes:
- One or more Poolside model inference services running in Kubernetes.
- A Bifrost StatefulSet running in the same cluster.
- A persistent volume claim that stores Bifrost configuration and request logs in SQLite.
- A Bifrost ingress that exposes the OpenAI-compatible API and administration dashboard on one endpoint.
Watch the deployment walkthrough
Prerequisites
- You have deployed Poolside model inference in a Kubernetes cluster. See Cloud deployment overview.
- You have a valid
kubeconfigfor the cluster. - You have
helm,kubectl,curl,jq, andopensslinstalled on the machine where you run the deployment. - Your cluster has a default storage class or another storage class that supports
ReadWriteOncepersistent volumes. - You have a DNS hostname for the Bifrost endpoint.
- You have an ingress controller that can route traffic to Bifrost.
- You know the namespace where Poolside model inference is running. The examples on this page use
<inference-namespace>. - Your Poolside model endpoint does not require an upstream API key. If it does, configure a Bifrost provider key instead of using a keyless provider. See the Bifrost custom provider documentation.
Step 1: Confirm Poolside model inference is running
Check the model pods and services:inference-<model-key>, where <model-key> is the suffix shown in the kubectl get pods,svc output.
Retrieve the served model name from the model deployment:
Step 2: Add the Bifrost Helm repository
Add the repository and retrieve the latest chart metadata:Step 3: Create the Bifrost namespace and secret
Create a namespace for Bifrost:Step 4: Configure Bifrost Helm values
Create avalues.yaml file:
Example: values.yaml
<bifrost-image-tag>with an available version from Bifrost images on Docker Hub. For Red Hat base image requirements, use the-ubi9variant of the selected tag.<ingress-class-name>with the ingress class for your cluster, such asnginx.<bifrost-hostname>with the DNS hostname that routes to Bifrost.<storage-class-name>with the storage class for the SQLite persistent volume if your cluster does not have a suitable default.
bifrost.client.enforceAuthOnInference to true, but the raw Bifrost binary leaves inference authentication disabled. A container that you run locally can therefore behave differently from this Helm deployment. Inference authentication protects /v1 endpoints with a virtual key.
Dashboard authentication is separate. The chart sets bifrost.authConfig.isEnabled to false by default, so the dashboard is served without a login. To enable dashboard authentication, configure authConfig.adminUsername and authConfig.adminPassword, or provide authConfig.existingSecret.
Step 5: Install Bifrost
Install the Bifrost Helm chart:ok status for the gateway and database ping.
Before you add a provider, confirm that the gateway starts with no providers configured:
providers array and a total of 0.
Step 6: Add a Poolside model in Bifrost
- Gather the served model name from Step 1.
-
Find the in-cluster Poolside inference service name:
-
Open the Bifrost administration dashboard:
With dashboard authentication disabled, the dashboard opens without a login on Observability > Dashboard.
- In the navigation menu, expand Models and select Model Providers.
- Select Add provider, then select Custom provider….
-
Complete the Add Custom Provider form:
Do not append
/v1to the Base URL. The OpenAI base format adds the request path. - Select Add.
<provider-name>/<served-model-name>.
Confirm that Bifrost reports the provider as healthy:
success status.
Step 7: Create a Bifrost virtual key
The Helm chart requires a virtual key for inference requests by default. Before you create a virtual key, confirm that Bifrost rejects an unauthenticated inference request:"status_code": 401 and "type": "virtual_key_required".
The Virtual Keys page lists existing keys with their assignments, budgets, rate limits, and status.
- In the navigation menu, expand Governance and select Virtual Keys.
- Select Add Virtual Key.
-
Complete the form:
- Name: Enter a name that identifies the key in the dashboard and request logs.
- Expiry: Choose a preset from 30 minutes through 7 days, or set an explicit expiration date that matches your organization’s key rotation policy.
- Provider Configurations: Select the Poolside provider you created in Step 6.
- Budget Configuration: Optionally set a spend limit and reset period.
- Rate Limiting Configuration: Optionally set token and request limits with reset periods from every minute through monthly.
-
Select Create and copy the generated key. Bifrost virtual keys start with
sk-bf-, so OpenAI-compatible clients accept them as API keys without modification.
Step 8: Test the Bifrost endpoint
List the models Bifrost exposes:Next steps
Use Bifrost with Poolside Agent CLI
Follow Install Poolside Agent CLI and choose Connect an OpenAI-compatible provider. Enter:- API base URL:
http://<bifrost-hostname>/v1 - API key: The Bifrost virtual key from Step 7
/v1/models. Start pool, then press Ctrl+M or use /model to choose a model. See Change the agent.
Use the Bifrost endpoint from other clients
Point any OpenAI-compatible client, such as the OpenAI SDK, at Bifrost. Enter:- API base URL:
http://<bifrost-hostname>/v1 - API key: A Bifrost virtual key
model value to a namespaced model ID from Bifrost.
Operational considerations
- Authentication: Create separate virtual keys for users, teams, and applications. Apply provider restrictions, budgets, rate limits, and expiration policies instead of sharing one key.
- Observability: Scrape the Prometheus
/metricsendpoint to monitor Bifrost. - Persistence: Bifrost stores configuration and request logs in SQLite on the persistent volume claim. Back up the data according to your organization’s recovery requirements.
- High availability: Use PostgreSQL and Bifrost’s production deployment guidance before you scale the gateway beyond one replica.
- Network access: Bifrost must be able to reach the Poolside model service URLs from inside the cluster. Custom providers need Allow Private Network enabled for in-cluster service addresses.
- TLS: Expose Bifrost over HTTPS before sharing the endpoint outside a trusted internal network.
- Model names: Clients use Bifrost’s namespaced
<provider-name>/<served-model-name>ID. The served model name must match the model name returned by the Poolside model endpoint.