Istio的流量路由规则让您可以轻松地控制服务之间的流量和API调用流。Istio简化了服务级属性(如断路器、超时和重试)的配置,并简化了重要任务的设置,如A/B测试、金丝雀测试和基于流量分割的分阶段测试。它还提供开箱即用的故障恢复功能,帮助您的应用程序更健壮地应对依赖服务或网络的故障。

Istio的流量管理模型依赖于与您的服务一起部署的envoy代理。您的mesh服务发送和接收的所有流量(数据飞机流量)都是通过Envoy代理的,这使得在您的mesh周围指挥和控制流量变得很容易,而不需要对您的服务做任何更改。

1. Istio流量管理介绍

为了在你的网格中引导流量,Istio需要知道你所有的端点在哪里,它们属于哪个服务。为了填充它自己的服务注册表,Istio连接到一个服务发现系统。例如,如果您在Kubernetes集群上安装了Istio,那么Istio将自动检测该集群中的服务和端点。

使用此服务注册中心,envoy代理可以将流量定向到相关服务。大多数基于微服务的应用程序具有每个服务工作负载的多个实例来处理服务流量,有时也称为负载平衡池。缺省情况下,envoy代理使用循环模型在每个服务的负载平衡池中分发流量,其中请求依次发送给每个池成员,在每个服务实例收到请求后返回到池的顶部。

虽然Istio的基本服务发现和负载平衡为您提供了一个工作服务网格,但这远远不是Istio所能做的。在许多情况下,您可能希望对网格流量的变化进行更细粒度的控制。作为A/B测试的一部分,您可能希望将特定的流量百分比定向到服务的新版本,或者为特定的服务实例子集应用不同的负载平衡策略来处理流量。您可能还希望对进出网格的流量应用特殊的规则,或者将网格的外部依赖项添加到服务注册中心。通过使用Istio的流量管理API将您自己的流量配置添加到Istio,您可以完成所有这些工作。

与其他Istio配置一样,API是使用Kubernetes自定义资源定义(crd)指定的,您可以使用YAML对其进行配置,您将在示例中看到这一点。

本指南的其余部分将介绍每个流量管理API资源以及如何使用它们。这些资源是:

  • Virtual services
  • Destination rules
  • Gateways
  • Service entries
  • Sidecars