《Istio官方文档》配置请求路由
原文链接 译者:suzhuo
配置请求路由
这里将向你展示如何根据权重和HTTP请求头去配置动态路由。
“开始之前”
- 根据Installation guide.的说明安装Istio
- 部署BookInfo 应用示例
注意:这里假设你正在Kubernetes上部署应用.所有例子的命令都使用yaml规则文件的Kubernetes版本(例如:”samples/bookinfo/kube/route-rule-all-v1.yaml“).如果你正在一个不同的环境里运行此任务时,需要将kube更改为与您的运行时相对应的目录(例如:samples/bookinfo/consul/route-rule-all-v1.yaml 就是把kube替换成consul)
“基于内容的路由”
因为BookInfo中的示例部署了3个微服务评价的版本,因此我们需要去设置一个默认的路由,以便于让我们准确请求.否则的话,你需要访问好几次该应用,你会注意到有时候会输出带星评级的评论,这是因为没有设置一个精确的默认版本所造成的,Istio将以随机方式将请求路由到所有可用的服务版本。
注意:此任务假设你还没有任何路由,如果你已经针对示例创建了冲突的路由规则,在接下来的一个或两个命令中,你需要使用replace(替换)而不是create(创建)命令.
1.将所有的微服务的默认版本设置为v1.
istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml
注意:在Istio的Kubernetes部署过程中,你可以使用kubectl替换为上面的istioctl,以及所有其他CLI命令.但是请注意:当前的kubectl尚没有提供输入验证
你可以列出被以下命令所定义好的路由:
istioctl get routerules -o yaml
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: details-default
namespace: default
…
spec:
destination:
name: details
precedence: 1
route:
– labels:
version: v1
—
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: productpage-default
namespace: default
…
spec:
destination:
name: productpage
precedence: 1
route:
– labels:
version: v1
—
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: ratings-default
namespace: default
…
spec:
destination:
name: ratings
precedence: 1
route:
– labels:
version: v1
—
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: reviews-default
namespace: default
…
spec:
destination:
name: reviews
precedence: 1
route:
– labels:
version: v1
—
由于到代理的规则传播是异步的,因此在尝试访问应用程序之前,应该等待几秒钟才能将规则传播到所有群集。
2.在你的浏览器中打开 BookInfo URL (http://$GATEWAY_URL/productpage)
您应该看到显示BookInfo应用程序页面.请注意,产品页面显示时并没有评分星级,因为reviews:v1不能访问评级服务。
3.将一个指定用户请求路由到reviews:v2
让我们通过将产品页面流量路由到reviews:v2实例来启用测试用户”Jason”的分级服务
istioctl create -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml
确认已经生成路由规则:
istioctl get routerule reviews-test-v2 -o yaml
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: reviews-test-v2
namespace: default
…
spec:
destination:
name: reviews
match:
request:
headers:
cookie:
regex: ^(.*?;)?(user=jason)(;.*)?$
precedence: 2
route:
– labels:
version: v2
4.在产品页面web中使用”Jason”作为用户登录
现在你应该在每个评论旁边看到评级(1-5星).注意:如果你使用其他任何一个非Jason用户,你将只能看到reviews:v1,而看不到评级内容.
理解这其中发生的缘由
在此任务中,使用Istio将完整的流量发送到每个BookInfo服务的v1版本,然后设置一个规则,以有选择的将流量发送到基于一个请求的header(比如用户的cookie),且版本为v2的评级服务上.
一旦v2版本被检测到达到我们的预期,我们能够以一种渐进的方式使用Istio将所有用户发送流量到v2,我们将在一个单独的任务中继续探讨这个问题.
清除
- 移除应用程序中的路由规则
istioctl delete -f samples/bookinfo/kube/route-rule-all-v1.yaml
istioctl delete -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml
- 如果你不打算继续探讨接下来的任务,你可以引用BookInfo中的cleanup的说明去关闭这个应用
了解更多
了解更多关于request routing的信息
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Istio官方文档》配置请求路由
并发编程网的第一篇译文,继续
加油,兄弟.