用于Istio中的流量管理的核心组件是Pilot,它管理和配置在特定Istio服务网格中部署的全部Envoy代理实例。它容许您指定要用于在Envoy代理之间路由流量的规则,以及配置故障恢复功能(如超时,重试和断路器)。它还维护网格中全部服务的规范模型,并使用它来让Envoys经过其发现服务了解网格中的其余实例。api
每一个Envoy实例根据从Pilot获取的信息以及对其负载平衡池中其余实例的按期运行情况检查来维护负载平衡信息,从而容许它在遵循其指定的路由规则的同时智能地在目标实例之间分配流量。服务器
使用Istio的流量管理模型实质上解耦了流量和基础架构扩展,让运营商经过Pilot指定他们但愿流量遵循的规则,而不是哪些特定的pod / VM应该接收流量 - 飞行员和智能Envoy代理负责其他的工做。所以,例如,您能够经过Pilot指定您但愿特定服务的5%流量转到金丝雀版本,而无论金丝雀部署的大小,或根据请求的内容将流量发送到特定版本。架构
用Istio进行交通管理ide
将流量从这样的基础设施扩展中分离,容许Istio提供存在于应用程序代码以外的各类流量管理功能。除了用于A / B测试,逐步推出和金丝雀版本的动态请求路由以外,它还使用超时,重试和断路器处理故障恢复,最后使用故障注入来测试跨服务的故障恢复策略的兼容性。这些功能都是经过服务网格上部署的Envoy sidecars / proxies实现的。svg
Pilot负责整个Istio服务网格中部署的Envoy实例的生命周期。测试
试点架构ui
如上图所示,Pilot维护网格中服务的规范表示,该服务独立于底层平台。Pilot中特定于平台的适配器负责适当地填充此规范模型。例如,Pilot中的Kubernetes适配器实现了必要的控制器,以观察Kubernetes API服务器是否更改了pod注册信息,入口资源以及存储流量管理规则的第三方资源。该数据被翻译成规范表示。特定于特定的配置基于规范表示生成。spa
Pilot公开API用于服务发现,动态更新到负载平衡池和路由表。这些API将Envoy与特定于平台的细微差异分离,简化了设计并提升了跨平台的可移植性。翻译
运营商能够经过Pilot规则API指定高级别流量管理规则。这些规则被转换为低级配置,并经过发现API分发给Envoy实例。设计
https://istio.io/docs/guides/bookinfo/
https://istio.io/docs/concepts/traffic-management/pilot/