Istio:流量管理
文章内容基本来自Istio官网,这里属于学习的记录。
之前提到过Istio
的几大组件:Enovy
、Pilot
、Mixer
、Citadel
、Galley
,它们各自负责不同的功能。而流量管理的功能,主要由Envoy
和Pilot
负责。
Pilot 和 Envoy
Pilot
是Istio
管理流量的核心组件,它管理和配置所有Envoy
代理。
通过Pilot
,我们可以路由流量、配置失败策略,比如:超时、重试、断路器。Pilot
还对底层的平台实现进行了抽象,不局限于Kubernetes
。
Envoy
通过Pilot
获取信息,维护着一个负载均衡池,对池中的实例做周期性健康检查,然后根据路由的规则智能分配流量到这些实例去。
Pilot
维护着与底层平台无关的一套服务规范,然后对于每个平台,Pilot
有着对应的适配器来填充对应的规则。
Pilot
支持服务发现,负载均衡池和路由表的动态更新。
所以我们只要管理好Pilot
的规则,接下来Pilot
会自动帮我们转换成低级别的配置,然后分发到Envoy
实例去。
请求路由
像前面说的,在Service Mesh
中,Pilot
维护着服务的规范,Istio
的服务模型与底层无关,适配器会从各平台获取信息然后进行填充。
Istio
引入了服务版本的概念,可以用版本号像 v1, v2,也可以用部署的环境 staging, prod 来标识。有了这个概念,Istio
可以完成 A/B 测试, 金丝雀部署 这样的场景,通过流量控制服务的迭代来控制。
服务间通讯
对于用户端而言,它通过域名/ip去访问服务,而服务背后的版本,客户端并不知道。
Envoy
拦截转发服务与客户端之间通讯的流量。Envoy
根据我们使用Pilot
配置的路由规则,动态决定具体哪个服务接受请求。这个模型使得应用程序代码从所依赖服务的演进中解耦出来,同时还能提供其他好处(参见Mixer)。路由规则让Envoy
能够从头部、标签、源/目的地等等来获取版本信息,然后根据不同的权重分发到各自的版本。
Ingress和Egress
在Istio
中,假定网格中所有的流量都会经过Envoy
,对于进入的流量,我们可以进行A/B测试,金丝雀部署。而对于外部的服务,我们可以配置超时、重试、断路器的功能,而且还能从这些请求中获取详细的信息。
参考
- 本文链接:https://keepmoving.ren/istio/traffic-management/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!