流量镜像

流量镜像 (Traffic Mirroring),也称为流量影子 (Traffic Shadowing),是一种强大的、无风险的测试应用版本的方法,它将实时流量的副本发送给被镜像的服务。采用这种方法,您可以搭建一个与原环境类似的环境以进行验收测试,从而提前发现问题。由于镜像流量存在于主服务关键请求路径带外,终端用户在测试全过程不会受到影响。

准备工作

创建流量镜像任务

  1. project-regular 用户登录 KubeSphere 并进入项目。在左侧导航栏选择灰度发布,在页面右侧点击流量镜像右边的发布任务

    traffic-mirroring-1

  2. 设置发布任务的名称并点击下一步

    traffic-mirroring-2

  3. 从下拉列表中选择需要进行流量镜像的应用,选择所需的服务(本教程以 Bookinfo 应用的 reviews 服务为例),然后点击下一步

    traffic-mirroring-3

  4. 灰度版本页面,为应用添加另一个版本(例如 v2),然后点击下一步

    traffic-mirroring-4

  5. 在最后一步点击创建

    traffic-mirroring-5

  6. 新建的流量镜像任务显示在任务状态页面。点击该任务查看详情。

    traffic-mirroring-task

  7. 在详情页面,您可以看到流量被镜像至 v2 版本,同时折线图中显示实时流量。

    traffic-mirroring-6

  8. 新建的部署也显示在工作负载下的部署页面。

    new-deployment

  9. 您可以执行以下命令查看虚拟服务的 mirrorweight 字段。

    1. kubectl -n demo-project get virtualservice -o yaml

    备注

    • 请将上述命令中的 demo-project 修改成实际的项目(即命名空间)名称。
    • 您需要以 admin 用户重新登录才能在 KubeSphere 控制台的 Web kubectl 页面执行上述命令。
  10. 预期输出结果:

    1. ...
    2. spec:
    3. hosts:
    4. - reviews
    5. http:
    6. - route:
    7. - destination:
    8. host: reviews
    9. port:
    10. number: 9080
    11. subset: v1
    12. weight: 100
    13. mirror:
    14. host: reviews
    15. port:
    16. number: 9080
    17. subset: v2
    18. ...

    此路由规则将 100% 流量发送至 v1mirror 部分的字段指定将流量镜像至 reviews v2 服务。当流量被镜像时,发送至镜像服务的请求的 Host/Authority 头部会附带 -shadow 标识。例如, cluster-1 会变成 cluster-1-shadow

    备注

    这些请求以 Fire and Forget 方式镜像,亦即请求的响应会被丢弃。您可以指定 weight 字段来只镜像一部分而不是全部流量。如果该字段缺失,为与旧版本兼容,所有流量都会被镜像。有关更多信息,请参阅 Mirroring

下线任务

您可以点击任务下线移除流量镜像任务。此操作不会影响当前的应用版本。

remove-traffic-mirroring