使用 Istio 管理通过 TLS 的外部调用的重试和超时
使用 Istio 管理通过 TLS 的外部调用的重试和超时
Istio 帮助我们在系统调用外部 API 时设置超时和重试,而无需编码或更改现有系统。
在本文中,我将向您展示如何管理 Istio 服务网格中的流量,并将超时和重试模式应用于 API 调用。这些服务可以是使用 TLS 加密连接上的外部服务。
为什么我们需要超时和重试?
在分布式系统的世界中,管理重试是从瞬态错误中恢复的重要模式。大多数这些错误是自我修复错误。例如,网络故障错误或服务过载错误。此外,处理超时也是类似的。我们在内部或外部使用的任何服务都可能进入未知状态并且无法响应,或者它们变得非常慢并最终导致请求正在经历的一系列调用超时。
如果我们的系统有一些外部依赖项,比如第三方 API,那么考虑它们就更重要了。因为这些服务甚至不在我们的控制范围内,所以我们不会对它们进行任何监控。
在 TLS 上访问 API 与普通 HTTP 有何不同?
虽然您可以在您的服务中使用 TLS,并使用 Istio(特使代理)将其路由到指定位置,但是您将失去 Istio 的许多强大功能。因为当您通过代理传递加密消息时,该代理无法访问 HTTP 请求或响应的内容。代理无法打开内容并对其应用任何更改。但由于许多安全问题,使用 HTTP 也不是一种选择。但一种解决方案可能是您在特使代理而不是您的服务上启动 TLS。您通过纯 HTTP 与 Envoy 代理通信,并且 Envoy 为您执行所有与 TLS 相关的加密。
但它会带来任何漏洞吗?
答案是不。因为容器(您的服务和代理)位于 Pod 内并使用环回网络接口进行通信。它完全在操作系统的网络软件中实现,并且不向任何网络接口控制器传递数据包。您的服务和特使代理在
在 Istio 上设置外部访问
让我们建立这个模型。第一步是定义一个 服务入口 .我们使用服务条目向 Istio 内部维护的服务注册表添加一个条目。配置服务条目允许您管理在网格外部运行的服务的流量,就像它在网格内部一样。就像您的一项服务一样。这是一个例子:
api版本:networking.istio.io/v1alpha3
种类:服务入口
元数据:
名称:我的服务条目
规格:
主持人:
- your-public-domain.com
端口:
- 数量:443
名称:https
协议:TLS
- 数量:80
名称:http
协议:HTTP
位置:MESH_EXTERNAL
解析:DNS
现在我们设置 Istio 以在端口 80 和 433 上为 TLS 开放对该外部服务的访问。
现在我们要定义一些策略并告诉 Istio 使用 TLS 将端口 443 上的每个流量路由到目标域。
api版本:networking.istio.io/v1alpha3
种类:DestinationRule
元数据:
名称:我的服务规则
规格:
主机:your-public-domain.com
交通政策:
负载均衡器:
简单:ROUND_ROBIN
端口级别设置:
- 港口:
数量:443
tls:
模式:简单
好的,现在一切都已准备就绪,可以使用定义的外部服务作为网格的一部分。你可以定义一个 虚拟服务 管理目标主机上的重试和超时。例如:
api版本:networking.istio.io/v1alpha3
种类:虚拟服务
元数据:
名称:我的虚拟服务
规格:
主持人:
- your-public-domain.com
网址:
- 匹配:
- 端口:80
路线:
- 目的地:
主机:your-public-domain.com
港口:
数量:443
重试:
尝试:3
perTryTimeout: 10s
重试:连接失败,拒绝流,不可用,已取消,资源耗尽,可重试状态代码,网关错误,500
因此,这意味着在主机的端口 80 上发送的每个请求 your-public-domain.com ,使用 TLS 加密并在端口 443 上转发并发送出去。
请求重试 3 次,每次 10 秒。您可以使用 retryOn 定义我们在什么条件下进行重试。现在我们将外部服务作为网格的一部分,我们可以使用 Istio 流量管理 解决方案。查看 Istio 官网 更多。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端