文档

【Failover】流量降级

更新时间:

配置流量降级可以使请求的目标服务没有可用端点时,将请求降级转发到提前指定的另一组服务端点。本文介绍如何配置流量降级。

前提条件

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

操作步骤

  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. 使用以下内容,创建虚拟服务,设置发往helloworld服务的请求都发往helloworld的v1子集,当v1子集不存在可用端点时,请求将降级到helloworld服务的v2子集。具体操作,请参见管理虚拟服务

  3. apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: helloworld
    spec:
      hosts:
        - helloworld
      http:
        - route:
            - destination:
                host: helloworld
                subset: v1
              fallback:
                target:
                  host: helloworld
                  subset: v2
    
  4. 验证流量降级是否生效。

    1. 在ACK集群对应的KubeConfig环境下,执行以下命令。

      kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"

      预期输出:

      Hello version: v1, instance: helloworld-v1-9585666c8-8****
      Hello version: v1, instance: helloworld-v1-9585666c8-8****
      Hello version: v1, instance: helloworld-v1-9585666c8-8****
      Hello version: v1, instance: helloworld-v1-9585666c8-8****
      ...
      Hello version: v1, instance: helloworld-v1-9585666c8-8****

      预期输出表明当helloworld服务的v1子集存在时,所有请求发往helloworld服务的v1子集。

    2. 将helloworld服务的v1子集缩容至0,模拟故障情况。

      1. 登录容器服务管理控制台,在左侧导航栏选择集群

      2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

      3. 无状态页面的操作列,单击helloworld-v1工作负载对应的伸缩,在伸缩对话框,设置所需容器组数量0,单击确定

    3. 在ACK集群对应的KubeConfig环境下,执行以下命令,重新验证helloworld服务访问。

      kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"

      预期输出:

      Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
      Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
      ...
      Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
      Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
      Hello version: v2, instance: helloworld-v2-68bb8c995b-t****

      预期输出表明当helloworld服务的v1子集不存在可用端点时,请求全部发送到服务的v2子集,流量降级生效。