Istio 的流量路由规则可以让您很容易的控制服务之间的流量和 API 调用。Istio 简化了服务级别属性的配置,比如熔断器、超时和重试,并且能轻松的设置重要的任务,如 A/B 测试、金丝雀发布、基于流量百分比切分的概率发布等。它还提供了开箱即用的故障恢复特性,有助于增强应用的健壮性,从而更好地应对被依赖的服务或网络发生故障的情况。
虚拟服务
虚拟服务(Virtual Service) 和目标规则(Destination Rule) 是 Istio 流量路由功能的关键拼图。虚拟服务让您配置如何在服务网格内将请求路由到服务,这基于 Istio 和平台提供的基本的连通性和服务发现能力。每个虚拟服务包含一组路由规则,Istio 按顺序评估它们,Istio 将每个给定的请求匹配到虚拟服务指定的实际目标地址。您的网格可以有多个虚拟服务,也可以没有,取决于您的使用场景。
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: fox
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
name: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v3将jason的流量路由到服务review:v2
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: fox
spec:
hosts:
- reviews
http:
- name: "reviews-v2-routes"
match:
- uri:
prefix: "/wpcatalog"
- uri:
prefix: "/consumercatalog"
rewrite:
uri: "/newcatalog"
route:
- destination:
host: reviews
subset: v2
- name: "reviews-v1-routes"
route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: review-destination
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2所有http的流量都会被路由到version:v1标签的pod上
此外,路径以/wpcatalog/或 /consumercatalog/开头的 HTTP 请求将被重写为/newcatalog,并被发送到标签为 version:v2 的pod的上