文章内容大部分来自Istio官网,这里属于学习的记录。

随着技术发展,应用从单体服务架构向微服务转变,从单点部署拆分成了数量众多的微服务分布式部署,在给开发带来便利的同时,也带来了许多挑战。

我们需要对微服务平台做许多额外的事情:

  • 微服务之间的依赖关系
  • 微服务之间的认证授权
  • 微服务之间的流量管理
  • 日志、追踪、监控

而这些内容,可以说是与业务开发无关的,如果加在应用层,抵消掉的,是拆分微服务所得到的好处。

Istio应运而生

Istio由Google、IBM 和 Lyft 团队协作开发,是完全开源的Service Mesh,可以安装在Kubernetes之上(也可以是其他),对应用程序透明,只需对应用代码进行一点改动甚至无需改动。

Istio通过部署sidecar代理,拦截微服务间的所有网络请求,可以做到:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
  • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪。
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

理念

Istio生于云计算时代,需要满足混合和多云部署,它有几个关键的设计目标:

  • 最大化透明度:使用Istio,运维和开发人员只需要付出很少的代价。通过代理流量,无需对应用程序进行修改。与此同时,Istio提供的功能增加的资源开销很小。
  • 可扩展性:被运维和开发人员依赖后,势必会有许多其他的策略或控制来源,Istio策略运行时支持标准扩展机制以便插入到其他服务中。
  • 可移植性:Istio不单单可以运行在Kubernetes之上,它应该以最少的代价运行在任何云火预置环境中。
  • 策略一致性:有些资源并非在API级别,策略作为独特的服务来维护,拥有自己的API,不是放入代理/sidecar中,可以允许服务根据需要与其集成。

核心功能

  • 流量管理:在控制流量上,Istio让我们可以轻松的配置各种部署场景,比如A/B测试、金丝雀部署、流量分割,也拥有服务熔断、超时、重试等服务级别的功能。
  • 安全:Istio可以管理服务通讯的认证、授权和加密,不需要应用程序做改动。
  • 可观察性:通过Istio,我们拥有了强大的监控功能,包括:服务追踪、监控、日志记录。让我们对所有服务一目了然,能知道服务间是如何影响的。

架构

在逻辑上,Istio由两部分组成: data planecontrol plane

  • data plane:由 Envoy 作为sidecar部署而成的一组智能代理,协调控制所有微服务和 Mixer 间的网络通信,是一个通用的策略和遥测中心。
  • control plane:管理配置着代理来路由流量,配置 Mixer 实施策略和遥测数据。

下面是来自Istio官网的一张架构图:

Istio 架构

Istio的架构中,有几个重要的模块,分别是 EnvoyMixerPilotCitadelGalley,下面为它们做做介绍。

Envoy

Envoy在Istio架构中作为sidecar部署,代理所有服务的流量,它和业务服务部署在同一个Kubernetes Pod中。它可以完成下面这些功能:

  • 动态服务发现
  • 负载均衡
  • TLS 终止
  • HTTP/2 & gRPC 代理
  • 熔断器
  • 健康检查、基于百分比流量拆分的灰度发布
  • 故障注入
  • 丰富的度量指标

Mixer

Mixer是一个独立于平台的组件。它在Service Mesh中执行访问控制和使用策略,同时收集Envoy和其他服务的遥测数据。
Mixer包含一个灵活组件模型,使得Istio能接入各种类型的主机环境和基础设施后端,从中抽象出Envoy代理和Istio管理的服务。

Pilot

控制流量行为的高级路由配置通过 Pilot 可以转换为Envoy特定的配置,并在运行时传播到sidecar中。
它可以为Envoy sidecar提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。

Citadel

Citadel为Istio提供服务之间和终端用户身份认证。在Service Mesh中可以升级未加密的流量。

Galley

Galley是Istio进行配置验证、提取、加工和分发的组件。其它组件可以通过Galley,从底层平台(比如Kubernetes)获取用户配置,达到其它组件和平台的解耦。

参考

What is Istio