9.3 给服务注入错误

上一章

9.5 本章小结

下一章

更多图书

9.4 时延与错误配合使用

有时可能需要模拟服务时延和服务出错故障同时出现的场景,比如当服务出现过载情况时,可能会出现所有请求响应变慢,大部分请求失败,只有部分请求成功的情况。Istio的时延和错误注入功能是相互独立工作的,可以同时设置,分别起作用,互不干扰,能够模拟服务过载出现的异常情况。

时延与错误配合使用示例如下:


1 apiVersion: networking.istio.io/v1alpha3
 2 kind: DestinationRule
 3 metadata:
 4   name: service-go
 5 spec:
 6   host: service-go
 7   subsets:
 8   - name: v1
 9     labels:
10       version: v1
11   - name: v2
12     labels:
13       version: v2
14 ---
15 apiVersion: networking.istio.io/v1alpha3
16 kind: VirtualService
17 metadata:
18   name: service-go
19 spec:
20   hosts:
21   - service-go
22   http:
23   - route:
24     - destination:
25         host: service-go
26         subset: v1
27     fault:
28       delay:
29         percent: 100
30         fixedDelay: 5s
31       abort:
32         percent: 50
33         httpStatus: 500

第27~33行定义了服务故障注入规则,同时设置了时延和错误注入规则。代码中定义的规则表明要给调用service-go服务v1版本的所有请求增加5秒的时延,并且抽取50%的请求得到错误响应码为500。

【实验】

1)创建基础路由规则,创建Gateway应用访问入口,service-js服务路由规则:


$ kubectl apply -f istio/route/gateway-js-v1.yaml

2)创建service-go服务的时延和错误故障注入规则:


$ kubectl apply -f istio/fault/virtual-service-go-delay-abort.yaml

3)浏览器访问。

浏览器访问地址为http://11.11.11.111:31380/ ,多次点击“发射”按钮,查看服务调用情况,可以看到,有部分请求出现5秒左右的调用时延但调用成功,如图9-3所示。

有部分请求出现5秒左右的调用时延,且调用失败,如图9-4所示。

图9-3 时延与错误配合使用

图9-4 部分请求出现5秒左右的调用时延,且调用失败

4)清理:


$ kubectl delete -f istio/route/gateway-js-v1.yaml
$ kubectl delete -f istio/fault/virtual-service-go-delay-abort.yaml