ASM能力挖掘:基于ASM实现流量镜像功能

举报
李耳King 发表于 2020/12/25 10:21:40 2020/12/25
【摘要】 流量镜像功能(Mirroring / traffic-shadow),也称为影子流量,是指通过一定的配置将线上的真实流量复制一份到镜像服务中去,主要用于为测试版本模拟真实生产环境,达到不影响线上服务的情况下对流量或请求内容做具体分析的目的,实现完全平滑升级。

一、背景介绍
​    流量镜像功能(Mirroring / traffic-shadow),也称为影子流量,是指通过一定的配置将线上的真实流量复制一份到镜像服务中去,主要用于为测试版本模拟真实生产环境,达到不影响线上服务的情况下对流量或请求内容做具体分析的目的,实现完全平滑升级。
​    流量镜像功能在传统的微服务架构里是很难做到的,由于传统服务之间的通讯是由SDK支持的,那么对流量镜像的支持就代表着在业务服务逻辑中有着镜像逻辑相关代码的侵入,这会影响业务服务的代码的整洁性。相反,由于istio是基于在应用容器中注入istio-proxy容器实现流量治理等一系列功能,因此,istio同样可以在无代码侵入背景下,实现流量镜像功能,这也是isito实现微服务治理的优势之一。
​    然而,值得注意的是,该功能并非ASM对外发布特性功能,无法直接在ASM界面上实现。但ASM底层框架是基于istio的,我们仍然可以在后台实现该功能,算是对ASM能力的一个挖掘/扩展实践。

二、实现原理
​ 在Istio中,服务间的通讯都是被Envoy代理拦截并处理的,Istio流量镜像的设计也是基于Envoy 特性实现的。以httpbin-v1和httpbin-v2为例,它的流量转发如下图所示。

1.png

可以看到,当流量进入到httpbin-v1时,因为在httpbin-v1的 Envoy代理上配置了流量镜像规则(通过改写virtualService配置文件实现),Envoy代理首先将原始流量转发到httpbin-v1 。同时也会将相同的流量复制一份,异步地发送给httpbin-v2 服务子集中去,可以明显的看到,httpbin-v1 发送完镜像流量之后并不关心它的响应情况。

三、实验准备
环境准备:CCE集群、ASM服务
镜像准备:httpbin、tutum/curl(client客户端)
实验步骤:
step 1: 在CCE集群上基于httpbin镜像创建无状态负载httpbin-v1,service类型配置为clusterIp;在CCE集群上基于curl镜像创建无状态服务载client,service类型配置为clusterIp。

3.png

step 2: 将httpbin-v1和client加入到ASM服务网格中,由于ASM在产品化过程中,仅支持关联单个负载的service加入到服务网格。但我们需要将两个不同的负载关联到同一个service上,实际上,该功能的实现原理与蓝绿发布相同,可以通过ASM的蓝绿发布来实现。因此,我们对httpbin-v1进行蓝绿发布,在这里把新版本称为httpbin-v2,并把全部流量导向v1版本。

5.png

step 3: 将服务添加到网格后,除了在原服务容器中注入istio-proxy,还会为服务添加相应的virtualService和DestinationRule,以实现Envoy流量代理。因此,我们登录CCE集群节点后台,配置kubectl工具,查询DestinationRule,目的是确认灰度版本的子集(subsets)名称,其中httpbin-v1-destination就是我们需要查看的,相关命令:kubectl get DestinationRule。

1.png

kubectl edit DestinationRule httpbin-v1-destination

3.png

step 4: 查看VistualService配置文件,这是我们需要修改的配置文件,相关命令: kubectl get virtualService

5.png

kubectl edit virtualRule httpbin-b1-route

1.png

配置代码说明:
mirror:将发送到指定host的流量复制一份,并转到到其指定的subset中
mirror_percent:指定有多少的原始流量将被转发到镜像流量服务中去,它的有效值为0~100,如果配置成0则表示不发送镜像流量。

四、实验结果
登录节点后台,查询httpbin的集群访问地址

1.png

2. 进入到Client的实例Pod中,使用curl命令访问httpbin访问地址

1.png

3. 查看httpbin-v1和httpbin-v2访问日志,可以看到相同的访问记录(访问时间相同),说明流量镜像功能配置已生效
httpbin-v1:

1.png

httpbin-v2:

1.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。