Resolved: Where to put Istio network retry


I’m very new to Istio and not a Kubernete’s expert, though I have used the latter. I respectfully ask for your understanding and a bit more details than you might normally include.
For simplicity, say I have two services, both Java/SpringBoot. Service A listens to requests from the outside world, Service B listens to requests from Service A. Service B is scalable, and at points might return 503. I wish to have service A retry calls to service B in a configurable non-programmatic way. Here’s a blog/link that I tried to follow that I think is very similar.
Two questions:
  1. It may seem obvious, but if I wanted to define a virtual retriable service, do I add it to the existing application.yml file for the project or is there some other file that the goes?

  2. Would I define the retry configuration in the yaml/repo for Service A or Service B? I can think of reasons for architecting Istio either way.

Thanks, Woodsman


If the scalable service is returning 503, it makes sense to add a virtual service just like the blog example for serviceB and make serviceA connect to virtualServiceB which will do the retries to ServiceB
Now, for this to work (from within the cluster):
kind: VirtualService
  name: serviceB
  – serviceB
  – route:
    – destination:
        host: serviceB
      attempts: 3
      perTryTimeout: 2s
These lines:
  – serviceB
Will tell the default Istio Gateway (mesh) to route all the traffic not to serviceB, but to virtualServiceB first which will then route to ServiceB. Then you will have retries from virtualServiceB to serviceB.
Hope this helps

If you have better answer, please add a comment about this, thank you!