【Mirroring】镜像流量

您可以通过ASM将发往某服务的流量复制到另一个服务。本文介绍如何配置镜像流量。

前提条件

已完成准备工作,并部署helloworld服务和sleep服务。具体操作,请参见准备工作

操作步骤

  1. 验证服务配置。

    1. 在ACK集群对应的KubeConfig环境下,执行以下命令,进入sleep环境开启bash。

      kubectl exec -it deploy/sleep -- sh
    2. 执行以下命令,向httpbin服务发送请求。

      curl helloworld:5000/hello

      预期输出:

      Hello version: v2, instance: helloworld-v2-6b96c5684-4****
      Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****

      预期输出为以上两者之一,helloworld-v1和helloworld-v2随机响应。

  2. 构建测试场景,配置helloworld应用的流量规则,设置请求由helloworld-v1接收并响应,同时镜像发往helloworld-v2。

    1. 使用以下内容,配置目标规则。具体操作,请参见管理目标规则

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        name: helloworld
        namespace: default
      spec:
        host: helloworld
        subsets:
          - labels:
              version: v1
            name: v1
          - labels:
              version: v2
            name: v2
      
    2. 使用以下内容,配置虚拟服务。具体操作,请参见管理虚拟服务

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: helloworld-vs
        namespace: default
      spec:
        hosts:
          - helloworld
        http:
          - mirror:
              host: helloworld
              subset: v2
            route:
              - destination:
                  host: helloworld
                  subset: v1
  3. 验证配置是否生效。

    1. 在ACK集群对应的KubeConfig环境下,执行以下命令,进入sleep环境开启bash。

      kubectl exec -it deploy/sleep -- sh
    2. 执行以下命令, 向helloworld服务发送请求。

      curl helloworld:5000/hello

      预期输出始终为以下结果,由helloworld-v1响应。

      Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****
    3. 查看应用的网格拓扑。具体操作,请参见查看应用的网格拓扑

      预期输出如下,请求被1:1复制到helloworld-v2。

      查看应用网格拓扑.png