Operations Overview
Operators use this section to configure the Go control plane, deploy it with Kustomize, enable durable state and cryptographic agent identity, enforce agent egress at the network layer, provision DigitalOcean Kubernetes (DOKS) with Terraform, and observe the deployment with the Grafana LGTM stack (Loki, Grafana, Tempo, and Mimir).
For integrating an agent rather than running the platform, start with Deploy an agent instead.
One binary, three listeners
Section titled “One binary, three listeners”The whole control layer is a single Go program (control-plane/main.go, Go
1.25) that runs as one Deployment but binds three HTTP listeners, each with a
different exposure and threat model:
| Listener | Default addr | Env var | Role |
|---|---|---|---|
| Decision plane | :9191 | DECISION_ADDR | Envoy’s external-authorization hook (ext_authz) calls /authz here on the hot path. A 200 is allow, a 403 is deny. Locked down mesh-only. |
| Management plane | :8181 | MGMT_ADDR | Registry API, /healthz, /readyz, /metrics. Exposed to operators and CI separately from the data path. |
| Egress forward-proxy | :9092 | EGRESS_PROXY_ADDR | Every outbound agent call (HTTP(S)_PROXY in the pod) flows through here, gets a /authz-equivalent egress decision, and is forwarded only on allow. Only started when AGENT_IDP_URL is set — without an identity verifier the proxy can’t soundly prove the caller. |
Splitting the listeners lets the data path be mesh-only with mutual TLS (mTLS) while the management API is reachable by operators, and keeps the egress proxy off entirely in configurations that don’t gate egress.
Read more in Control plane (Go).
The trust-zone namespaces
Section titled “The trust-zone namespaces”The base manifests lay the platform across four namespaces that double as trust zones:
| Namespace | What runs there |
|---|---|
palonexus | control-plane, Open Policy Agent (OPA), Dex (human OpenID Connect, OIDC, sign-in), the model-broker (LiteLLM), the portal |
apps | the authority-bound agent workloads (the four demo site-reliability-engineering, SRE, agents) + their egress NetworkPolicies |
agent-idp | the did:web agent identity provider (IdP) — its own namespace so the Service DNS matches its Decentralized Identifier (DID) |
observability | Grafana LGTM + the standalone OpenTelemetry (OTel) Collector |
Config is all env vars; overlays do the rest
Section titled “Config is all env vars; overlays do the rest”The same image is promoted unchanged across dev/staging/prod. Every behavioural
switch is an environment variable (OIDC_*, OPA_URL, AGENT_IDP_URL,
REGISTRY_BACKEND/REGISTRY_DB_URL, AGENT_IDENTITY_MODE, …). Only the Kustomize
overlay changes:
overlays/devandoverlays/kindstrip the threeOIDC_*env vars → anonymous-passthrough (policy still enforces public-vs-private from the registry).overlays/selfhostis the cluster-agnostic production overlay; it composes the opt-in hardening components (postgres,egress-identity-vc,egress-enforcement,egress-sidecar,egress-gateway,agent-admission).
See Self-hosting for the deploy flow, Persistence for durable backends, and Credential-safe action enforcement for the egress data plane.
Deployment modes — pick by enforcement fidelity
Section titled “Deployment modes — pick by enforcement fidelity”PaloNexus runs at three fidelities. The same decision spine underlies all three; what changes is how much of the enforcement plane is real. Use this matrix to pick: evaluate on the left, run production on the right.
| Capability | Offline SDK (PaloNexus.offline()) | Docker Compose | Any Kubernetes (kind/EKS/GKE/DOKS) selfhost |
|---|---|---|---|
| Enforcement fidelity | in-process decision simulation | real control-plane /authz decision | real /authz plus Envoy request forwarding |
Envoy ext_authz forwarding | — | decision only (no L7 proxy) | ✅ SecurityPolicy.extAuth forwards on allow |
| OIDC workforce identity | — | optional (set OIDC_*) | ✅ (Logto — the supported IdP; any standard OIDC issuer works) |
| OPA org veto | — | inline policy only | ✅ OPA_URL deny-overrides bundle |
| Regulated egress / needs-approval (task-based access control, TBAC) | simulated | ✅ real agent-idp delegation check | ✅ |
| Cryptographic agent identity (Verifiable Credential, VC, mode) | — | header-trust (AGENT_IDENTITY_MODE=header) | ✅ egress-identity-vc (verifiable presentation, VP, required) |
| Network-enforced egress (proxy-only netpol) | — | — | ✅ egress-enforcement + sidecar + admission |
| Durable Postgres state | — | ✅ (one instance, two DBs) | ✅ CloudNativePG (HA) |
| High availability | — | — | ✅ HA control plane + autoscale pool |
| Best for | unit tests, the end-to-end governed flow, CI | local evaluation, demos | staging / production |
Compose and any Kubernetes cluster share every env var — only the orchestration and the opt-in hardening components differ, so what is proven locally holds in production. The zero-to-authority-bound runbook is cluster-agnostic (kind, EKS, GKE, on-prem, DOKS) — DOKS is just the worked example. Start with Docker Compose to evaluate, then graduate via the runbook against the target cluster.
Pages in this section
Section titled “Pages in this section”- Control plane (Go) — architecture, ports, the full env-var reference, build/test, fail-closed invariants.
- Self-hosting — deploy with Kustomize: prereqs, overlays, opt-in components, secrets.
- Bring your own IdP — wire the enterprise IdP (Logto — the supported IdP; Okta / Entra / any OIDC via the same seam) as human sign-in via the
oidccomponent. - Docker Compose — the non-Kubernetes evaluation path: the full stack via
docker compose up, with the allow/deny/needs-approval smoke test. - Persistence — pluggable registry + agent-idp backends (memory/postgres/mysql/sqlite/mongodb), CloudNativePG.
- Credential-safe action enforcement (ops) — the forward-proxy, proxy-only NetworkPolicies, the admission webhook, the Envoy egress gateway.
- Terraform / DOKS — one optional provisioning example (DigitalOcean); PaloNexus runs on any Kubernetes.
- Zero to authority-bound agent runbook — the cluster-agnostic cold-start path (kind/EKS/GKE/DOKS; DOKS is the worked example): cluster → Gateway/Envoy Custom Resource Definitions (CRDs) →
kubectl apply -k→ seed → deploy an authority-bound agent → verify allow/deny/needs-approval in ≤30 min. - Observability — Grafana LGTM, the OTel collector, the overview dashboard, DID/VC traces.
- Performance — the egress-decision benchmark (~2.9µs,
make bench-egress), per-stage latency, and the live-p99 method.