2.1 Istio流量治理
- Istio的流量路由规则使运维人员可以轻松控制服务之间的流量和API调用
- Istio简化了诸如断路器,超时和重试之类的服务级别属性的配置,并使其易于设置重要任务(如A/B测试,canary部署和基于百分比的流量拆分的分段部署)。
- 它还提供了开箱即用的故障恢复功能,有助于使应用程序更强大,以防止相关服务或网络的故
- 使用Istio进行流量管理从本质上是将流量与底层基础架构解耦,从而让运维工程师能够通过Pilot指定他们希望流量自身需要遵循哪些规则,而非仅仅只能定义由哪些特定的pod/VM接收流量,并在这些pod/VM之间以受限于数量比例的方式分配流量;
- Pilot和Envoy proxy负责实现流量规则中定义的流量传输机制;
- 例如,可以通过piot指定特定服务的5%流量到canary版本,而与Canary部署大小无关,或者根据请求内容将流量发送到特定版本
- Istio的所有路由规则和控制测略基于k8s的CRD实现,这包括网络功能相关的VirtualService、DestionRule、Gateway, serviceEntry和EnvoyFilter等。
2.1.1 Istio流量治理的关键配置
-
Istio通过Ingress Gateway为网格引入外部流量;
- Gateway中运行的主程序为Envoy,同样从控制平面接受配置,并完成相关流量传输;
- Gateway资源对象用于将外部访问映射到内部服务,它自身只负责通信子网相关功能,例如套接字,而7层路由功能则由VirtualService实现;
-
Istio基于ServiceEntry资源对象将外部服务注册到网格内,从而将外部服务以类同内部服务一样的方式进行访问;
- 对于外部服务,网格内的sidercar方式运行的Envoy即能执行治理;
- 若需要将外出流量收束与特定的几个节点需要使用专用的Egress Gateway完成;
-
VirtualService和D二十题nationRules是Istio流量功能的核心组件
-
VirtualService用于将分类流量并将其路由到指定的目的地(Destination),而Destination Rules用于配置那个指定的Destination如何处理流量
-
Virtual Service
- 配置如何将请求路由到网格中的各service之上
- 通常由一组路由规则组成,这些路由规则按照顺序评估
- 事实上,定义的是分发给网格内各Envoy的virtualHost和Route的相关配置;
-
Destination Rules
- 定义流量在目标内部的各端点之间的分发机制,例如将各端点进行分组,分组内端点间的流量均衡机制,异常探测等;
- 事实上,其定义的分发给网格内各Envoy的cluster相关配置;
-
-
VirtualService定义虚拟主机及其相关的路由规则,包括路由到哪各集群
-
DestinRules定义集群或子集内部的流量分发机制
2.1.2 配置Istio流量治理
- 流量治理基础
- 集群外部的入站流量会经由ngress Gateway到达集群内部
- 需要经由Gateway定义的Igress gateway上的虚拟主机;
- 包括目标流量访问的"host",以及虚拟主机监听的端口
- 集群内部流量仅在sidecar 之间流动
- virtualSrvicce 为sidcar envoy定义listener(主要定义流量路由机制);
- DestinationRule为sidercar envoy定义cluster(包括发现端点等);
- 集群外部的入站流量会经由ngress Gateway到达集群内部