ADR 0003 — Experimental enforcement boundary (cross-repo)¶
Status: accepted (experimental) · Date: 2026-10-02
Context¶
Enforcement adds, in xila-guard-k8s, a kube-scheduler-framework plugin, a
fail-closed admission webhook, and tenant RBAC. The single-evaluator rule must
hold, and no component may claim real GPU isolation.
Decision¶
- Single evaluator preserved. The scheduler plugin (
Filter/PreBind) callsxila-guard-coreover HTTP; it never re-implements policy. The admission webhook performs only structural / identity boundary checks (route, direct binding, host access, tenant resolution) — placement semantics stay in core. - Fail-closed everywhere. deny / indeterminate / incomplete / stale /
source-not-accepted and evaluator timeout / unreachable all block the protected
placement (Filter →
Unschedulable/UnschedulableAndUnresolvable; webhookfailurePolicy: Fail). Transport failure is neverallow. - Two enforce profiles.
context.mode = "enforce"always. The production profile setsacceptedSourceswithoutmock, so synthetic evidence yieldsSOURCE_NOT_ACCEPTEDand is blocked. A clearly-labeled lab-simulated profile (XILAGUARD_ENFORCE_ACCEPT_MOCK=true) acceptsmockstrictly to prove software integration — never described as real enforcement / attestation. - Device-allocation limit is explicit. The scheduler evaluates node-scope
policy over every potentially-allocatable device; it does not claim a specific
physical GPU was selected.
PreBindre-reads fresh policy / evidence and rejects on not-allow, node-UID change, or incarnation change, but cannot prove state is unchanged at execution. - Version coupling. The out-of-tree scheduler is built from
k8s.io/kubernetes v1.35.x; the demo cluster is pinned to the matching Kubernetes 1.35 node image (kind v0.31). A skewed apiserver (e.g. 1.32) does not serveresource.k8s.io/v1(DRA GA in 1.35) and the scheduler's informers never sync.
Consequences¶
- Enforcement is experimental and lab-only; the default mode remains observe.
make demo-m3demonstrates, GPU-free: production-rejects-mock, bind-to-eligible-node-only, deny-with-reason, webhook bypass rejection, and tenant RBAC.- A real-hardware enforcement claim still requires a real collector / attestation run, with authenticated per-node identity before any networked agent is trusted.