【kubernetes】Minikube-Istio流量分发Request Routing
Minikube-Istio流量分发Request Routing
Before you begin
参考【kubernetes】Minikube-Istio初探 搭建基础环境,并部署好官方示例Bookinfo
网站包括四个微服务:
productpage :本服务会调用 details 和 reviews 两个微服务,用来生成页面。
details :这个微服务包含了书籍的信息。
reviews :这个微服务包含了书籍相关的评论。它还会调用 ratings 微服务。
ratings :ratings 微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本:
v1 版本不会调用 ratings 服务。
v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
这里的v1、v2、v3是通过label version: v1
标注
此次探索初始目的是将所有流量路由到微服务 v1(版本 1),然后根据HTTP Header头的值来来进行路由
Apply a virtual service
要仅路由到一个版本,您可以应用为微服务设置默认版本的virtual services
。 在这种情况下,virtual services
会将所有流量路由到每个微服务的 v1。
确保创建过
destination rules
,参考Apply Default Destination Rules.
kubectl apply -f https://gitee.com/melodyfff/istio/raw/master/samples/bookinfo/networking/destination-rule-all.yaml
1 | $ kubectl get destinationrule |
1 运行一下命令使virtual services生效
1 | $ kubectl apply -f https://gitee.com/melodyfff/istio/raw/master/samples/bookinfo/networking/virtual-service-all-v1.yaml |
2 查看当前virtualservices
1 | $ kubectl get virtualservices -o yaml |
- 查看destinationrule观察
subset
1
$ kubectl get destinationrules -o yaml
现在所有路由都只会流向V1,特征为星星评级看不到了
Route based on user identity
调整路由配置reviews VirtualService,将不同用户路由到不同的服务版本。这里主要是路由评级服务(Reviews)
这里的实验目的是 将username=jason的用户转发到服务 reviews:v2
,其他的依旧走 reviews:v1
请求的通过给productpage service
添加自定义的Header头end-user
,在reviews service
的VirtualService
中提取解析
1 Run the following command to enable user-based routing:
1 | $ kubectl apply -f https://gitee.com/melodyfff/istio/raw/master/samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml |
2 Confirm the rule is created or configured:
1 | $ kubectl get virtualservice reviews -o yaml |
3 在/productpage
页面右上角点击Sign in
,输入jason登录,观察此时只有reviews:v2
黑色的星星,登录其他任意用户无法看到该评级
Cleanup
1 | $ kubectl delete -f https://gitee.com/melodyfff/istio/raw/master/samples/bookinfo/networking/virtual-service-all-v1.yaml |