diff --git a/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml b/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml index 31b11eb1af..0298672405 100644 --- a/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml +++ b/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml @@ -1213,14 +1213,14 @@ xds: initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - name: envoy.filters.http.grpc_web - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.grpc_stats typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig emitFilterState: true statsForAllMethods: true + - name: envoy.filters.http.grpc_web + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json index b592bd3e6a..c4e6028701 100644 --- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json +++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json @@ -1089,12 +1089,6 @@ "maxConcurrentStreams": 100 }, "httpFilters": [ - { - "name": "envoy.filters.http.grpc_web", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb" - } - }, { "name": "envoy.filters.http.grpc_stats", "typedConfig": { @@ -1103,6 +1097,12 @@ "statsForAllMethods": true } }, + { + "name": "envoy.filters.http.grpc_web", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb" + } + }, { "name": "envoy.filters.http.router", "typedConfig": { diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml index 0ce878805f..609db3c6b6 100644 --- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml +++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml @@ -666,14 +666,14 @@ xds: initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - name: envoy.filters.http.grpc_web - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.grpc_stats typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig emitFilterState: true statsForAllMethods: true + - name: envoy.filters.http.grpc_web + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.listener.yaml b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.listener.yaml index c0fa7da7c8..1c8fba4d1d 100644 --- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.listener.yaml +++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.listener.yaml @@ -230,14 +230,14 @@ xds: initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - name: envoy.filters.http.grpc_web - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.grpc_stats typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig emitFilterState: true statsForAllMethods: true + - name: envoy.filters.http.grpc_web + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/httpfilters.go b/internal/xds/translator/httpfilters.go index 2f413cfaf1..a5e0a25c16 100644 --- a/internal/xds/translator/httpfilters.go +++ b/internal/xds/translator/httpfilters.go @@ -153,6 +153,14 @@ func (o OrderedHTTPFilters) Len() int { } func (o OrderedHTTPFilters) Less(i, j int) bool { + // Sort on name if the order is equal + // to keep the order stable and avoiding + // listener drains + if o[i].order == o[j].order { + return o[i].filter.Name < o[j].filter.Name + } + + // Sort on order return o[i].order < o[j].order } @@ -171,6 +179,7 @@ func sortHTTPFilters(filters []*hcmv3.HttpFilter, filterOrder []egv1a1.FilterPos for i := 0; i < len(filters); i++ { orderedFilters[i] = newOrderedHTTPFilter(filters[i]) } + sort.Sort(orderedFilters) // Use a linked list to sort the filters in the custom order. diff --git a/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.listeners.yaml index 102acc609b..cd67a05d25 100644 --- a/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.listeners.yaml @@ -15,19 +15,19 @@ maxConcurrentStreams: 100 httpFilters: - disabled: true - name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-http-route-1 + name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-gateway-1 typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.basic_auth.v3.BasicAuth - forwardUsernameHeader: x-username + forwardUsernameHeader: x-user-id users: - inlineBytes: dXNlcjE6e1NIQX10RVNzQm1FL3lOWTNsYjZhMEw2dlZRRVpOcXc9CnVzZXIyOntTSEF9RUo5TFBGRFhzTjl5blNtYnh2anA3NUJtbHg4PQo= + inlineBytes: Zm9vOntTSEF9WXMyM0FnLzVJT1dxWkN3OVFHYVZEZEh3SDAwPQpmb28xOntTSEF9ZGpaMTFxSFkwS09pamV5bUs3YUt2WXV2aHZNPQo= - disabled: true - name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-gateway-1 + name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-http-route-1 typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.basic_auth.v3.BasicAuth - forwardUsernameHeader: x-user-id + forwardUsernameHeader: x-username users: - inlineBytes: Zm9vOntTSEF9WXMyM0FnLzVJT1dxWkN3OVFHYVZEZEh3SDAwPQpmb28xOntTSEF9ZGpaMTFxSFkwS09pamV5bUs3YUt2WXV2aHZNPQo= + inlineBytes: dXNlcjE6e1NIQX10RVNzQm1FL3lOWTNsYjZhMEw2dlZRRVpOcXc9CnVzZXIyOntTSEF9RUo5TFBGRFhzTjl5blNtYnh2anA3NUJtbHg4PQo= - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/basic-auth.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/basic-auth.listeners.yaml index df9365142e..29a61b1b93 100644 --- a/internal/xds/translator/testdata/out/xds-ir/basic-auth.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/basic-auth.listeners.yaml @@ -15,17 +15,17 @@ maxConcurrentStreams: 100 httpFilters: - disabled: true - name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-http-route-1 + name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-gateway-1 typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.basic_auth.v3.BasicAuth users: - inlineBytes: dXNlcjE6e1NIQX10RVNzQm1FL3lOWTNsYjZhMEw2dlZRRVpOcXc9CnVzZXIyOntTSEF9RUo5TFBGRFhzTjl5blNtYnh2anA3NUJtbHg4PQo= + inlineBytes: Zm9vOntTSEF9WXMyM0FnLzVJT1dxWkN3OVFHYVZEZEh3SDAwPQpmb28xOntTSEF9ZGpaMTFxSFkwS09pamV5bUs3YUt2WXV2aHZNPQo= - disabled: true - name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-gateway-1 + name: envoy.filters.http.basic_auth/securitypolicy/default/policy-for-http-route-1 typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.basic_auth.v3.BasicAuth users: - inlineBytes: Zm9vOntTSEF9WXMyM0FnLzVJT1dxWkN3OVFHYVZEZEh3SDAwPQpmb28xOntTSEF9ZGpaMTFxSFkwS09pamV5bUs3YUt2WXV2aHZNPQo= + inlineBytes: dXNlcjE6e1NIQX10RVNzQm1FL3lOWTNsYjZhMEw2dlZRRVpOcXc9CnVzZXIyOntTSEF9RUo5TFBGRFhzTjl5blNtYnh2anA3NUJtbHg4PQo= - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.listeners.yaml index 27c418f60e..c5fb9a58f8 100644 --- a/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.listeners.yaml @@ -138,14 +138,14 @@ transportApiVersion: V3 withRequestBody: maxRequestBytes: 8192 - - name: envoy.filters.http.grpc_web - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.grpc_stats typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig emitFilterState: true statsForAllMethods: true + - name: envoy.filters.http.grpc_web + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - disabled: true name: envoy.filters.http.ext_proc/envoyextensionpolicy/default/policy-for-httproute/extproc/0 typedConfig: diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.listeners.yaml index 7700a8986c..54c5036236 100644 --- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.listeners.yaml @@ -14,22 +14,6 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - disabled: true - name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz - allowedHeaders: - patterns: - - exact: header1 - ignoreCase: true - - exact: header2 - ignoreCase: true - grpcService: - envoyGrpc: - authority: primary.foo.com - clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend - timeout: 10s - transportApiVersion: V3 - disabled: true name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-gateway-1 typedConfig: @@ -49,6 +33,22 @@ timeout: 10s uri: http://primary.foo.com/auth transportApiVersion: V3 + - disabled: true + name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + allowedHeaders: + patterns: + - exact: header1 + ignoreCase: true + - exact: header2 + ignoreCase: true + grpcService: + envoyGrpc: + authority: primary.foo.com + clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend + timeout: 10s + transportApiVersion: V3 - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.listeners.yaml index 50c1b91ee9..7532049e80 100644 --- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.listeners.yaml @@ -14,22 +14,6 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - disabled: true - name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz - allowedHeaders: - patterns: - - exact: header1 - ignoreCase: true - - exact: header2 - ignoreCase: true - grpcService: - envoyGrpc: - authority: primary.foo.com - clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend - timeout: 10s - transportApiVersion: V3 - disabled: true name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-gateway-1 typedConfig: @@ -51,6 +35,22 @@ transportApiVersion: V3 withRequestBody: maxRequestBytes: 32768 + - disabled: true + name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + allowedHeaders: + patterns: + - exact: header1 + ignoreCase: true + - exact: header2 + ignoreCase: true + grpcService: + envoyGrpc: + authority: primary.foo.com + clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend + timeout: 10s + transportApiVersion: V3 - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.listeners.yaml index 2cd9c22f99..87765fcd69 100644 --- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.listeners.yaml @@ -14,22 +14,6 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - disabled: true - name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz - allowedHeaders: - patterns: - - exact: header1 - ignoreCase: true - - exact: header2 - ignoreCase: true - grpcService: - envoyGrpc: - authority: primary.foo.com - clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend - timeout: 10s - transportApiVersion: V3 - disabled: true name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-gateway-1 typedConfig: @@ -50,6 +34,22 @@ timeout: 10s uri: http://primary.foo.com/auth transportApiVersion: V3 + - disabled: true + name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + allowedHeaders: + patterns: + - exact: header1 + ignoreCase: true + - exact: header2 + ignoreCase: true + grpcService: + envoyGrpc: + authority: primary.foo.com + clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend + timeout: 10s + transportApiVersion: V3 - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth.listeners.yaml index d4b0d94c49..70476f73bc 100644 --- a/internal/xds/translator/testdata/out/xds-ir/ext-auth.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth.listeners.yaml @@ -14,22 +14,6 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - disabled: true - name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz - allowedHeaders: - patterns: - - exact: header1 - ignoreCase: true - - exact: header2 - ignoreCase: true - grpcService: - envoyGrpc: - authority: grpc-backend.default:9000 - clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend - timeout: 10s - transportApiVersion: V3 - disabled: true name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-gateway-1 typedConfig: @@ -49,6 +33,22 @@ timeout: 10s uri: http://http-backend.envoy-gateway:80/auth transportApiVersion: V3 + - disabled: true + name: envoy.filters.http.ext_authz/securitypolicy/default/policy-for-http-route-1 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + allowedHeaders: + patterns: + - exact: header1 + ignoreCase: true + - exact: header2 + ignoreCase: true + grpcService: + envoyGrpc: + authority: grpc-backend.default:9000 + clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend + timeout: 10s + transportApiVersion: V3 - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-proc.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-proc.listeners.yaml index 2b19425f13..e0741bc3d4 100755 --- a/internal/xds/translator/testdata/out/xds-ir/ext-proc.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/ext-proc.listeners.yaml @@ -14,6 +14,23 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: + - disabled: true + name: envoy.filters.http.ext_proc/envoyextensionpolicy/default/policy-for-route-1/extproc/0 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor + failureModeAllow: true + grpcService: + envoyGrpc: + authority: grpc-backend-2.default:8000 + clusterName: envoyextensionpolicy/default/policy-for-route-1/0/grpc-backend-2 + timeout: 10s + messageTimeout: 5s + processingMode: + requestBodyMode: BUFFERED_PARTIAL + requestHeaderMode: SKIP + requestTrailerMode: SKIP + responseHeaderMode: SEND + responseTrailerMode: SKIP - disabled: true name: envoy.filters.http.ext_proc/envoyextensionpolicy/default/policy-for-route-2/extproc/0 typedConfig: @@ -45,37 +62,6 @@ - connection.requested_server_name responseAttributes: - request.path - - disabled: true - name: envoy.filters.http.ext_proc/envoyextensionpolicy/default/policy-for-route-1/extproc/0 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor - failureModeAllow: true - grpcService: - envoyGrpc: - authority: grpc-backend-2.default:8000 - clusterName: envoyextensionpolicy/default/policy-for-route-1/0/grpc-backend-2 - timeout: 10s - messageTimeout: 5s - processingMode: - requestBodyMode: BUFFERED_PARTIAL - requestHeaderMode: SKIP - requestTrailerMode: SKIP - responseHeaderMode: SEND - responseTrailerMode: SKIP - - disabled: true - name: envoy.filters.http.ext_proc/envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/extproc/0 - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor - grpcService: - envoyGrpc: - authority: grpc-backend-3.envoy-gateway:3000 - clusterName: envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/0/grpc-backend-3 - timeout: 10s - processingMode: - requestHeaderMode: SKIP - requestTrailerMode: SKIP - responseHeaderMode: SKIP - responseTrailerMode: SKIP - disabled: true name: envoy.filters.http.ext_proc/envoyextensionpolicy/envoy-gateway/policy-for-gateway-1/extproc/0 typedConfig: @@ -103,6 +89,20 @@ - connection.requested_server_name responseAttributes: - request.path + - disabled: true + name: envoy.filters.http.ext_proc/envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/extproc/0 + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor + grpcService: + envoyGrpc: + authority: grpc-backend-3.envoy-gateway:3000 + clusterName: envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/0/grpc-backend-3 + timeout: 10s + processingMode: + requestHeaderMode: SKIP + requestTrailerMode: SKIP + responseHeaderMode: SKIP + responseTrailerMode: SKIP - disabled: true name: envoy.filters.http.ext_proc/envoyextensionpolicy/envoy-gateway/policy-for-route-3/extproc/0 typedConfig: diff --git a/internal/xds/translator/testdata/out/xds-ir/http2-route.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/http2-route.listeners.yaml index b2e4d2fb20..2a7c6641af 100644 --- a/internal/xds/translator/testdata/out/xds-ir/http2-route.listeners.yaml +++ b/internal/xds/translator/testdata/out/xds-ir/http2-route.listeners.yaml @@ -14,14 +14,14 @@ initialStreamWindowSize: 65536 maxConcurrentStreams: 100 httpFilters: - - name: envoy.filters.http.grpc_web - typedConfig: - '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.grpc_stats typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig emitFilterState: true statsForAllMethods: true + - name: envoy.filters.http.grpc_web + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb - name: envoy.filters.http.router typedConfig: '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router