前面部署了用于演示istio功能的bookinfo应用,而且可以正常访问,当你不断刷新网页的时候,页面内容会从v1、v2 、v3之前循环切换来显示不同的内容,这是因为后端对应了三个版本的pod资源。这里演示三个基础功能特性:
一、流量路由到指定版本
应用场景示例: 使用户访问特定版本的应用程序
1.创建destinationRules, 即定义不同版本的应用配置
$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
2.创建VirtualService,即将指定的service服务绑定到指定的backend pod,即显示不同版本的应用
$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
这时通过再次刷新 Bookinfo 应用程序的 /productpage 测试新配置。在浏览器中打开 Bookinfo 站点。网址为 http://$GATEWAY_URL/productpage,其中 $GATEWAY_URL 是外部的入口 IP 地址,如 Bookinfo 文档中所述。
无论刷新多少次,页面的评论部分都不会显示评级星标。这是因为我们将 Istio 配置为将评论服务的所有流量路由到版本 reviews:v1,而此版本的服务不访问星级评分服务。这样就完成了流量定向路由的功能,将流量路由到服务的某一个版本。
二、流量路由到指定用户
应用场景示例: 使特定的用户访问特定的应用,即基于用户身份的路由
1.配置路由规则
$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
2.确认规则已创建
$ kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
此时,多次刷新bookinfo应用,会发现已经将来自名为 Jason 的用户的所有流量将被路由到服务 reviews:v2
三、基于权重的路由
应用场景: 将一定百分比的用户路由到指定的应用
1.部署规则
$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
此命令把 50% 的流量从 reviews:v1 转移到 reviews:v3:
2.确认规则已生效
$ kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
此时,多次刷新网页就可以看到流量分配效果。
评论前必须登录!
注册