istio实现灰度
istio灰度
Gateway
VirtualService
是在 Istio 服务网格内对服务的请求如何进行路由控制?VirtualService 中就包含了这方面的定义。例如一个 Virtual Service 可以把请求路由到不同版本,甚至是可以路由到一个完全不同于请求要求的服务上去。路由可以用很多条件进行判断,例如请求的源和目的地、HTTP 路径和 Header 以及各个服务版本的权重等。
路由规则对应着一或多个用 VirtualService 配置指定的请求目的主机。这些主机可以是也可以不是实际的目标负载,甚至可以不是同一网格内可路由的服务。例如要给到 reviews 服务的请求定义路由规则,可以使用内部的名称 reviews,也可以用域名 bookinfo.com,VirtualService 可以定义这样的 host 字段:
host 字段用显示或者隐式的方式定义了一或多个完全限定名(FQDN)。上面的 reviews,会隐式的扩展成为特定的 FQDN,例如在 Kubernetes 环境中,全名会从 VirtualService 所在的集群和命名空间中继承而来(比如说 reviews.default.svc.cluster.local)。
所有的流量都去到reviews:v1

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

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

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

DestinationRule
在请求被 VirtualService 路由之后,DestinationRule 配置的一系列策略就生效了。这些策略⚠️由服务属主编写⚠️,包含断路器、负载均衡以及 TLS 等的配置内容。
DestinationRule 还定义了对应目标主机的可路由 subset(例如有命名的版本)。VirtualService 在向特定服务版本发送请求时会用到这些子集。
下面是 reviews 服务的 DestinationRule 配置策略以及子集:
注意在单个 DestinationRule 配置中可以包含多条策略(比如 default 和 v2)。
⚠️到了DestinationRule层面,是配置流量去到指定版本的策略,随机策略、轮训策略等等(注意指定版本是可以多副本的)
可以用一系列的标准,例如连接数和请求数限制来定义简单的断路器。
例如下面的 DestinationRule 给 reviews 服务的 v1 版本设置了 100 连接的限制:
最后更新于
这有帮助吗?