Istio虚拟服务超时可以限制为特定的请求时间吗

时间:2019-09-16 21:29:28

标签: istio

可以使Istio Virtual Service仅匹配幂等方法,例如

kind: VirtualService
metadata:
  name: "httpbin-virtual-service"
spec:
  hosts:
  - "*"
  gateways:
  - my-istio-gateway
  http:
  - match:
    - method:
        exact: GET
      uri:
        prefix: /status
      uri:
        prefix: /delay
    route:
    - destination:
        host: "httpbin"
        port:
          number: 80 # application port

但是 有没有办法使VirtualService中配置的Istio重试仅适用于幂等请求(例如GETS),而绕过重试非幂等请求(例如POST)(请参见下文)。在需求方面,我只想重试那些多次调用不太可能改变系统状态的方法? retryOn是实现此功能的理想之地,但我不知道如何以当前形式使用它(除非使用connect-failure / refused流,除非我们假设这些错误表明执行从未在目标服务上执行)

谢谢

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: "httpbin-virtual-service"
spec:
  hosts:
  - "*"
  gateways:
  - my-istio-gateway
  http:
  - match:
    - uri:
        prefix: /status
    - uri:
        prefix: /delay
    timeout: 15s
    retries: ============================> Is there a way to make the retries apply only for idempotent requests eg GETS
      attempts: 5      
      perTryTimeout: 1s
      retryOn: 5xx,gateway-error,connect-failure,refused-stream
    route:
    - destination:
        host: "httpbin"
        port:
          number: 80

我尝试了此配置,但是调用了POST(例如)。仍然似乎触发了重试

例如

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: "httpbin-virtual-service"
spec:
  hosts:
  - "*"
  gateways:
  - my-istio-gateway
  http:
  - match:
    - uri:
        prefix: /status
      method:
        exact: GET
    - uri:
        prefix: /delay
    timeout: 15s
    retries:
      attempts: 5      
      perTryTimeout: 1s
      retryOn: 5xx,gateway-error,connect-failure,refused-stream
    route:
    - destination:
        host: "httpbin"
        port:
          number: 80
  - match:
    - uri:
        prefix: /status
      method:
        exact: POST
    - uri:
        prefix: /delay
    route:
    - destination:
        host: "httpbin"
        port:
          number: 80

2 个答案:

答案 0 :(得分:0)

不久前我也和你处于同一位置。

最后,我知道默认行为是1次重试。

如果我不想重试,则必须通过设置0来覆盖,例如:

retries:
  attempts: 0

请注意,似乎仅从1.2.1开始支持此功能:Issue 14900

值得关注的是这个开放的Issue 13851(至少在撰写本文时)。似乎POST正在重试,即使在第一次尝试中请求没问题时也是如此。

请检查这些内容是否对您有帮助。

答案 1 :(得分:0)

找到一个有效的配置。参见https://github.com/istio/istio/issues/17145