官方对 istio 的介绍浓缩成了一句话:
An open platform to connect, secure, control and observe services.
即:连接、安全加固、控制和观察服务的开放平台。
开放平台就是指它本身是开源的,服务对应的是微服务,也可以粗略地理解为单个应用。
中间的四个动词就是 istio 的主要功能,官方也各有一句话的说明。这里再阐释一下:
- 连接(Connect):智能控制服务之间的调用流量,能够实现灰度升级、AB 测试和红黑部署等功能
- 安全加固(Secure):自动为服务之间的调用提供认证、授权和加密
- 控制(Control):应用用户定义的 policy,保证资源在消费者中公平分配
- 观察(Observe):查看服务运行期间的各种数据,比如日志、监控和 tracing,了解服务的运行情况
NOTE:其实 istio 的源头是微服务,但这又是一个很宽泛的话题,目前可以参考文章很多很多。
首先来看 istio 官方给出的架构图:
可以看到,istio 就是我们上述提到的 service mesh 架构的一种实现,服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 envoy)来进行,而且中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。控制中心做了进一步的细分,分成了 Pilot、Mixer、和 Citadel,它们的各自功能如下:
- Pilot:为 envoy 提供了服务发现,流量管理和智能路由(AB测试、金丝雀发布等),以及错误处理(超时、重试、熔断)功能。用户通过 pilot 的 API 管理网络相关的资源对象,pilot 会根据用户的配置和服务的信息把网络流量管理变成 envoy 能识别的格式分发到各个 sidecar 代理中。
- Mixer:为整个集群执行访问控制(哪些用户可以访问哪些服务)和 policy 管理(rate limit,quota 等),并且收集代理观察到的服务之间的流量统计数据
- Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议
代理会和控制中心通信,一方面可以获取需要的服务之间的信息,另一方面也可以汇报服务调用的 metrics 数据。知道 istio 的核心架构,再来看看它的功能描述就非常容易理解了。
- 连接:控制中心可以从集群中获取所有服务的信息,并分发给代理,这样代理就能根据用户的期望来完成服务之间的通信(自动地服务发现、负载均衡、流量控制等)
- 安全加固:因为所有的流量都是通过代理的,那么代理接收到不加密的网络流量之后,可以自动做一次封装,把它升级成安全的加密流量
- 控制:用户可以配置各种规则(比如 RBAC 授权、白名单、rate limit 或者 quota 等),当代理发现服务之间的访问不符合这些规则,就直接拒绝掉
- 观察:所有的流量都经过代理,因此代理对整个集群的访问情况知道得一清二楚,它把这些数据上报到控制中心,那么管理员就能观察到整个集群的流量情况了