Summary
Add a ValidatingAdmissionPolicy (VAP) to give users early feedback when multiple MCPServerRegistrations in the same namespace target the same HTTPRoute.
The controller already detects this conflict (oldest wins, newest marked conflicted), but users only see this after reconciliation. A VAP shifts feedback to admission time.
Approach
Use VAP paramKind referencing a controller-managed ConfigMap that tracks claimed targetRefs per namespace.
- Static: cluster-scoped
ValidatingAdmissionPolicy with CEL expression checking object.spec.targetRef.name against params.data
- Dynamic: controller creates per-namespace
ValidatingAdmissionPolicyBinding + ConfigMap during MCPServerRegistration reconciliation, cleans up when namespace has no registrations
This is best-effort — there's a race window between admission and the controller updating the ConfigMap. The controller's conflict detection remains authoritative. failurePolicy: Ignore and parameterNotFoundAction: Allow ensure the VAP never blocks when state is unavailable.
References
Acceptance Criteria
Summary
Add a ValidatingAdmissionPolicy (VAP) to give users early feedback when multiple MCPServerRegistrations in the same namespace target the same HTTPRoute.
The controller already detects this conflict (oldest wins, newest marked conflicted), but users only see this after reconciliation. A VAP shifts feedback to admission time.
Approach
Use VAP paramKind referencing a controller-managed ConfigMap that tracks claimed targetRefs per namespace.
ValidatingAdmissionPolicywith CEL expression checkingobject.spec.targetRef.nameagainstparams.dataValidatingAdmissionPolicyBinding+ConfigMapduring MCPServerRegistration reconciliation, cleans up when namespace has no registrationsThis is best-effort — there's a race window between admission and the controller updating the ConfigMap. The controller's conflict detection remains authoritative.
failurePolicy: IgnoreandparameterNotFoundAction: Allowensure the VAP never blocks when state is unavailable.References
Acceptance Criteria
ValidatingAdmissionPolicyinconfig/