第 8 章 交通管理 流量管理
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
流量管理是所有服务网格的核心功能之一,因此通常是一个深度功能区。 Istio 当然也是如此。本章以流量管理为研究主题,我们将从请求如何在系统中流动的角度开始探索 Istio 的功能,并在此过程中熟悉 Istio 的 Network+ API。我们还将了解如何使用这些 API 配置流量流,使您能够进行金丝雀新部署、设置所有服务一致的超时和重试策略,最后通过可控、可重复的故障注入测试应用程序的故障模式。
了解 Istio 中的流量流向
要想了解 Istio 的 Network API 如何工作,了解请求在 Istio 中的实际流动情况非常重要。 正如我们在上一章所了解的,Pilot 会了解服务网格的拓扑结构,并利用这些知识以及您提供的其他 Istio 网络配置来配置网格的服务代理。有关 Pilot 向服务代理推送的配置类型的更多信息,请参阅第 7 章。
作为数据平面服务代理,Envoy 会在运行时拦截所有传入和传出请求(当流量流经服务 Mesh 时)。这种拦截是通过 iptables 规则或伯克利数据包过滤器(BPF)程序以透明方式完成的,该程序会将所有网络流量通过 Envoy 进行路由,包括输入和输出。 Envoy 会检查请求,并使用请求的主机名、SNI 或服务虚拟 IP 地址来确定请求的目标(客户端打算向其发送请求的服务)。Envoy 应用目标的路由规则来确定请求的目的地(服务代理实际要向其发送请求的服务)。确定目的地后,Envoy 就会应用目的地的规则。 目的地规则包括负载平衡策略,用于选择端点(端点是支持目的地服务的工作者的地址)。服务通常有一个以上的工作者可用于处理请求。请求可以在这些工作者之间进行平衡。最后,Envoy 会将截获的请求转发到端点。
有一些值得注意的地方值得进一步说明。首先,最好让你的应用程序与侧挂服务代理进行明文通信(不加密通信),并让服务代理处理传输安全问题。 例如,您的应用程序可以向侧卡发送 HTTP 信息,并让侧卡处理升级到 HTTPS 的过程。这样,服务代理就能收集有关请求的 L7 元数据,从而让 Istio 生成 L7 指标,并根据 L7 策略操纵流量。如果服务代理不执行 TLS 终止,Istio 就可以只对请求的 L4 段生成指标并应用策略,将策略限制在 IP 数据包和 TCP 头的内容(基本上是源地址、目标地址和端口号)。 其次,我们可以执行客户端负载平衡,而不是依靠传统的反向代理来实现负载平衡。 客户端负载平衡意味着我们可以直接建立从客户端到服务器的网络连接,同时还能保持一个弹性良好的系统。与依赖反向代理的传统系统相比,这反过来又能以更少的跳数实现更高效的网络拓扑结构。
通常情况下,Pilot 会在注册表中提供有关服务的详细端点信息,并将其直接推送给服务代理。 因此,除非对服务代理进行其他配置,否则在运行时,服务代理会从 Pilot 向其推送的静态端点集中选择端点,而不会在运行时执行动态地址解析(例如通过 DNS)。 因此,Istio 只能将流量路由到 Istio 服务注册表中的主机名。较新版本的 Istio 有一个安装选项(1.1 版默认设置为 "关闭")可以改变这种行为,只要应用程序提供 IP 地址,Envoy 就可以将流量转发到 Istio 中未建模的未知服务。
在下一节中,我们将讨论作为 Istio 网络模型核心的主机名,以及 Istio 的网络 API ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access