Istio - 9 (2-3) 核心功能之流量控制:Istio是如何实现流量控制功能的?
2023年01月31日
Virtual Service
Virtual Service是实现路由功能的重要组件。
Virtual Service主要的功能是把请求的流量路由到指定的目标地址
Virtual Service和Destination Rule通常成对出现。针对endpoint、Uri、Header不同粒度的路由进行匹配。
Destination Rule
定义virtual service里面配置的路由目标的真实地址。它的配置是以子集(subset)这个形式存在的,也就是每个子集里配置一个对应的目标地址。
设置负载均衡的方式:随机、权重、最少请求数。默认是轮询。
Virtual Service和Destination Rule主要管理网格内部的流量。Gateway管理网格以外的流量。Istio内部定义的Gateway和API网关本质上是一个东西,用来管理进出网格的流量。
管理出流量的网关叫egress,不是必选项。如果不使用它,内部服务的流量可以直接指向外部服务。通过使用Gateway,可以像管理内部流量一样管理网格外部的流量。比如为进出的流量增加负载均衡、超时重试的能力。
Istio内部预定义了两个网关,分别是Ingress Gateway和Egress Gateway。也可以自己实现自己的Gateway。
Service Entry
前面提到的资源(Virtual Service、Destination Rule、Gateway)面相的是流量,Service Entry面向的是服务。
Service Entry把外部服务注册到网格中,这样就可以像管理网格内部的服务一样管理外部的服务。功能:
- 为外部目标转发请求
- 添加超时重试等策略
- 扩展网格
假设服务部署在不同的集群中,可以通过定义Service Entry的方式,把这些不同的集群集中起来,共同用同一个网格管理。
Sidecar
Sidecar对流量进行全局的控制,前面提到的资源(Virtual Service、Destination Rule、Gateway、Service Entry)主要是做细粒度的控制。
- 调整Envoy代理接管的接口和协议。默认情况下,Envoy接管所有发送到服务的请求。通过sidecar,可以调整接管流量的范围。下面的图显示了只监听来自端口9080的HTTP协议。
- 调整Envoy代理可访问的服务。默认情况下,Envoy可以访问整个网格内的所有的服务。下面的图示意了让Envoy只访问服务A,切断它对服务B的访问权限。
弹性能力
超时
重试
熔断
测试调试
故障注入
- 增加服务的延迟
- 让服务直接中断,例如返回500错误
通过这样的方式,可以模拟服务出现问题时,整个应用是如何处理的。
流量镜像
流量镜像可以把生产环境的流量镜像一份,发送到镜像服务中,这样就可以在镜像服务中调试线上环境可能出现的问题。
References
Traffic Management
-
Istio流量控制能力
- 服务发现
- 负载均衡
- 路由、流量转移
- 流量进出。用API网关对流量进出进行管理。
- 网络弹性能力
- 测试相关
Istio提供的流量管理功能主要由以下的自定义资源CRD实现:
Virtual Service
Virtual Service是实现路由功能的重要组件。
Virtual Service主要的功能是把请求的流量路由到指定的目标地址
Virtual Service和Destination Rule通常成对出现。针对endpoint、Uri、Header不同粒度的路由进行匹配。
Destination Rule
定义virtual service里面配置的路由目标的真实地址。它的配置是以子集(subset)这个形式存在的,也就是每个子集里配置一个对应的目标地址。
设置负载均衡的方式:随机、权重、最少请求数。默认是轮询。
Virtual Service和Destination Rule主要管理网格内部的流量。Gateway管理网格以外的流量。Istio内部定义的Gateway和API网关本质上是一个东西,用来管理进出网格的流量。
管理出流量的网关叫egress,不是必选项。如果不使用它,内部服务的流量可以直接指向外部服务。通过使用Gateway,可以像管理内部流量一样管理网格外部的流量。比如为进出的流量增加负载均衡、超时重试的能力。
Istio内部预定义了两个网关,分别是Ingress Gateway和Egress Gateway。也可以自己实现自己的Gateway。
Service Entry
前面提到的资源(Virtual Service、Destination Rule、Gateway)面相的是流量,Service Entry面向的是服务。
Service Entry把外部服务注册到网格中,这样就可以像管理网格内部的服务一样管理外部的服务。功能:
- 为外部目标转发请求
- 添加超时重试等策略
- 扩展网格
假设服务部署在不同的集群中,可以通过定义Service Entry的方式,把这些不同的集群集中起来,共同用同一个网格管理。
Sidecar
Sidecar对流量进行全局的控制,前面提到的资源(Virtual Service、Destination Rule、Gateway、Service Entry)主要是做细粒度的控制。
- 调整Envoy代理接管的接口和协议。默认情况下,Envoy接管所有发送到服务的请求。通过sidecar,可以调整接管流量的范围。下面的图显示了只监听来自端口9080的HTTP协议。
- 调整Envoy代理可访问的服务。默认情况下,Envoy可以访问整个网格内的所有的服务。下面的图示意了让Envoy只访问服务A,切断它对服务B的访问权限。
弹性能力
超时
重试
熔断
测试调试
故障注入
- 增加服务的延迟
- 让服务直接中断,例如返回500错误
通过这样的方式,可以模拟服务出现问题时,整个应用是如何处理的。
流量镜像
流量镜像可以把生产环境的流量镜像一份,发送到镜像服务中,这样就可以在镜像服务中调试线上环境可能出现的问题。
References
Traffic Management
-