在哪里放置 Istio 网络重试

Where to put Istio network retry

我对Istio很陌生,不是Kubernete的专家,虽然我用过后者。我恭敬地请求您的理解和比您通常可能包含的更多的细节。

为简单起见,假设我有两个服务,都是 Java/SpringBoot。服务 A 监听来自外部世界的请求,服务 B 监听来自服务 A 的请求。服务 B 是可扩展的,并且有时可能 return 503。我希望服务 A 在可配置的非- 编程方式。这是我尝试遵循的 blog/link,我认为它非常相似。

https://samirbehara.com/2019/06/05/retry-design-pattern-with-istio/

两个问题:

  1. 这看起来很明显,但是如果我想定义一个虚拟可重试服务,我是将它添加到项目的现有 application.yml 文件中,还是有其他文件可以networking.istio.io/v1alpha3 去?

  2. 我是否会在 yaml/repo 中为服务 A 或服务 B 定义重试配置?我可以想到以任何一种方式构建 Istio 的原因。

谢谢, 樵夫

如果可扩展服务正在返回 503,那么像 serviceB 的博客示例一样添加虚拟服务并使 serviceA 连接到 virtualServiceB 是有意义的这将重试 ServiceB

现在,要让它工作(从集群内):

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

这些行:

  hosts:
  – serviceB

将告诉默认的 Istio 网关(网状网络)将所有流量不路由到 serviceB,而是先路由到 virtualServiceB,然后再路由到 ServiceB。然后你将重试从 virtualServiceBserviceB.

希望对您有所帮助