istio实现灰度

istio灰度

Bookinfo Application without Istio

Gateway

VirtualService

是在 Istio 服务网格内对服务的请求如何进行路由控制?VirtualService 中就包含了这方面的定义。例如一个 Virtual Service 可以把请求路由到不同版本,甚至是可以路由到一个完全不同于请求要求的服务上去。路由可以用很多条件进行判断,例如请求的源和目的地、HTTP 路径和 Header 以及各个服务版本的权重等。

路由规则对应着一或多个用 VirtualService 配置指定的请求目的主机。这些主机可以是也可以不是实际的目标负载,甚至可以不是同一网格内可路由的服务。例如要给到 reviews 服务的请求定义路由规则,可以使用内部的名称 reviews,也可以用域名 bookinfo.comVirtualService 可以定义这样的 host 字段:

host 字段用显示或者隐式的方式定义了一或多个完全限定名(FQDN)。上面的 reviews,会隐式的扩展成为特定的 FQDN,例如在 Kubernetes 环境中,全名会从 VirtualService 所在的集群和命名空间中继承而来(比如说 reviews.default.svc.cluster.local)。

所有的流量都去到reviews:v1

image-20210601124539407

来自名为 Jason 的用户的所有流量将被路由到服务 reviews:v2

把 50% 的流量从 reviews:v1 转移到 reviews:v3

image-20210601124730191

给对 reviews 服务的调用增加一个半秒的请求超时:

image-20210601124329947

DestinationRule

在请求被 VirtualService 路由之后,DestinationRule 配置的一系列策略就生效了。这些策略⚠️由服务属主编写⚠️,包含断路器、负载均衡以及 TLS 等的配置内容。

DestinationRule 还定义了对应目标主机的可路由 subset(例如有命名的版本)。VirtualService 在向特定服务版本发送请求时会用到这些子集。

下面是 reviews 服务的 DestinationRule 配置策略以及子集:

注意在单个 DestinationRule 配置中可以包含多条策略(比如 default 和 v2)。

⚠️到了DestinationRule层面,是配置流量去到指定版本的策略,随机策略、轮训策略等等(注意指定版本是可以多副本的)

可以用一系列的标准,例如连接数和请求数限制来定义简单的断路器。

例如下面的 DestinationRulereviews 服务的 v1 版本设置了 100 连接的限制:

最后更新于

这有帮助吗?