values.yaml
in the chart.
Values cheat sheet
The switches that matter most. In Hybrid,global.products is opt-in: set a
product to true to run it. In External and Central it is opt-out: set a
product to false to leave it out
(TrustGuard only).
Leave
watchdog.enabled off unless NeuralTrust asks you to enable it.
Product telemetry export is mandatory in Hybrid and always on — there is no
global.clickstack.enabled: false opt-out. TrustGate and TrustGuard send OTLP to
a co-located, enrollment-backed egress collector, which is why the enrollment
tokens are required. For a deployment with no NeuralTrust dependency at all, use
Self-hosted. Operational telemetry, below, is
separate and off unless you turn it on.
Operational telemetry
Operational telemetry is TrustGate and TrustGuard reporting on their own health — how many requests they serve, how many fail, and how long they take — rather than on the traffic they inspect. It is off by default and controlled by one value,global.observability.operationalTelemetry.
What it contains
- TrustGate exports server spans and HTTP request rate, error, and duration metrics. Health and readiness probe requests are sampled at 1%; every other request is traced at 100%.
- TrustGuard exports traces and metrics for evaluation latency and errors.
Where it goes
In Hybrid, turning it on means NeuralTrust receives health data about your
gateway and TrustGuard in addition to product telemetry. That is why it is a
choice you make, not a default.
Why turn it on
With operational telemetry on in Hybrid, NeuralTrust support can see the health of your TrustGate and TrustGuard — error spikes, latency, saturation — and diagnose problems from it directly, often without asking you for logs or a support bundle. Turning it on is the recommended practice for faster support.Turn it on or off
- ntctl
- Helm
ntctl install asks whether to turn it on. To answer up front, for example in a
script:ntctl upgrade. Pass the chart version
you already run, which ntctl status prints, so the switch changes nothing
else. Without --version, ntctl upgrade also moves you to the latest chart.ntctl never turns
operational telemetry on by itself.What happens when you switch it
The TrustGate and TrustGuard pods roll with the new setting in a normal rolling update. Their Deployments carry a checksum of the configuration that changes, so no manualrollout restart is needed. Nothing else is reconfigured: config
sync, policies, and product telemetry are untouched, and there is no downtime
beyond the rolling restart. Telemetry starts or stops within a minute or two of
the new pods becoming Ready.
The single value is the supported switch. For finer control, the chart’s
per-component environment variables can override it through extraEnv —
OPS_TRACES_ENABLED and OPS_METRICS_ENABLED set to "false" in the
extraEnv of a TrustGate component (agentgateway.dataPlane,
agentgateway.mcp, or, in External, agentgateway.controlPlane), or
OPENTELEMETRY_ENABLED set to "false" in trustguard.dataPlane.extraEnv.
Managed stores
Managed PostgreSQL and Redis are the usual production choice in every self-hosted model. Pre-create the database, role, and Redis credentials on the managed instance, or, in External, let the chart create the PostgreSQL roles and databases with an administrator login you provide — see Let the chart create the roles. The chart can still run both in-cluster withdeploy: true for evaluation; in
External and Central mode that path also bootstraps the per-service roles
automatically.
Reach both over private networking from the cluster. When you run two clusters
across regions, they share one writable PostgreSQL primary with a
cross-region read replica, and each region gets its own Redis — see
High availability.
IAM database authentication
Against a managed PostgreSQL (global.postgresql.deploy: false), set
global.postgresql.authMode: iam to have the services log in with a
short-lived cloud token instead of a static password. The chart’s own
PostgreSQL has no token login, so authMode: iam is ignored there.
Each runtime service’s database.iamAuth inherits the global setting when you
leave it unset. Set it explicitly to true or false only for a mixed-auth
install where one service keeps a password.
Which cloud mints the token follows the identity block you configure:
With token auth,
global.postgresql.sslMode must be require, verify-ca or
verify-full; the services refuse to start over anything weaker. The bootstrap
Jobs never run under IAM auth, so you pre-create every role and database
yourself.
Cloud SQL and AlloyDB (GKE)
Works in every deployment mode, with GKE Workload Identity:POSTGRES_LOGIN=gcp and mints a token from Application Default Credentials
for each new connection.
- Database users. Each user is a Google service account’s email without
.gserviceaccount.com, for exampletrustguard-db@my-project.iam. The control plane’s isglobal.postgresql.user(also every Hybrid client’s); the others are<service>.database.user. A full email is refused at render. - Identities. Map each Google service account to its Kubernetes
ServiceAccount with
iam.gke.io/gcp-service-accountin<service>.serviceAccount.annotations, and incontrol-plane-api.controlPlane.serviceAccount.annotationsfor the sharedcontrol-planeServiceAccount. To use one Google service account for everything instead, setglobal.gcpIdentity.serviceAccountandglobal.gcpIdentity.applyGlobally: true. - Instance setup, once per service account.
-
Enable the
cloudsql.iam_authentication(Cloud SQL) oralloydb.iam_authentication(AlloyDB) flag. -
Create the user with
gcloud sql users create <user> --type=cloud_iam_service_accountorgcloud alloydb users create <user> --type=IAM_BASED. -
Grant
roles/cloudsql.instanceUserandroles/cloudsql.client(Cloud SQL), orroles/alloydb.databaseUserandroles/serviceusage.serviceUsageConsumer(AlloyDB), plusroles/iam.workloadIdentityUserfor<project>.svc.id.goog[<namespace>/<serviceaccount>]. -
As an administrator, create each database owned by its user, and enable
pgcryptoin the TrustGuard database:
-
Enable the
Memorystore for Redis Cluster (GKE)
For Memorystore for Redis Cluster or Valkey with IAM auth, combineglobal.gcpIdentity with three opt-in global.redis keys:
Each service account needs
roles/redis.dbConnectionUser. For Memorystore,
put every certificate printed by
gcloud redis clusters get-cluster-certificate-authority <cluster> into one
file and create the Secret from it:
deploy: false). Installs that set
none of them render unchanged.
Ingress
global.domain combines with default host prefixes to render the public names.
In Hybrid that is two: gateway.<domain> for the LLM/proxy Ingress and
mcp.<domain> for MCP. External and Central add the console, its API, and the
gateway admin surface.
The chart creates separate agentgateway-gateway and agentgateway-mcp Ingress
resources backed by separate Services. Each Service exposes port 80: the proxy
Service targets TrustGate container port 8081 and the MCP Service targets
8082. Set the corresponding full URLs, including https://, in Settings →
Agent Gateway → General — global.domain does not update those console
settings.
The chart can auto-add wildcard hosts (*.llm.<domain> / *.mcp.<domain>) for
slug-based gateway discovery; set agentgateway.config.autoWildcardHosts: false
to use exact hosts instead. Ingress class, annotations, and certificate sources
are provider-specific — see
Cloud notes.
With two clusters active/passive, put one global LLM URL and one global MCP URL
in front of both clusters’ Ingress resources and configure those stable URLs in
the console.
Firewall
The Firewall holds the ML detectors TrustGuard calls. In every mode it is NeuralTrust-hosted by default — the inference plane — andglobal.firewall.deploy: true runs it in your cluster instead.
NeuralTrust-hosted Firewall. TrustGuard authenticates with its own
FIREWALL_JWT: a per-install client that carries the Firewall URL, so no
signing key is shared with your cluster, and the client can be revoked on its
own. Store it in a Secret (key FIREWALL_JWT):
trustguard.firewall.jwt takes the token inline instead. TrustGate’s
smart-routing complexity scoring takes its own token the same way, under
agentgateway.firewall. The hosts are firewall.neuraltrust.ai (EU) and
firewall.us.neuraltrust.ai (US), on 443 or over Private Service Connect. The
Firewall is stateless: it scores the text it receives and stores none of it.
An install with TrustGuard and neither a firewall JWT nor deploy: true fails
at render time, so the ML detectors never go dark silently.
A Firewall you run yourself is also supported: deploy: false with
global.firewall.baseURL and its JWT_SECRET in global.firewall.existingSecret.
In-cluster Firewall workers
With the Firewall in your cluster, no further values are needed. The chart renders two gateway replicas and one replica for each of the five default workers —toxicity, indirect-prompt-injections, prompt-jailbreak,
prompt-moderation, and response-jailbreak — all on the firewall-cpu image
pinned by your chart version.
Default worker requests are 1 CPU and 3 GiB, with 2 CPU and 4 GiB limits;
prompt-moderation overrides memory to 4 GiB requested and 6 GiB limited, and
topic-guard raises its memory limit to 5 GiB.
Official images bundle their models, so HUGGINGFACE_TOKEN is optional. This is
the largest memory consumer in the data path, so it is the first thing to
right-size if you run a subset of detectors.
TrustGuard then derives NEURAL_TRUST_FIREWALL_BASE_URL as
http://firewall.<namespace>.svc.cluster.local and maps
firewall-secrets/JWT_SECRET to its client secret. Both sides are wired by the
chart, so there is nothing to configure, and a trustguard.firewall.jwt is
ignored.
GPU Firewall workers
Chart defaults are CPU. GPU mode needs a NeuralTrust-providedfirewall-gpu
image plus explicit GPU resources and scheduling, and a separate GPU node pool.
It also needs global.firewall.deploy: true, since the Firewall otherwise runs
at NeuralTrust. Keep the gateway on the CPU image:
MPS with
max_shared_clients_per_gpu = 4; on EKS, enable MPS sharing in the NVIDIA device
plugin with four replicas. Four is the most an L4 can hold: each client may pin
up to 6000 MB of device memory, and the L4 has 24 GB. Without sharing, every
worker needs a GPU of its own. Node counts for each deployment model are in
Capacity.
This matches
values-dataplane-gpu.yaml.example,
which ships with the chart. Install the vendor device plugin and validate node
labels first. CUDA MPS and hostIPC may require extra security approval,
especially on OpenShift. If GPU pods
stay Pending, inspect resource availability, taints, node labels, and the NVIDIA
device plugin with kubectl describe pod.
Central control plane values
These apply only on the central cluster, underglobal.deploymentMode: saas.
Data-plane clusters need none of them — they set global.controlPlane.domain and
are otherwise ordinary Hybrid installs.
Trusting a private control plane
Set these on a remote cluster when the central control plane serves chart-generated or private-PKI certificates. Each replaces the system roots for that connection, so the bundle must carry every CA that leg needs.Wizard-generated setup
The private gateway wizard’s Kubernetes output is credential and setup input, not an install-ready chart contract. Map its values into the maintained chart’s interfaces rather than applying it unchanged, and move every credential into pre-created Secrets — see Console setup and Secrets. Docker is for local evaluation of the LLM/proxy path. Its generated Compose command injects a generatedCONFIG_SYNC_LKG_KEY and the two wizard-issued
tokens, and needs three more values from you:
SERVER_SECRET_KEY— a random value of at least 32 bytesCONFIG_SYNC_GRPC_ENDPOINT— the config-sync endpoint ashost:portDATABRIDGE_ADDR— the DataBridge endpoint ashost:port
8081 and does not start
or expose MCP on 8082. Use Kubernetes for production MCP support.
Manual returns CONTROL_PLANE_JWT and DATA_AGENT_JWT for fully custom
manifests, plus FIREWALL_JWT for the NeuralTrust-hosted Firewall, and no
deployment command. Pass FIREWALL_JWT to the TrustGuard data plane under that
name.
TrustGate listens on these ports by default:
TrustGate data-plane environment
Optional variables you may set on the TrustGate proxy and MCP pods, beyond what the chart and the wizard generate.Related
Secrets
Key contracts for every Secret you supply.
Requirements
Dependencies, ports, and capacity.