Istio是一个开源的服务网格,可为分布式微服务架构提供所需的基础运行和管理要素。随着各组织越来越多地采用云平台,开发者必须使用微服务设计架构以实现可移植性,而运维人员必须管理包含混合云部署和多云部署的大型分布式应用。Istio采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性。
从架构设计上来看,Istio服务网格在逻辑上分为控制平面和数据平面两部分。其中,控制平面Pilot负责管理和配置代理来路由流量,并配置Mixer以实施策略和收集遥测数据;数据平面由一组以Sidecar方式部署的智能代理(Envoy)组成,这些代理可以调节和控制微服务及Mixer之间所有的网络通信,如图3-1所示。
作为代理,Envoy非常适合服务网格的场景,但要发挥Envoy的最大价值,就需要使它很好地与底层基础设施或组件紧密配合。Envoy构成了服务网格的数据平面,Istio提供的支撑组件则是创建了控制平面。
一方面,我们在Envoy中看到,可以使用静态配置文件或使用一组发现服务来配置一组服务代理,以便在运行时发现监听器、端点和集群。Istio在Pilot中实现了这些Envoy代理的xDS API。
另一方面,Envoy的服务发现依赖于某种服务注册表来发现服务端点。Istio Pilot实现了这个API,但也将Envoy从任何特定的服务注册实现中抽象出来。当Istio部署在Kubernetes上时,Kubernetes的服务注册表是Istio用于服务发现的。其他注册表也可以像HashiCorp的Consul那样使用。Envoy数据平面完全不受这些实施细节的影响。Pilot与Envoy数据平面的关系参见图3-2。

图3-1 Istio架构

图3-2 Pilot与Envoy数据平面
此外,Envoy代理可以发出很多指标和遥测数据,这些遥测数据发送到何处,取决于Envoy的配置。如图3-3所示,Istio提供遥测接收器Mixer作为其控制平面的一部分,Envoy代理可以将这些数据发送到Mixer。Envoy还将分布式跟踪数据发送到开放式跟踪引擎(遵循Open Tracing API)。Istio可以支持兼容的开放式跟踪引擎并配置Envoy将其跟踪数据发送到该位置。

图3-3 Mixer架构