【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
2
3
4
5
6
7
8
$ kubectl get destinationrule

NAME HOST AGE
details details 9m18s
productpage productpage 9m18s
ratings ratings 9m18s
reviews reviews 9m18s

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
2
$ kubectl get virtualservices -o yaml

  1. 查看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 serviceVirtualService中提取解析

也可以用JWT claim based routing

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

参考

Istio - Request Routing

Istio - Bookinfo Application