Istio的架构设计

https://mp.weixin.qq.com/s?__biz=Mzg5MDU5NTM1NQ==&mid=2247509474&idx=1&sn=0f9b0a52ae41c82312c80129693ea131&source=41#wechat_redirect

https://mp.weixin.qq.com/s?__biz=Mzg5MDU5NTM1NQ==&mid=2247509474&idx=1&sn=0f9b0a52ae41c82312c80129693ea131&source=41#wechat_redirect

Istio的架构设计

华章计算机 2019-06-10 06:33

图片

 

Istio的架构设计在逻辑上分为数据平面和控制平面:

 

数据平面由一系列称为“边车”(sidecar)的智能代理组成,这些代理通过Mixer来控制所有微服务间的网络通信,Mixer是一个通用的策略和遥测中心。

 

控制平面负责管理和配置代理来路由流量,另外,控制平面通过配置Mixer来实施策略与遥测数据收集。

 

Istio的数据平面主要负责流量转发、策略实施与遥测数据上报;Istio的控制平面主要负责接收用户配置生成路由规则、分发路由规则到代理、分发策略与遥测数据收集。

 

图片

 

用户通过控制平面提供的API提交路由配置规则、策略配置规则与遥测数据收集的配置规则。Pilot把用户提交的配置规则转换成智能代理需要的配置形式,推送给智能代理。智能代理根据用户的配置来执行服务路由、遥测数据收集与服务访问策略。智能代理拦截服务所有流量,并与其他智能代理通信。

 

01 数据平面

 

Istio在数据平面中使用一个Envoy代理的扩展版本。Envoy是使用C++语言开发的高性能代理,它能拦截服务网络中所有服务的入口和出口流量。Istio利用了众多Envoy内置的功能特性,例如:

 

  • 动态服务发现

  • 负载均衡

  • TLS终止

  • HTTP/2和gRPC代理

  • 熔断器

  • 健康检查

  • 基于百分比流量分隔的灰度发布

  • 故障注入

  • 丰富的度量指标

 

Envoy作为一个边车与对应的服务部署在同一个Kubernetes Pod中。这种部署方式使得Istio能提取丰富的流量行为信号作为属性。Istio又可以反过来使用这些数据在Mixer中进行策略决策,并发送这些数据到监控系统中,提供整个网络中的行为信息。

 

采用边车部署方式,可以把Istio的功能添加到一个已经存在的部署中,并且不需要重新构建或者重新编写代码。

 

02 控制平面

 

控制平面中主要包括Mixer、Pilot、Citadel部件。

 

1. Mixer

 

Mixer是一个与平台无关的组件。Mixer负责在服务网络中实施访问控制和策略,并负责从Envoy代理和其他服务上收集遥测数据。代理提取请求级别的属性并发送到Mixer用于评估,评估请求是否能放行。

 

Mixer有一个灵活的插件模型。这个模型使得Istio可以与多种主机环境和后端基础设施对接。因此,Istio从这些细节中抽象了Envoy代理和Istio管理的服务。

 

Mixer架构如图1-4所示。

 

图片

 

在每一个请求过程中,Envoy代理会在请求之前调用Mixer组件进行前置条件检查,在请求结束之后上报遥测数据给Mixer组件。为了提高性能,每个Envoy代理都会提前缓存大量前置条件检查规则,当需要进行前置条件检查时,直接在缓存中检查规则。如果本地缓存中没有需要的规则,再去调用Mixer组件获取规则。Mixer组件也有自己的缓存,以加速前置条件检查。需要上报的遥测数据也会被Envoy代理暂时缓存起来,等待时机上报Mixer组件,从而减少上报数据的调用次数。

 

2. Pilot

 

Pilot为Envoy代理提供服务发现功能,并提供智能路由功能(例如:A/B测试、金丝雀发布等)和弹性功能(例如:超时、重试、熔断器等)。

 

Pilot将高级别的控制流量行为的路由策略转换为Envoy格式的配置形式,并在运行时分发给Envoy代理。Pilot抽象了平台相关的服务发现机制,并转换成Envoy数据平面支持的标准格式。这种松耦合设计使得Istio能运行在多平台环境,并保持一致的流量管理接口。

 

Pilot架构如图1-5所示。

 

图片

 

Pilot抽象不同平台的服务发现机制,只需要为不同的平台实现统一的抽象模型接口,即可实现对接不同平台的服务发现机制。用户通过规则配置API来提交配置规则,Pilot把用户配置的规则和服务发现收集到的服务转换成Envoy代理需要的配置格式,推送给每个Envoy代理。

 

3. Citadel

 

Citadel内置有身份和凭证管理,提供了强大的服务间和终端用户的认证。Citadel可以把不加密的通信升级为加密的通信。运维人员可以使用Citadel实施基于服务身份的策略而不用在网络层控制。现在,Istio还支持基于角色的访问控制,用于控制谁能够访问服务。

 

——本文摘自《Istio入门与实战》

 

 

posted @ 2022-05-10 09:29  papering  阅读(50)  评论(0编辑  收藏  举报