配置流量降级可以使请求的目标服务没有可用端点时,将请求降级转发到提前指定的另一组服务端点。本文介绍如何配置流量降级。
前提条件
已完成准备工作,并部署helloworld服务和sleep服务。具体操作,请参见准备工作。
操作步骤
使用以下内容,配置目标规则。具体操作,请参见管理目标规则。
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
使用以下内容,创建虚拟服务,设置发往helloworld服务的请求都发往helloworld的v1子集,当v1子集不存在可用端点时,请求将降级到helloworld服务的v2子集。具体操作,请参见管理虚拟服务。
验证流量降级是否生效。
在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子集。
将helloworld服务的v1子集缩容至0,模拟故障情况。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的操作列,单击helloworld-v1工作负载对应的伸缩,在伸缩对话框,设置所需容器组数量为0,单击确定。
在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子集,流量降级生效。
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
文档内容是否对您有帮助?