< img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=3131724&fmt=gif" />

流量镜像

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

准备工作

创建流量镜像任务

  1. project-regular 用户登录 KubeSphere 并进入项目。前往灰度发布页面,在页面右侧点击流量镜像右侧的创建

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

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

  4. 新版本设置选项卡,为应用添加另一个版本(例如 kubesphere/examples-bookinfo-reviews-v2:1.16.2;将 v1 改为 v2),然后点击下一步

  5. 策略设置选项卡,点击创建

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

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

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

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

    kubectl -n demo-project get virtualservice -o yaml
    

    备注

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

    ...
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            port:
              number: 9080
            subset: v1
          weight: 100
        mirror:
          host: reviews
          port:
            number: 9080
          subset: v2
          ...
    

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

    备注

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

下线任务

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

通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。