From 9ea878f2dae710b53fbba7456499509f98e66699 Mon Sep 17 00:00:00 2001 From: Jesse Haka Date: Thu, 28 Mar 2024 09:51:31 +0200 Subject: [PATCH] fix: allow websockets in url rewrite (#3022) allow websockets in url rewrite Signed-off-by: Jesse Haka Co-authored-by: zirain --- internal/xds/translator/route.go | 10 ++++++++++ ...http-route-rewrite-root-path-url-prefix.routes.yaml | 2 ++ .../xds-ir/http-route-rewrite-url-fullpath.routes.yaml | 2 ++ .../out/xds-ir/http-route-rewrite-url-host.routes.yaml | 2 ++ .../xds-ir/http-route-rewrite-url-prefix.routes.yaml | 2 ++ 5 files changed, 18 insertions(+) diff --git a/internal/xds/translator/route.go b/internal/xds/translator/route.go index 22654bc8c45f..6cb3e7259b7f 100644 --- a/internal/xds/translator/route.go +++ b/internal/xds/translator/route.go @@ -59,6 +59,16 @@ func buildXdsRoute(httpRoute *ir.HTTPRoute) (*routev3.Route, error) { routeAction.RequestMirrorPolicies = buildXdsRequestMirrorPolicies(httpRoute.Mirrors) } + if !httpRoute.IsHTTP2 { + // Allow websocket upgrades for HTTP 1.1 + // Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism + routeAction.UpgradeConfigs = []*routev3.RouteAction_UpgradeConfig{ + { + UpgradeType: "websocket", + }, + } + } + router.Action = &routev3.Route_Route{Route: routeAction} default: var routeAction *routev3.RouteAction diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.routes.yaml index 2bf01099ad2a..d5a0bd989940 100644 --- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.routes.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.routes.yaml @@ -18,3 +18,5 @@ pattern: regex: ^/origin/\/* substitution: / + upgradeConfigs: + - upgradeType: websocket diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.routes.yaml index f1f30bbbffc5..f8b81712daed 100644 --- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.routes.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.routes.yaml @@ -14,3 +14,5 @@ pattern: regex: /.+ substitution: /rewrite + upgradeConfigs: + - upgradeType: websocket diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.routes.yaml index 7de20ab03052..680a67404ee9 100644 --- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.routes.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.routes.yaml @@ -17,3 +17,5 @@ cluster: rewrite-route-dest hostRewriteLiteral: 3.3.3.3 prefixRewrite: /rewrite + upgradeConfigs: + - upgradeType: websocket diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.routes.yaml index a5f47ebab544..84bc70f04bd2 100644 --- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.routes.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.routes.yaml @@ -15,3 +15,5 @@ route: cluster: rewrite-route-dest prefixRewrite: /rewrite + upgradeConfigs: + - upgradeType: websocket