envoyFilter导致的webSockets协议无法正常工作

一、背景

生产项目有一个socket请求经过网关一直无法响应,其它接口服务都能正常处理。

二、 处理过程

让租户提供对应的模拟请求接口,然后进行模拟请求测试,并查看envoy网关日志,发现在发起请求时,envoy网关日志是无法处理次请求的,网关请求日子如下: 开始怀疑难道envoy无法处理次socket,尝试将请求头部分的内容删除,模拟请求发现可以请求通了,然后想到请求头大小导致的,集群做过一次变更,调整了envoy的请求头大小限制,但是这个限制是1G,不可能业务请求头能有这么大,然后删除了创建的envoyfilter,发现业务这个websocket的服务可以正常访问了,百思不得其解。

三、后续排查

针对这个问题,还是到官网查询一番,发现设置缓冲区的envoyFilter会导致webSockets无法正常工作,但是可以在envoyFilter中设置跳过对webSockets的检查。

相关配置如下:

apiVersion: networking.istio.io/v1alpha3

kind: EnvoyFilter

spec:

configPatches:

  • applyTo: HTTP_FILTER

match:

context: GATEWAY

listener:

filterChain:

filter:

name: envoy.filters.network.http_connection_manager

proxy:

proxyVersion: ^1.14.*

patch:

operation: INSERT_BEFORE

value:

name: with-matcher

typed_config:

'@type': type.googleapis.com/envoy.extensions.common.matching.v3.ExtensionWithMatcher

extension_config:

name: envoy.filters.http.buffer

typed_config:

'@type': type.googleapis.com/envoy.extensions.filters.http.buffer.v3.Buffer

max_request_bytes: 52428800

xds_matcher:

matcher_tree:

input:

name: request-headers

typed_config:

'@type': type.googleapis.com/envoy.type.matcher.v3.HttpRequestHeaderMatchInput

header_name: Upgrade

exact_match_map:

map:

websocket:

action:

name: skip

typed_config:

'@type': type.googleapis.com/envoy.extensions.filters.common.matcher.action.v3.SkipFilter

相关文档链接如下:

https://github.com/envoyproxy/envoy/issues/19645

相关推荐
牛角上的男孩23 分钟前
Istio Gateway发布服务
云原生·gateway·istio
是垚不是土1 天前
Istio流量镜像测试
运维·kubernetes·云计算·istio
莱特昂2 天前
virtualBox部署minikube+istio
云原生·istio
牛角上的男孩2 天前
部署istio应用未能产生Envoy sidecar代理
云原生·istio
牛角上的男孩2 天前
部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio
grafana·prometheus·istio
牛角上的男孩8 天前
Istio和Kubernetes版本对应关系
kubernetes·istio
Hello.Reader8 天前
Istio 服务网格深度解析
云原生·istio
风车带走过往11 天前
微服务网格Istio介绍
微服务·架构·istio
是垚不是土11 天前
云原生Istio基础
云原生·istio
Charles Yan14 天前
K8S如何基于Istio重新实现微服务
k8s·istio·1024程序员节