idou老师教你学Istio12 : Istio 实现流量镜像

栏目: 后端 · 发布时间: 5年前

内容简介:微服务为我们带来了快速开发部署的优秀特性,而如何降低开发和变更的风险成为了一个问题。Istio的流量镜像,也称为影子流量,是将生产流量镜像拷贝到测试集群或者新的版本中,在引导实时流量之前进行测试,可以有效地降低版本变更风险。流量镜像有以下优点:1.当流量镜像到不同的服务时,会发生在请求的关键路径之外,这样流量镜像产生的任何问题都不会影响到生产;

微服务为我们带来了快速开发部署的优秀特性,而如何降低开发和变更的风险成为了一个问题。Istio的流量镜像,也称为影子流量,是将生产流量镜像拷贝到测试集群或者新的版本中,在引导实时流量之前进行测试,可以有效地降低版本变更风险。

流量镜像有以下优点:

1.当流量镜像到不同的服务时,会发生在请求的关键路径之外,这样流量镜像产生的任何问题都不会影响到生产;

2.忽略对任何镜像流量的响应; 流量被视为“即发即忘”,这样就不会干扰到正常的生产流量的响应;

3.当流量被镜像时,请求将通过其主机/授权报头发送到镜像服务附上 –shadow,用以区分流量从何处被镜像到何处;

4.利用实时生产用例和流量可以有更真实的测试服务环境,有效降低了部署的风险;

下面介绍几种典型的使用场景可以发挥流量镜像的优势:

1.用于测试:测试集群的测试可以使用生产实例真实流量,不会影响正常生产的关键路径。

2.用于新版本校验:可以实时对比生产流量和镜像流量的输出结果。

3.用于协作服务版本回退:当用到镜像流量的服务需要修改协作服务时,因为镜像模式添加了-shadow标记, 所以可以正常处理镜像请求,并在提交之前回滚。不会让镜像版本的更改影响生产版本。

4.隔离测试数据库:与数据处理相关的业务,可以使用空的数据存储并加载测试数据,针对该数据进行镜像流量操作,实现测试数据的隔离。

下面通过实例来演示一下,先让所有流量都到v1版本,然后使用规则将流量镜像到v2版本:

环境准备:需要httpbin和tutum/curl两个应用镜像

步骤一(配置并启动服务):

首先部署两个版本的httpbin服务:

httpbin-v1:

idou老师教你学Istio12 : Istio 实现流量镜像

httpbin-v2:

idou老师教你学Istio12 : Istio 实现流量镜像

部署sleep服务,为curl来提供负载:

idou老师教你学Istio12 : Istio 实现流量镜像

当完成以上的配置文件后,就可以用kubectl create –f ./yourconfig.yaml来启动服务,用kubectl get pod 来查看服务的运行状态:

idou老师教你学Istio12 : Istio 实现流量镜像

启动httpbin service:

先通过kubectl get svc 查看是否有httpbin service。如果已创建service, 需要用kubectl delete service httpbin 删除,并通过下图所示yaml 新建service:

idou老师教你学Istio12 : Istio 实现流量镜像

步骤二(创建路由策略):

1.使用kubectl delete virtualservice httpbin,kubectl delete destinationrule httpbin删除已有httpbin策略,并通过下图yaml来创建新的路由策略,将全部的流量导入到v1版本:

idou老师教你学Istio12 : Istio 实现流量镜像

通过kubectl create –f ./yourrules.yaml生效:

idou老师教你学Istio12 : Istio 实现流量镜像

2.现在服务已经搭建好了,我们向服务发送一些流量:

idou老师教你学Istio12 : Istio 实现流量镜像

3.分别查看httpbin的v1,v2的pod中的日志:

idou老师教你学Istio12 : Istio 实现流量镜像

我们可以发现v1 pod中有刚才流量访问的记录,而v2的pod中日志为空,说明流量并没有进入到v2的pod中,这与我们全部流量导入到v1中的策略相匹配。

步骤三(镜像流量):

  1. 修改路由规则将流量镜像到v2服务:

idou老师教你学Istio12 : Istio 实现流量镜像

删除之前部署的virtualservice规则,将上图的yaml用kubectl create –f 部署,其中mirror字段将流量镜像指定到v2服务。

2.发送流量:

通过指令

kubectl exec -it $SLEEP_POD -c sleep -- sh -c 'curl http://httpbin:8080/header s' | python -m json.tool 发送流量:

idou老师教你学Istio12 : Istio 实现流量镜像

3.查看v1和v2的访问日志:

idou老师教你学Istio12 : Istio 实现流量镜像

通过对比记录的时间戳我们可以发现在更改策略后,v1的流量被镜像到了v2。日志中的v2报文比v1大是流量被标记为影子流量所致。

步骤四(清除):

1.清除路由规则:

kubectl delete virtualservice httpbin

kubectl delete destinationrule httpbin

2.关闭httpbin/sleep服务:

kubectl delete deploy httpbin-v1 httpbin-v2 sleep

kubectl delete svc httpbin

通过以上步骤我们知道了如何设置路由规则来引入流量镜像。

相关服务请访问 https://support.huaweicloud.co ... _2019


以上所述就是小编给大家介绍的《idou老师教你学Istio12 : Istio 实现流量镜像》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

美铁之战

美铁之战

[英]帕特里克·蒂利 / 黑曜、超侠 / 百花文艺出版社 / 2018-9 / 44.80元

本书的故事发生在未来,一场核战毁灭了北美大陆上的人类文明,残存下来的人类分化成两拨:生活在地面上退化到刀耕火种时代的平原人;躲藏在地下苟延残喘的沙穴人。几百年后,当保留着战前文明的沙穴人尝试着登上地面,和平原人的同室操戈将不可避免地上演……一起来看看 《美铁之战》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具