Disable Istio default retry strategy (at least on POST requests)

3/17/2021

I have an application (microservices-based) running on kubernets with Istio 1.7.4

The microservices has its own mechanisms of transaction compensation on integration failures.

But Istio is retrying requests, when some integrations has 503 status code responses. I need to disabled it (at least on POST, which is non-idenpontent).

And let the application take care of it.

But I've tried so many ways without success. Can someone help me?

-- Samuel de Oliveira Marques
envoyproxy
istio
istio-sidecar
kubernetes
microservices

1 Answer

3/22/2021

Documentation

The interval between retries (25ms+) is variable and determined automatically by Istio, preventing the called service from being overwhelmed with requests. The default retry behavior for HTTP requests is to retry twice before returning the error.

Btw, it was initially 10, but decreased to 2 in Enable retries for specific status codes and reduce num retries to 2 commit.

  • workaround is to use virtual services

you can adjust your retry settings on a per-service basis in virtual services without having to touch your service code. You can also further refine your retry behavior by adding per-retry timeouts, specifying the amount of time you want to wait for each retry attempt to successfully connect to the service.


Examples

1) The following example configures a maximum of 3 retries to connect to this service subset after an initial call failure, each with a 2 second timeout.

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

2) Your case. Disabling retries. Taken from Disable globally the default retry policy:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: no-retries-for-one-service
spec:
  hosts:
  - one-service.default.svc.cluster.local
  http:
  - retries:
      attempts: 0
    route:
      - destination:
          host: one-service.default.svc.cluster.local
-- Vit
Source: StackOverflow