我是Istio的新手,不是Kubernetes专家,尽管我使用过后者。
为了简单起见,假设我有两个服务,都是Java/SpringBoot。服务A监听来自外部世界的请求,服务B监听来自服务A的请求。服务B是可扩展的,并且在某些点上可能返回503。我希望服务A以可配置的非编程方式重试对服务B的调用。以下是我尝试关注的一个博客/链接,我认为它非常相似:
https://samirbehara.com/2019/06/05/retry-design-pattern-with-istio/
我有两个问题:
-
这可能看起来很明显,但如果我想定义一个虚拟可重试服务,我是将其添加到项目的现有application.yml文件中,还是networking.istio.io/v1alpha3要使用的其他文件?
-
我会在yaml/repo中为服务A或服务B定义重试配置吗?无论哪种方式,我都能想出构建Istio的理由。
如果可扩展服务返回503
,那么添加一个虚拟服务(就像serviceB
的博客示例一样(并使serviceA
连接到virtualServiceB
是有意义的,CCD_4将重试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网关(mesh(不将所有流量路由到serviceB
,而是先路由到virtualServiceB
,然后再路由到CCD-8。然后您将从virtualServiceB
重试到serviceB
。
希望这能帮助