Istio v1.5 VirtualService设置超180s超时不生效问题咨询
问题结论
VirtualService本身没有180s的超时上限,你遇到的3分钟超时触发是Istio 1.5版本中其他层级的默认配置限制导致的。
除VirtualService外可配置超时的位置
- Ingress Gateway关联的Envoy配置:Istio 1.5版本中,Ingress Gateway的Envoy默认配置里
HttpConnectionManager.request_timeout参数默认值为180s,该参数是网关层面的全局请求超时,优先级高于VirtualService的路由级超时配置,当VirtualService设置的超时大于该值时,会先触发网关层面的超时断开,你日志中返回的response_flags: DC、duration: 180000完全符合该默认配置的触发特征。 - Gateway资源配置:高版本Istio支持直接在Gateway资源中配置监听器维度的超时参数,优先级高于Mesh全局配置。
- Mesh全局配置:Istio的
MeshConfig中可设置全局默认请求超时,作用于所有Sidecar和网关组件,Istio 1.5版本该参数默认值也为180s。 - DestinationRule配置:可针对上游服务配置
connectTimeout(连接建立超时)、idleTimeout(连接空闲超时),如果设置不合理也会提前触发请求断开。 - 客户端请求头配置:你当前的请求是gRPC协议,如果客户端发起请求时携带了
grpc-timeout请求头,该头指定的超时时间优先级最高,会覆盖所有服务端配置。
配置生效方案
你需要先调高Ingress Gateway的全局请求超时,再配合VirtualService的路由级超时即可生效,Istio 1.5版本需要通过EnvoyFilter修改网关配置,示例如下:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: ingressgateway-adjust-timeout namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway configPatches: - applyTo: HTTP_FILTER match: context: GATEWAY listener: # 按需修改为你的网关对外暴露的端口号 portNumber: 80 filterChain: filter: name: "envoy.http_connection_manager" patch: operation: MERGE value: # 调整为大于等于你需要的超时时间即可,这里设置为300s适配你的5分钟服务延迟 request_timeout: 300s
配置完成后,你原有的VirtualService中timeout: 240s的配置即可正常生效,如果需要更长的超时,调整request_timeout参数值即可。
内容的提问来源于stack exchange,提问作者Vineeth NG
相关产品推荐
相关产品推荐

