服务网格是一个独立的基础设施层,用来处理服务之间的通信。
典型的服务网格通常提供了一组轻量级的网络代理,代理会在应用无感知的情况下,同应用并行部署、运行。
Istio特性如下:
- 连接: 对网格内部的服务之间的调用产生的流量进行智能管理,以此为基础,对微服务的部署、测试和升级提供保障
- 安全:认证、加密、和鉴权支持,在不入侵代码的情况下,加固现有服务,提高安全性。
- 策略:在控制面定制策略,并在服务中实施。
- 观察:对服务间调用进行跟踪和测量,并获取服务的状态信息。
2.1 连接
网格内部调用(A -> B)
出站连接(B -> 外部云服务)
入站连接(用户 -> 服务A)
流量分割(服务A的版本1分别调用服务B的版本1和版本2)
按照调用方的服务版本进行路由
此外,还有一些潜在需求:
(1)在网格内部的服务之间如何根据实际需求对服务调用进行路由,条件可能包括:
调用的源和目的的服务;
调用内容;
认证身份;
(2)如何应对网络故障和网络服务。
(3)如何处理服务之间不同版本的关系。
(4)怎样对出站连接进行控制。
(5)怎么样对入站连接启动后续的连接链条。
与流量相关的问题,还引发了几个关键的功能需求:
(1)服务的注册和发现
(2)负载均衡策略
(3)服务流量特征
(4)动态流量分配:
2.2 安全
通信加密、服务身份认证和服务访问控制(授权和鉴权)功能。
2.3 策略
调用频率的限制、对服务互访的控制以及针对流量的一些限制和变更能力。
Istio中使用Mixer作为策略的执行者,Envoy的每次调用,在逻辑上都会通过Mixer进行事先预检和事后报告,这样Mixer就有了对流量的部分控制能力;
2.4 观察
监控和跟踪。
关注调用成功率、响应时间、调用量、传输量等。
面对数量众多的服务,对各种级别和层次的指标进行采样、采集和汇总。
分布式跟踪。