本篇文章讲解了istio如何注入故障并测试应用程序的弹性。
延迟故障
下面我们来进行故障注入的配置,我们给ratings的v2版本注入一个延迟,这里导致调用出现延迟故障。
1 2 3 4 5 6 7
| [root@VM-0-13-centos istio-1.5.1] virtualservice.networking.istio.io/productpage unchanged virtualservice.networking.istio.io/reviews configured virtualservice.networking.istio.io/ratings configured virtualservice.networking.istio.io/details unchanged [root@VM-0-13-centos istio-1.5.1] virtualservice.networking.istio.io/reviews configured
|
经过上面的配置,下面是请求的流程:
- productpage → reviews:v2 → ratings (针对 jason 用户)
- productpage → reviews:v1 (其他用户)
我们来测试下是否生效,我们刷新页面发现没有登录的是没有星标的v1版本
登录jason用户查看到的是v2版本
下面我们配置一下延迟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@VM-0-13-centos istio-1.5.1] virtualservice.networking.istio.io/ratings configured [root@VM-0-13-centos istio-1.5.1] apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - match: - headers: end-user: exact: jason fault: delay: percentage: value: 100.0 fixedDelay: 7s route: - destination: host: ratings subset: v1 - route: - destination: host: ratings subset: v1
|
刷新页面出现了错误,这是因为延迟超过了硬编码的时间,我们推出jason用户发现又会恢复正常。
从上面的故障注入可以发下,是配置在VirtualService中,配置的字段是fault,我们在这里配置的是延迟故障,其实fault还有一种故障叫abort(终止),下面我们来配置下终止故障。
终止故障
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@VM-0-13-centos istio-1.5.1] virtualservice.networking.istio.io/ratings configured [root@VM-0-13-centos istio-1.5.1] apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - match: - headers: end-user: exact: jason fault: abort: percentage: value: 100.0 httpStatus: 500 route: - destination: host: ratings subset: v1 - route: - destination: host: ratings subset: v1
|
使用用户jason登陆到/productpage 页面。如果规则成功传播到所有的 pod,您应该能立即看到页面加载并看到 Ratings service is currently unavailable 消息。
如果您注销用户 jason 或在匿名窗口(或其他浏览器)中打开 Bookinfo 应用程序, 您将看到 /productpage 为除 jason 以外的其他用户调用了 reviews:v1(完全不调用 ratings)。 因此,您不会看到任何错误消息。