注入HTTP延迟故障

我们对ratings服务注入7s的延迟,当jason用户访问时,有7s的延迟故障

定义VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- match:
- headers:
end-user:
exact: jason
fault:
delay:
fixedDelay: 7s
percentage:
value: 100
route:
- destination:
host: ratings
subset: v1
- route:
- destination:
host: ratings
subset: v1

我们登录jason用户,刷新页面发现,请求完成大概时6s多

根据官方文档所说,reviews和ratings服务间的超时时长是10s,但是productage和reviews之间只有3s的超时时长,再加上1次重试,一共6s,也就是说整个完整的请求,一旦超过6s就会返回超时错误,从上图也可以看出,页面确实返回了超时,而且图片右半部分可以看出整个请求是6s完成的。

注:有的时候发现不是所有的请求都在6s完成,有的时候是能够很快返回的,具体原因是因为我们是对ratings注入7s的故障的,在bookinfo部署那篇文章,一开始我们有提到,reviews只有v2、v3版本是调用ratings的,如果请求经过v1版本的reviews,那么他不会调用ratings,也就不会有这个故障。

注入HTTP abort故障

为用户jason创建一个故障中止规则

定义VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- match:
- headers:
end-user:
exact: jason
fault:
abort:
httpStatus: 500
percentage:
value: 100
route:
- destination:
host: ratings
subset: v1
- route:
- destination:
host: ratings
subset: v1

我们登录jason用户,刷新页面,ratings显示 Ratings service is currently unavailable

我们查看v2和v3版本reviews的log,v1版本不调用ratings,所有不存在abort故障问题

kubectl log reviews-v2-685867965b-njhzz -c reviews
kubectl log reviews-v3-5d6778fd88-t76fz -c reviews

可以看出返回的日志全是500状态,说明故障注入成功了。