Service Mesh与Istio初识

一、Service Mesh介绍
  服务网格(Service Mesh)是处理服务间通信的基础设施层。它负责构成现代云原生应用程序的复杂服务拓扑来可靠的交付请求。在实践中,Service Mesh通常以轻量级网络代理阵列的形式实现,这些代理与应用程序代码部署在一起,对应用程序来说无需感知代理的存在。
  如果用一句话来解释什么是Service Mesh,可以将它比作是应用程序或者说微服务间的TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心TCP/IP这一层(比如说通过HTTP协议的RESTful应用),同样使用Servcie Mesh也就无须关心服务之间的那些原本通过服务框架实现的事情了,比如Spring Cloud、Netflix OSS和其他中间件,现在只要交给Service Mesh就可以了。目前两款流行的Service Mesh开源软件Istio和Linkerd都可以直接在Kubernetes中进行集成,其中Linkerd已经成为CNCF中的项目。
  Service Mesh有如下几个特点:
  1)应用程序间通信的中间层
  2)轻量级网络代理
  3)应用程序无感知
  4)解耦应用程序的重试、超时、监控、追踪和服务发现
Service Mesh与Istio初识_第1张图片

二、Service Mesh的工作机制
  下面将以Istio为例子来讲解Service Mesh是如何工作的
  1、Sidecar(Istio中使用Envoy作为sidecar代理)将服务请求路由到目的地址、根据请求的参数判断是到生产环境、测试环境还是staging环境中的服务(服务可能同时部署在这三个环境中),是路由到本地环境还是公有云环境,所有的这些路由信息可以动态配置,可以是全局配置也可以为某些服务单独配置,这些配置是由服务网格的控制平面推送给各个sidecar的。
  2、当Sidecar确认了目的地址后,将流量发送到相应服务发现端点,在Kubernetes中是Service,然后Service会将服务转发给后端的实例。
  3、Sidecar根据它观测到最近请求的延迟时间,选择出所有应用程序的实例中响应最快的实例
  4、Sidecar将请求发送给该实例,同时记录响应类型和延迟数据
  5、如果该实例挂了、不响应了或者进程不工作了,Sidecar会将请求发送到其他实例上重试
  6、如果该实例持续返回error,Sidecar会将该实例从负载均衡池中移除,稍后再周期性得重试
  7、如果请求的截止时间已过,Sidecar主动标记该请求为失败,而不是再次尝试添加负载
  8、Sidecar以Metric和分布式追踪的形式捕获上述行为的各个方面,这些追踪信息将发送到集中Metric系统

三、Istio介绍
  Istio是Google、IBM和Lyft联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题。Istio对应用是透明的,不需要改动任务服务代码就可以实现透明的服务治理。
  Istio的主要特性包括
  1)HTTP、gRPC、WebSocket和TCP网络流量的自动负载均衡
  2)细粒度的网络流量行为控制,包括丰富的路由规则、重试、故障转移和故障注入等等
  3)可选策略层和配置API支持访问控制、速率限制以及配额管理
  4)自动度量、日志记录和跟踪所有进出的流量
  5)强大的身份认证和授权机制实现服务间的安全通信
Service Mesh与Istio初识_第2张图片

四、Istio原理
  Istio从逻辑上可以分为数据平面控制平面,数据平面主要由一系列的智能代理(默认为Envoy)组成,管理微服务之间的网络通信;控制平面负责管理和配置代理来路由流量,并配置Mixer以进行策略部署和遥测数据收集。
  Istio架构可以如下图所示:
 Service Mesh与Istio初识_第3张图片
 它主要由以下组件构成:
 Envoy:Lyft开源的高性能代理,用于调解服务网格中所有服务的入站和出战流量。它支持动态服务发现、负载均衡、TLS终止、HTTP/2和gRPC代理、熔断、健康检查、故障注入和性能测量等丰富的功能。Envoy以Sidecar的方式部署在相关服务的Pod中,从而无需重新构建或重写代码。
 Mixer:负责访问控制、执行策略并从Envoy代理中收集遥测数据。Mixer支持灵活的插件模型,方便扩展(支持GCP、AWS、Prometheus、Heapster等多种后端)。
 Pilot:动态管理Envoy实例的生命周期。提供服务发现、智能路由和弹性流量管理(如超时、重试)等功能。它将流量策略转化为Envoy数据平面配置,并传播到Sidecar中。Pilot为Envoy Sidecar提供服务发现功能,为智能路由(例如A/B测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于Envoy的配置,并在运行时将它们传播到Sidecar。Pilot将服务发现机制抽象为符合Envoy数据平面API的标准格式,以便支持在多种环境下运行并保持流量管理的相同接口。
 Citadel:通过内置身份和凭证管理提供服务间和最终用户的身份认证。支持基于角色的访问控制、基于服务标识的策略执行等。
Service Mesh与Istio初识_第4张图片

在数据平面上,除了使用Envoy,还可以选择使用nginxmesh、linkerd等作为网络代理。比如,使用nginxmesh时,Istio的控制平面(Mixer、Pilot、Auth)保持不变,但用Nginx Sidecar取代Envoy:
Service Mesh与Istio初识_第5张图片

你可能感兴趣的:(Istio学习)