Istio由Google、IBM和Lyft开源,是第二代服务网格产品。在Istio中使用了Lyft公司的Envoy作为Sidecar。Istio的功能十分丰富,包含以下4个方面:

  • 流量管理: 流量管理是istio的基本功能,使用istio的流量路由规则可以轻松控制服务之间的流量和API调用
  • 策略控制: 应用策略以确保其得到执行,并且资源在消费者之间公平分配
  • 可观测性: 通过自动链路追踪、监控和服务的日志可以全面了解服务如何与其它服务以及istio组件本身进行交互
  • 安全认证: 通过托管的身份认证、授权和服务之间通信的加密自动保护服务的安全。Istio Security提供了全面的安全方案来解决这些问题

Istio从2017年5月发布0.1,到现在已经发展到1.10,早期的版本曾提供对非Kubernetes环境的支持,发展到现在基本只支持在Kubernetes上使用。

下图是当前Istio的架构示意图:

istio-arch.svg

Istio通过拦截和配置Mesh流量实现其功能,Istio基于Sidecar模式建立服务网格,将连接、控制、观测及安全模块与业务服务隔离开,使开发人员可以将更多的精力放到业务逻辑上。Istio在逻辑上分为数据平面控制平面,Istio的数据平面使用成熟的Envoy代理,控制平面使用Go语言开发,在不侵入业务服务代码的前提实现其各种功能。

  • 数据平面: 由一组高性能的智能代理(基于Envoy的istio-proxy)组成。这组智能代理控制被代理服务的所有网络通信,同时负责收集和上报相关的监控数据
  • 控制平面: 负责制定应用策略进行网络流量管理

Istio主要由以下组件组成:

  • Ingressgateway: 用来控制外部流量访问Istio内部的服务
  • Engressgateway: 用来控制istio内部访问外部服务的流量
  • Pilot: 负责管理服务网格内部的服务和流量管理,为服务代理sidecar提供服务发现,为流量管理功能实现了灵活的路由。它将高级别的路由规则转换为envoy特定的配置并在运行时将配置传播到sidecar中。
  • Citadel: 提供身份认证和凭证管理,通过内置身份和凭证管理提供强大的服务之间和终端用户间的认证。
  • Galley: 负责验证、提取、处理和分发配置。为Istio提供了配置管理服务,提供在k8s服务端验证Istio的CRD 资源的合法性的方法。
  • Proxy: 作为服务代理,调节所有Service Mesh单元的入口和出口流量。服务代理作为微服务的SideCar,与对应的微服务一起部署在一个Kubernetes的Pod中。

参考