Istio 架构

SideCar 解释的参考文档 Qcon2017 实录 | Service Mesh:下一代微服务

Istio 服务网格被逻辑的区分为数据层和控制层。

  • 数据层由一套作为 sidecars部署的智能代理(Envoy)组成,用于调节和控制微服务之间通信的所有流量。
  • 控制层负责管理和配置策略用于路由流量,同时也在运行期执行策略。

下图展示了组成每层的不同组件。

SideCar解释

Sidecar 这个词中文翻译为边车,或者车斗,也有一个乡土气息浓重的翻译叫做边三轮。Sidecar 这个东西出现的时间挺长的,它在原有的客户端和服务端之间加多了一个代理。

Envoy

Istio 使用 Envoy 代理的扩展版本,一个使用 c++开发的高性能代理,为了调节在服务网格中所有服务的进出流量。Istio 利用了Envoy的许多内建特性,比如动态服务发现,负载均衡,TLS终止,HTTP/2 & gRPC 代理,断路器,健康检查,分阶段的基于百分比的流量分配,故障注入和丰富的度量。

Envoy 作为一个 SideCar 部署与相关服务部署在相同的Kubernetes pod。这允许Istio提取大量流量行为的信号如Istio 属性,反过来可以在Mixer使用执行策略决定,并被发送到监控系统来提供关于整个网格行为的信息。sidecar 代理模型允许你添加Istio能力到一个已经存在的部署而不需要重新构建或重新写代码。你可以在我们的设计目标中阅读关于为什么我们选择这种方式的更多的信息

Mixer

Mixer 是一个平台无关的组件,负责执行访问控制,跨服务网格使用策略,以及收集从Envoy代理和其他服务自动探测到的数据。代理提取请求等级属性,被发送给Mixer用于计算。这个属性提取更多的信息可以在Mixer 配置中找到,Mixer包含一个非常灵活的插件模型使其能够和各种主机环境和后端基础架构交互,从这些细节中抽象出Envoy代理和Istio管理的服务。

Pilot

Pilot为Envoy sidecar 提供了服务发现功能,为智能路由提供了流量管理能力(比如A/B测试,金丝雀发布等等),以及弹性(超时控制,重试,断路器等等)。它转换高级路由规则,将流量行为控制在Envoy特定的配置中,并且在运行期把他们传播到sidecars。Pilot抽象特定平台的服务发现方法,并将他们合成为可被任何sidecar消费的标准格式,其符合Envoy 数据层 API。这种松散的耦合允许Istio运行在多个环境中(比如,Kubernetes, Consul/Nomad等等),然而只需要维护相同操作接口进行流量管理。

Pilot 的架构图

  • Envoy API 负责和 Envoy 的通讯, 主要是发送服务发现信息和流量控制规则给 Envoy
  • Envoy 提供服务发现,负载均衡池和路由表的动态更新的 API。这些 API 将 Istio 和 - Envoy 的实现解耦。(另外,也使得 Linkerd 之类的其他服务网络实现得以平滑接管 Envoy)
  • Polit 定了一个抽象模型,以从特定平台细节中解耦,为跨平台提供基础
  • Platform Adapter 则是这个抽象模型的现实实现版本, 用于对接外部的不同平台
  • 最后是 Rules API,提供接口给外部调用以管理 Pilot,包括命令行工具 Istioctl 以及未来可能出现的第三方管理界面

Istio 的流量管理:

Istio-Auth

Istio-Auth使用 mutual TLS提供强大的服务到服务的和终端用户的身份认证,具有内置的身份和凭证管理。它可以用于升级在服务网格中未加密的流量,提供基于服务身份策略而不是网络控制的执行能力。Istio 的未来版本将增加细粒度的访问控制,审计控制以及监控谁访问了你的服务、API或者资源,使用各种访问控制机制,包括属性和基于角色的访问控制以及授权钩子。

参考文档:

  • 流量管理
  • what-is-istio
  • Qcon2017 实录 | Service Mesh:下一代微服务
  • Istio 中文官方文档
  • 万字解读: Service Mesh 服务网格新生代 --Istio

你可能感兴趣的:(envoy,sidecar,service-mesh,istio)