前言:
“流量控制”顾名思义,就是对流量请求进行控制和管理

1.Istio的流量控制能力

除了提供最基本的“服务发现”和“负载均衡”外,还有以下4个功能:

  • 路由、流量转移(蓝绿部署、灰度发布都是由此演变来)
  • 对流量进出进行管理
  • 网络弹性能力(超时重试、熔断等)
  • 测试相关(还支持对网络流量进行调试,比如:故障注入、流量镜像)

Istio的流量控制能力主要由以下自定义资源来提供的:

  • 虚拟服务(实现路由功能
  • 目标规则(定义路由的规则或是条件
  • 网关
  • 服务入口
  • Sidecar

    1.1 虚拟服务

    虚拟服务是实现路由功能的重要组件,主要的功能是把“请求的流量”路由到“指定的目标地址”;他可以做到 把请求的地址和真实的工作负载进行解耦

如图,如果满足规则1,就将请求执行目标地址A;如果满足规则2,就将目标请求指向目标地址B(这里的规则则是另一个资源——“目标规则”)
image.png
“虚拟服务”一般和“目标规则”成对出现。“目标规则”提供了非常丰富的路由匹配规则,比如可以针对EndPoint、针对uri、针对Header这样不同粒度的路由进行匹配

1.2 目标规则

  1. 定义了虚拟服务里面配置的具体目标地址。在它的配置中是以子集这个概念存在的,每个子集对应当前服务的不同版本(每个子集里会配置一个对应的目标地址)。

image.png

  1. 还可以对负载均衡的策略进行修改

默认是以轮询的方式进行负载均衡(还可以配置以下方式:随机、权重、最小请求数等)

“虚拟服务”组件和“目标规则”组件主要是管理网格内部的流量,而“网关”是管理网格外部的流量

1.3 网关

本质和api网关是一个东西,同样存在于网格的边界,用来管理网格进出的流量。比如为进出的流量增加负载均衡能力、增加超时重试的能力。Istio内部预定义了两个网关:Ingress Gateway和Egress Gateway(也可以实现自己的Gateway)

1.4 服务入口

前面的资源(虚拟服务、目标规则、网关)都是面向流量的,而“服务入口”是面向服务的,主要的功能是将外部的服务注册到网格内,这样就可以像管理网格内部的服务一样管理网格外部的服务。
举个例子:假设你的服务部署在不同的集群中,那么你可以通过定义服务入口的方式 把这几个不同的集群集中起来 共同用同一个网格进行管理

主要的功能:

  • 他可以为外部的目标转发请求
  • 他可以添加超时重试这些策略
  • 可以扩展你的网络

image.png

1.5 Sidecar

它是对流量进行一个全局控制,而之前的资源主要是对流量进行细粒度控制。

Sidecar主要由2个功能:

  1. 他可以调整“Envoy代理”接管的端口和协议(默认情况下Envoy是接管所有发送到服务的请求的,而通过Sidecar你可以调整接管流量的范围,如下图:只区监听来自于端口9080的Http协议)
  2. 他可以限制“Envoy代理”可访问的服务。默认情况下,Envoy是可以访问整个网格内的所有服务。(如下图:切断对服务B的访问权限)

image.png

2.Istio的弹性网络和测试能力

弹性能力:

  • 超时
  • 重试
  • 熔断(非常重要的过载保护机制)

调试能力:

  • 故障注入(故意的向服务注入一些故障:1.增加服务的延迟 2.让服务直接中断)
  • 流量镜像(用于本地开发环境模拟线上开发环境)