Kubernetes evaluator
A validating admission webhook that asks Evaluate before annotated workloads are admitted. It is not the Kubernetes exporter. Install it as its own Deployment — an exporter outage must not disable the gate, and a gate outage must not stop evidence from landing.
Code: Evitrus/exporter → admission/.
Independence
| Component | Job |
|---|---|
| Kubernetes exporter | Watch rollouts, emit deploy.succeeded / operate.config.changed |
| This evaluator | POST /compliance/evaluate; deny records deploy.blocked |
Do not merge them into one binary or one Kubernetes Deployment.
Setup
- Mint an API key with
evaluate(andingestif denies should be stored asdeploy.blocked). - Deploy
admission/with TLS (cert-manager in the sample manifest). - Point
EVITRUS_EVALUATE_URL/EVITRUS_INGEST_URLat your Evitrus API. SetEVITRUS_ENVIRONMENTto the environment this cluster ships (defaultprod). Staging clusters should setstaging(or similar) so a prod break-glass window cannot admit here. - Label namespaces that should be gated:
evitrus.dev/enforce=true. - Annotate workloads with
evitrus.dev/commit(opt-in). Objects without that annotation are not gated. Optionalevitrus.dev/environment(or anenvironment/envlabel) overridesEVITRUS_ENVIRONMENTper workload so Evaluate can match a break-glass window.
Sample manifests: exporter/admission/deploy/deployment.yaml. failurePolicy: Ignore on the webhook is fail-open at the apiserver if the evaluator is down.
Failure semantics
| Evaluate outcome | Admission | Evidence |
|---|---|---|
| pass / overridden / breakglass / na | allow | none extra |
| fail | deny | deploy.blocked |
| timeout / 5xx | allow (fail-open) | none |
Evaluator down (failurePolicy: Ignore) | allow | none |
na (dark evidence) does not block. Pack-on includes the gate unless disabled in product.
See also the Kubernetes exporter.