在前一篇我们安装好了Istio和Bookinfo测试环境,本篇中我们要对此环境进行条件测试。 原有的环境中,我们对productpage页面时轮询查看的。
应用默认目标规则
目标规则:可以将虚拟服务视为将流量如何路由到给定目标地址,然后使用目标规则来配置该目标的流量。在评估虚拟服务路由规则之后,目标规则将应用于流量的“真实”目标地址。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
在reviews的目标规则中,有三个去向,即v1、v2和v3
[root@master01 istio-1.10.3]# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created
查看
[root@master01 istio-1.10.3]# kubectl get destinationrules.networking.istio.io
NAME HOST AGE
details details 57s
productpage productpage 57s
ratings ratings 57s
reviews reviews 57s
细节可以用以下命令查看
kubectl get destinationrules -o yaml
配置请求路由
仅路由到一个版本
注意:前提是配置好了应用的Destination Rule
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1
---
在前面配置reviews的目标规则中,有三个去向,即v1、v2和v3,上面的yaml文件只选择了v1版本。
[root@master01 istio-1.10.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created
无论怎么刷新,访问productpage都只在一个v1页面
基于用户身份的路由
将来自特定用户的所有流量路由到特定服务版本,在这种情况下,来自名为 zyi 的用户的所有流量将被路由到服务 reviews:v2。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: zyi
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
路由规则最后定义了默认规则到v1版本。
可以看到zyi用户看到的是v2版本。
从Kiali监控也可以看到:
流量转移
应用基于权重的路由
以下的yaml文件中,配置权重路由将会把 50% 的流量发送到 reviews:v2,另外50% 的流量发送到 reviews:v3。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
- 使用前面用过的仅路由到一个版本,将所有流量导到v1
[root@master01 istio-1.10.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created
- 然后,将50% 的流量发送到 reviews:v2,50% 的流量发送到 reviews:v3。
[root@master01 istio-1.10.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
virtualservice.networking.istio.io/reviews configured
- 可以通过应用 Virtual Service 规则将 100% 的流量路由 reviews:v3:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
[root@master01 istio-1.10.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
virtualservice.networking.istio.io/reviews configured
无论如何刷新都是v3版本