What you’ll end up with
| Component | Location | Replicas |
|---|---|---|
| Control Plane API, UI, Scheduler | Your OpenShift cluster | 2, 2, 1 |
| Data Plane API, worker, Kafka Connect | Your OpenShift cluster | 2, 1, 1 |
| TrustGate admin / gateway / actions | Your OpenShift cluster | 2 each |
| Firewall gateway + 5 workers | Your OpenShift cluster | 2 + 5 |
| ClickHouse, Kafka, PostgreSQL, Redis | Your OpenShift cluster (or external) | 1 each |
Prerequisites
| Resource | Recommended |
|---|---|
| OpenShift version | 4.10+ |
| CPU pool node spec | 8 vCPU / 32 GiB |
| Min CPU nodes | ≥ 5 across 3 AZs. Drop to 4 if Firewall workers run on GPU nodes. |
| GPU pool (optional, for GPU Firewall) | 4 vCPU / 16 GiB + 1 × NVIDIA GPU — 5 nodes (one per default Firewall worker) |
| Sizing baseline | ~23.1 vCPU / 61.8 GiB requests / 80 GiB PVC (defaults, CPU Firewall) |
| Storage | Cluster default; for ClickHouse + Postgres prefer fast SSD |
| Custom domain | A domain you control (e.g. platform.example.com) |
| Certificates | Custom Route TLS or cert-manager |
| Image pull | gcr-keys.json from NeuralTrust |
Step 1 — Project setup
Same as hybrid — see OpenShift hybrid › Step 1 and Step 2. Self-hosted has identical project/SCC requirements aside from slightly higher CPU/memory budget for CP components.Step 2 — Write your values overlay
Save asmy-values.yaml:
Custom Route TLS (recommended for production)
Using external managed services
For ClickHouse Cloud, see the native-port caveat. For external Kafka with SASL, see Authentication for external Kafka.
Step 3 — Install
gcr-secret to component service accounts (see OpenShift hybrid › Step 7).
Step 4 — Routes and DNS
| Route | Host | Required |
|---|---|---|
control-plane-app | control-plane-app.<domain> | ✅ |
control-plane-api | control-plane-api.<domain> | ✅ |
control-plane-scheduler | control-plane-scheduler.<domain> | ✅ |
data-plane-api | data-plane-api.<domain> | ✅ |
trustgate-admin | trustgate-admin.<domain> | ✅ |
trustgate-gateway | trustgate-gateway.<domain> | ✅ |
trustgate-actions | trustgate-actions.<domain> | ✅ |
Step 5 — First login to the Control Plane
-
Open
https://control-plane-app.<domain>. -
Get the bootstrap credentials:
- Sign in, configure SSO (Platform › SSO), rotate the bootstrap admin password.
- Configure LLM providers, integrations, and policies.
Step 6 — Send traffic through TrustGate
Point your AI applications athttps://trustgate-gateway.<domain>. Telemetry flows through TrustGate → Data Plane → ClickHouse, surfaced by your self-hosted Control Plane UI.
Verification
Upgrading
init-db init container of the new CP UI pod for Prisma migration errors.
Air-gapped / disconnected OpenShift
Common for sovereign-cloud and government OpenShift installs.-
Mirror images to your internal registry (Red Hat Quay or any OCI registry). Use
oc-mirrororhelm template … | yq …(see Image catalog › Mirroring). -
Override the registry:
-
Proxy egress:
-
Pre-load Firewall model weights or mirror
huggingface.coif using the Firewall with HF token. - TLS: bring your own Route certificates instead of public CAs.
Migration to hybrid
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| CP UI blank | API URL wrong | Verify control-plane-api.<domain> Route and config |
| Login fails | DB migration failed | oc logs -c init-db on CP UI pod |
| Scheduler not running jobs | Can’t reach Data Plane API | Verify data-plane-api.<domain> Route and TLS |
Pods ImagePullBackOff | gcr-secret not linked to SA | Re-run oc secrets link for each component SA |
ClickHouse Permission denied on PVC | SCC override | Don’t override podSecurityContext for CH on OpenShift |
Related guides
- Hybrid deployment on OpenShift — Control Plane on SaaS
- OpenShift overview — cluster prerequisites and OpenShift-specific defaults
- Deployment models — hybrid vs self-hosted comparison
- Image catalog — what runs in self-hosted mode
- Secrets management — auto-generation, External Secrets Operator
- Firewall deployment — GPU workers on OpenShift
- Configuration scenarios — external infrastructure modes