1.Istio的流量控制能力
除了提供最基本的“服务发现”和“负载均衡”外,还有以下4个功能:
- 路由、流量转移(蓝绿部署、灰度发布都是由此演变来)
- 对流量进出进行管理
- 网络弹性能力(超时重试、熔断等)
- 测试相关(还支持对网络流量进行调试,比如:故障注入、流量镜像)
Istio的流量控制能力主要由以下自定义资源来提供的:
- 虚拟服务(实现路由功能)
- 目标规则(定义路由的规则或是条件)
- 网关
- 服务入口
- Sidecar
1.1 虚拟服务
虚拟服务是实现路由功能的重要组件,主要的功能是把“请求的流量”路由到“指定的目标地址”;他可以做到 把请求的地址和真实的工作负载进行解耦
如图,如果满足规则1,就将请求执行目标地址A;如果满足规则2,就将目标请求指向目标地址B(这里的规则则是另一个资源——“目标规则”)
“虚拟服务”一般和“目标规则”成对出现。“目标规则”提供了非常丰富的路由匹配规则,比如可以针对EndPoint、针对uri、针对Header这样不同粒度的路由进行匹配
1.2 目标规则
- 定义了虚拟服务里面配置的具体目标地址。在它的配置中是以子集这个概念存在的,每个子集对应当前服务的不同版本(每个子集里会配置一个对应的目标地址)。
- 还可以对负载均衡的策略进行修改
默认是以轮询的方式进行负载均衡(还可以配置以下方式:随机、权重、最小请求数等)
“虚拟服务”组件和“目标规则”组件主要是管理网格内部的流量,而“网关”是管理网格外部的流量
1.3 网关
本质和api网关是一个东西,同样存在于网格的边界,用来管理网格进出的流量。比如为进出的流量增加负载均衡能力、增加超时重试的能力。Istio内部预定义了两个网关:Ingress Gateway和Egress Gateway(也可以实现自己的Gateway)
1.4 服务入口
前面的资源(虚拟服务、目标规则、网关)都是面向流量的,而“服务入口”是面向服务的,主要的功能是将外部的服务注册到网格内,这样就可以像管理网格内部的服务一样管理网格外部的服务。
举个例子:假设你的服务部署在不同的集群中,那么你可以通过定义服务入口的方式 把这几个不同的集群集中起来 共同用同一个网格进行管理
主要的功能:
- 他可以为外部的目标转发请求
- 他可以添加超时重试这些策略
- 可以扩展你的网络
1.5 Sidecar
它是对流量进行一个全局控制,而之前的资源主要是对流量进行细粒度控制。
Sidecar主要由2个功能:
- 他可以调整“Envoy代理”接管的端口和协议(默认情况下Envoy是接管所有发送到服务的请求的,而通过Sidecar你可以调整接管流量的范围,如下图:只区监听来自于端口9080的Http协议)
- 他可以限制“Envoy代理”可访问的服务。默认情况下,Envoy是可以访问整个网格内的所有服务。(如下图:切断对服务B的访问权限)
2.Istio的弹性网络和测试能力
弹性能力:
- 超时
- 重试
- 熔断(非常重要的过载保护机制)
调试能力:
- 故障注入(故意的向服务注入一些故障:1.增加服务的延迟 2.让服务直接中断)
- 流量镜像(用于本地开发环境模拟线上开发环境)