如何解决禁用 Istio 默认重试策略至少在 POST 请求上
我有一个使用 Istio 1.7.4 在 kubernets 上运行的应用程序(基于微服务)
微服务在集成失败时有自己的事务补偿机制。
但是当某些集成有 503 状态代码响应时,Istio 正在重试请求。我需要禁用它(至少在 POST 上,这是非 identpontent)。
让应用程序来处理它。
但是我尝试了很多方法都没有成功。有人可以帮我吗?
解决方法
文档
- 来自 Istio Retries documentation:默认
retry
是硬编码的,其值等于 2。
重试间隔(25ms+)是可变且确定的 由 Istio 自动,防止被调用的服务被 被要求淹没。 HTTP 的默认重试行为 requests 是在返回错误之前重试两次。
顺便说一句,最初是 10,但在 Enable retries for specific status codes and reduce num retries to 2 提交中减少到 2。
- 解决方法是使用虚拟服务
您可以在虚拟环境中针对每个服务调整重试设置 服务,而无需触及您的服务代码。你也可以 通过添加每次重试超时进一步优化您的重试行为, 指定每次重试尝试要等待的时间 成功连接到服务。
示例
- 以下示例配置了最多 3 次重试以在初始调用失败后连接到此服务子集,每次重试时间为 2 秒。
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
- 你的情况。禁用重试。取自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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。