我测试了在 istio 安装的 pod 之间发送带有
x-envoy-upstream-rq-timeout-ms
标头的 http 请求。 特使代理
我预计请求会因为非常小的超时毫秒(1 毫秒)而失败。它比响应头中的实际上游服务时间短。
x-envoy-upstream-service-time: 5
root@nginx:/# curl -v -H "x-envoy-upstream-rq-timeout-ms: 1" 'http://http-echo-svc.circuit-breaker/200'
* Trying 172.20.236.72:80...
* Connected to http-echo-svc.circuit-breaker (172.20.236.72) port 80 (#0)
> GET /200 HTTP/1.1
> Host: http-echo-svc.circuit-breaker
> User-Agent: curl/7.74.0
> Accept: */*
> x-envoy-upstream-rq-timeout-ms: 1
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 0
< date: Mon, 07 Aug 2023 07:21:48 GMT
< x-envoy-upstream-service-time: 5
< server: envoy
<
* Connection #0 to host http-echo-svc.circuit-breaker left intact
如您所见,请求没有超时。我的测试有问题吗?
标头“x-envoy-upstream-rq-timeout-ms”肯定会起作用。会出现网关超时错误。
请确保虚拟服务中的超时值没有设置为“0”,如下所示。这将禁用超时。更多详细信息请参阅envoy 文档
http:
- route:
- destination:
host: reviews
timeout: 0
看起来卷曲请求是从 Pod 内部发出的。来自 Pod 内部的卷曲请求没有 header 效果。
当从外部 Pod 使用“x-envoy-upstream-rq-timeout-ms”发出卷曲请求时,您应该看到以下卷曲请求的输出。
< HTTP/1.1 504 Gateway Timeout
< content-length: 0
< date: Mon, 07 Aug 2023 07:21:48 GMT
< x-envoy-upstream-service-time: 5
< server: istio-envoy