Istio

Istio

什么是 Istio

首先是官网的介绍:

​ Istio lets you connect, secure, control, and observe services

​ Istio helps reduce the complexity of these deployments, and eases the strain on your development teams. It is a completely open source service mesh that layers transparently onto existing distributed applications. It is also a platform, including APIs that let it integrate into any logging platform, or telemetry or policy system. Istio’s diverse feature set lets you successfully, and efficiently, run a distributed microservice architecture, and provides a uniform way to secure, connect, and monitor microservices.

主要是第一段中的四个关键词

  • connect (连接) :智能控制服务之间的调用流量,实现灰度升级、AB测试和红黑部署等功能
  • secure (保护) :自动为服务之间的调用提供认证、授权和加密
  • control (控制) :应用用户定义的 policy,保证资源在消费者中公平分配
  • observe (观察):查看服务运行期间的各种数据,比如日志、监控和 tracing,了解服务的运行情况。

总结起来就是

An open platform to connect, secure, control and observe services.

连接、保护、控制和观察服务的开放平台

什么是 Service Mesh

再来看看官网的描述

The term service mesh is used to describe the network of microservices that make up such applications and the interactions between them

Sercice Mesh是用来描述构成一类应用的==微服务网络==以及它们之间的互动。

网络上对于Service Mesh 的描述是 可以把Service Mesh 看做建立在 TCP 层之上的微服务层。

Service Mesh 的技术根基为网络代理 那么就需要先了解一下网络代理是什么。

网络代理

网络代理,可以理解为现实生活中的中介。

网络通信的双方通过代理进行网络通信,而代理就可以在通信过程中完成一些事情,比如:

  • 拦截:代理可以选择性拦截传输的网络流量,比如一些公司限制员工在上班的时候不能访问某些游戏或者电商网站,再比如把我们和世界隔离开来的 GFW,还有在数据中心中拒绝恶意访问的网关。
  • 统计:既然所有的流量都经过代理,那么代理也可以用来统计网络中的数据信息,比如了解哪些人在访问哪些网站,通信的应答延迟等。
  • 缓存:如果通信双方比较”远“,访问比较慢,那么代理可以把最近访问的数据缓存在本地,后面的访问不用访问后端来做到加速。CDN 就是这个功能的典型场景。
  • 分发:如果某个通信方有多个服务器后端,代理可以根据某些规则来选择如何把流量发送给多个服务器,也就是我们常说的负载均衡功能,比如著名的 Nginx 软件。
  • 跳板:如果 A、B 双方因为某些原因不能直接访问,而代理可以和双方通信,那么通过代理,双方可以绕过原来的限制进行通信。这应该是广大中国网民比较熟悉的场景。
  • 注入:既然代理可以看到流量,那么它也可以修改网络流量,可以自动在收到的流量中添加一些数据,比如有些宽带提供商的弹窗广告。
  • ……

再说回Service Mesh,Service Mesh其实可以看做是传统代理的升级版,用来解决现在微服务框架中出现的问题,可以把 Service Mesh 看做是分布式的微服务代理。

应用所有的流量都被代理接管,而代理就可以从中做许多的事情了。

此外,原来的代理都是基于网络流量的,一般都是工作在 IP 或者 TCP 层,很少关心具体的应用逻辑。

但是 Service Mesh 中,代理会知道整个集群的所有应用信息,并且额外添加了热更新、注入服务发现、降级熔断、认证授权、超时重试、日志监控等功能,让这些通用的功能不必每个应用都自己实现,放在代理中即可。

应用微服务之后,每个单独的微服务都会有很多副本,而且可能会有多个版本,这么多微服务之间的相互调用和管理非常复杂,但是有了 Service Mesh,我们可以把这块内容统一在代理层。

Istio

有了看起来四通八达的分布式代理,我们还需要对这些代理进行统一的管理。

手动更新每个代理的配置,对代理进行升级或者维护是个不可持续的事情,在前面的基础上,在加上一个控制中心,一个完整的 Service Mesh 就成了

管理员只需要根据控制中心的 API 来配置整个集群的应用流量、安全规则即可,代理会自动和控制中心打交道根据用户的期望改变自己的行为。

Istio

**NOTE:**所以你也可以理解 Service Mesh 中的代理会抢了 Nginx 的生意,这也是为了 Nginx 也要开始做 NginMesh 的原因。

引用:https://www.sohu.com/a/270131876_463994

Istio架构图

Istio

Istio Service Mesh 分为data planecontrol plane

  • data plane: 数据层有智能代理–Envoy组成,这些代理机构调解和控制微服务之间的所有网络通信。它们还收集和报告所有网状流量的遥测数据。
  • control plane:控制层通过管理和配置代理机构来路由流量

根据Istio的框架图,我们就可以更好地理解Istio的四个核心功能了:

  1. connect (连接) :智能控制服务之间的调用流量,实现灰度升级、AB测试和红黑部署等功能

    -----> 控制中心可以从集群中获取所有服务的信息,并分发给代理,这样代理就能根据用户的期望来完成服务之间的通信(自动地服务发现、负载均衡、流量控制等)

  2. secure (保护) :自动为服务之间的调用提供认证、授权和加密

    -----> 因为所有的流量都是通过代理的,那么代理接收到不加密的网络流量之后,可以自动做一次封装,把它升级成安全的加密流量

  3. control (控制) :应用用户定义的 policy,保证资源在消费者中公平分配

    -----> 用户可以配置各种规则(比如 RBAC 授权、白名单、Rate Limit 或者 Quota 等),当代理发现服务之间的访问不符合这些规则,就直接拒绝掉

  4. observe (观察):查看服务运行期间的各种数据,比如日志、监控和 tracing,了解服务的运行情况

    -----> 有的流量都经过代理,因此代理对整个集群的访问情况知道得一清二楚,它把这些数据上报到控制中心,那么管理员就能观察到整个集群的流量情况了

上一篇:最强开源微服务框架,全网独家整理


下一篇:​如何利用Kubernetes和Istio实现蓝绿部署?