重试不适用于Istio中的故障注入

时间:2019-05-15 14:52:34

标签: microservices istio

当我添加此VirtualService时,故障注入正在工作,并且出现502错误。但是,在引入重试之后,系统中的错误率并没有降低,我仍然收到50%的错误。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: api-broker-timeout
  namespace: four
spec:
  hosts:
  - api-broker-svc
  http:
  - retries:
      attempts: 10
      perTryTimeout: 50mss
      retryOn: gateway-error,5xx,retriable-4xx
    fault:
      delay:
        percent: 100
        fixedDelay: 0.4s
      abort:
        httpStatus: 502
        percent: 50
    route:
    - destination:
        host: api-broker-svc

2 个答案:

答案 0 :(得分:1)

我已经搜索了documentation

我认为retries应该嵌套在route之后 就像上述文档的示例中给出的一样:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
    - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
    retries:
      attempts: 3
      perTryTimeout: 2s

因此您需要使它看起来像这样:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: api-broker-timeout
  namespace: four
spec:
  hosts:
  - api-broker-svc
  http:
  - fault:
      delay:
        percent: 100
        fixedDelay: 0.4s
      abort:
        httpStatus: 502
        percent: 50
    route:
    - destination:
        host: api-broker-svc
    retries:
      attempts: 10
      perTryTimeout: 50mss
      retryOn: gateway-error,5xx,retriable-4xx

我没有亲自测试它,因为需要更多细节来重现这种情况。

希望对您有帮助。

答案 1 :(得分:1)

根据VirtualService规范文档,故障注入和重试不能同时使用。

参考:https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRoute

要在客户端的HTTP流量上应用的故障注入策略。请注意,如果在客户端启用了错误,则不会启用超时或重试。

编辑:

https://github.com/istio/istio/issues/13705

下,这将作为将来的增强功能进行跟踪