《Istio官方文档》配置请求路由

原文链接 译者:suzhuo

配置请求路由

这里将向你展示如何根据权重和HTTP请求头去配置动态路由。

“开始之前”

注意:这里假设你正在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官方文档》配置请求路由

  • Trackback 关闭
  • 评论 (2)
    • suzhuo
    • 2018/02/05 8:44上午

    并发编程网的第一篇译文,继续

  1. 加油,兄弟.

return top