5.3.1 配置请求路由

Istio Bookinfo示例包含四个独立的微服务,每个微服务都有多个版本。其中一个微服务reviews的三个不同版本已经部署并同时运行。 为了说明这导致的问题,在浏览器中访问Bookinfo应用程序的 /productpage 并刷新几次。 您会注意到,有时书评的输出包含星级评分,有时则不包含。这是因为没有明确的默认服务版本路由,Istio将以循环方式请求路由到所有可用版本。

此任务的最初目标是应用将所有流量路由到微服务的v1(版本 1)的规则。稍后,您将应用规则根据HTTP请求header的值路由流量。

1.应用virtual service

要仅路由到一个版本,请应用为微服务设置默认版本的 virtual service。在这种情况下,virtual service 将所有流量路由到每个微服务的 v1 版本。

default 和 demo 的配置文件默认情况下启用了自动双向TLS。

cd /usr/local/istio-${ISTIO_VERSION}
kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.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
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

2.检查已经应用到v1

kubectl get virtualservices -o yaml
kubectl get destinationrules -o yaml

3.测试新的路由配置

打开浏览器,输入:http://192.168.100.10:31570/productpage,此时,无论您刷新多少次,页面的评论部分都不会显示评级星标。这是因为您将 Istio 配置为 将评论服务的所有流量路由到版本 reviews:v1,而此版本的服务不访问星级评分服务。

4.基于用户身份的路由

jason的用户的所有流量将被路由到服务reviews:v2,productpage 服务在所有到reviews服务的HTTP请求中都增加了一个自定义的 end-user请求头,从而达到了本例子的效果。

kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
virtualservice.networking.istio.io/reviews configured

打开浏览器,分别验证登录和不登录jason的页面显示效果。

image-20200217191133420

image-20200217191043605

原理

在此任务中,您首先使用Istio将100%的请求流量都路由到了Bookinfo服务的v1版本。然后设置了一条路由规则,它根据productpage服务发起的请求中的end-user自定义请求头内容,选择性地将特定的流量路由到了reviews服务的v2版本。

请注意,Kubernetes中的服务,如本任务中使用的Bookinfo服务,必须遵守某些特定限制,才能利用到Istio的L7路由特性优势。参考Pod和Service需求了解详情。

在流量转移任务中,您将按照在此处学习到的相同的基本模式来配置路由规则,以逐步将流量从服务的一个版本迁移到另一个版本。

Copyright © huangzhongde.cn 2021 all right reserved,powered by Gitbook该文件修订时间: 2022-01-28 00:02:24

results matching ""

    No results matching ""