Pin the Onyx version
The chart default isglobal.version: "latest". Set it to a release tag:
values.yaml
latest tag is risky:
- A new pod can pull a newer image than the pods that already run. This occurs on scale-up, node drain, or reschedule.
- The API server runs database migrations when it starts. One new pod can change the schema under older pods.
- A Helm rollback does not revert the database schema.
global.version. For release notes,
see the Changelog.
Credentials
Every section underauth accepts existingSecret. The chart then reads from your Secret and does not create one.
Create a Secret, then point the chart at it:
values.yaml
External Secrets Operator
If you use External Secrets Operator, the chart can create oneExternalSecret.
You must install the operator and a SecretStore or ClusterSecretStore first.
values.yaml
auth.*.secretKeys maps expect.
Security contexts
These settings do not change the user, so they apply with the default root user:
values.yaml
Run as non-root
The backend image (onyx-backend) contains an onyx user with UID 1001, but the image does not select it.
Without an override, the API server, Celery workers, bots, and MCP server run as root.
To run as non-root, set the user in the pod and container security contexts:
values.yaml
Service accounts
Onyx pods use thedefault ServiceAccount of the namespace. To change this, set serviceAccount.create to true,
or set serviceAccount.name.
- With Craft, the API server and the Scheduled Task worker use their
ServiceAccount token to manage sandbox pods. Keep
serviceAccount.automount: true. - Without Craft, Onyx pods do not call the Kubernetes API. You can create a dedicated ServiceAccount without a token:
values.yaml
Other defaults to keep
/metricsreturns401until you setauth.metricsAuth. Do not setconfigMap.DISABLE_METRICS_AUTHon a network that users can reach.- The API docs (
/docs,/openapi.json) are off. Do not setconfigMap.ENABLE_PUBLIC_DOCSunless you need them.
Network policies
The chart does not create NetworkPolicies for Onyx pods. It creates policies only for sandboxes:- Code Interpreter executor pods get a policy that denies all egress.
- Craft sandbox pods can reach only DNS and the sandbox proxy.
component selector. NetworkPolicies add together,
so an allow rule that selects executor pods gives user code network access.
onyx-network-policies.yaml
kubectl get endpoints kubernetes -n default. Some clusters use port 6443.
Policy 3 assumes an ingress controller in the ingress-nginx namespace. The bundled NGINX (nginx.enabled is true)
runs in the Onyx namespace and receives traffic from the load balancer. In that case,
change policy 3 to allow the load balancer or node addresses.