Add parallel frontend + MISE v2 stack with header-based routing#4886
Add parallel frontend + MISE v2 stack with header-based routing#4886tony-schndr wants to merge 2 commits intomainfrom
Conversation
|
Skipping CI for Draft Pull Request. |
42ec42a to
073e542
Compare
7070314 to
e445ba3
Compare
|
/test all |
e445ba3 to
7b6729b
Compare
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: tony-schndr The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/test all |
7b6729b to
d52d528
Compare
|
/test all |
d52d528 to
dd2df3b
Compare
|
/test all |
…ting Deploy a second frontend (aro-hcp-frontend-v2) alongside a MISE v2 ext-authz sidecar. Istio VirtualService routes requests with the x-ms-mise-version: v2 header to the v2 stack; all other traffic continues to the existing v1 stack. Separate AuthorizationPolicies scope each ext-authz provider to its respective frontend. Enable mise deployment in dev cloud with MISE v2 image (2.0.1). Wire dedicated MISE Entra app identity into MISE v2 deployment, replacing the 1P app identity. Only MISE v2 (configmap-misev2) uses the new miseAppId; MISE v1 continues using firstPartyAppClientId.
Verify that the Istio VirtualService routes requests to the correct frontend based on the x-ms-mise-version header. Exposes GetHCPClientFactoryOptions on the test framework so e2e tests can append custom per-call policies.
dd2df3b to
0662ec4
Compare
|
/test all |
|
@tony-schndr: The following tests failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
https://redhat.atlassian.net/browse/ARO-23709
What
Deploy a parallel frontend + MISE v2 stack alongside the existing v1 stack, with Istio header-based traffic splitting and e2e tests validating the routing.
Why
MISE v2 has a different configuration format and auth flow. Deploying it as a parallel stack behind a header-based route allows us to validate v2 behavior in-place without disrupting existing v1 traffic. Once validated, cutover can be done by changing the default route.
How routing works
A Kubernetes Deployment can only reference a single ext-authz AuthorizationPolicy, so the VirtualService must handle routing to the correct frontend — it cannot route directly to MISE because Envoy ignores that path. Therefore:
aro-hcp-frontenddeployment has an AuthorizationPolicy binding it toext-authz(MISE v1)aro-hcp-frontend-v2deployment has an AuthorizationPolicy binding it toext-authz-misev2(MISE v2)x-ms-mise-versionrequest header: if set tov2, traffic routes toaro-hcp-frontend-v2; otherwise traffic routes toaro-hcp-frontend(v1 default)By splitting at the VirtualService level, each frontend instance is guaranteed to use its corresponding MISE version.
Testing
E2e tests (
test/e2e/mise_routing.go) validate routing by asserting on a response header:x-ms-served-by: v2response header only for v2-routed requests. The default route adds no response header.x-ms-mise-version: v2request header, then assert thex-ms-served-byresponse header valuex-ms-mise-version: v2header → expectsx-ms-served-by: v2(confirms routing to v2 frontend)x-ms-served-byheader (confirms default routing to v1 frontend)Environment-specific behavior:
Special notes for your reviewer
This is the routing/deployment plumbing only. The actual cutover from v1 to v2 as the default will be a separate change once e2e validation in INT is complete.