Istio 故障注入
Istio 故障注入与其他在网络层引入错误(例如延迟数据包或者直接杀死 Pod)的机制不同,Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障,比如 HTTP 错误代码等。
Istio 可以注入两种类型的故障,而这两种故障都是使用虚拟服务来配置的:
延迟:模拟增加网络延迟或上游服务过载。
中止:模拟服务故障而导致调用服务不可用。中止通常以 HTTP 错误代码或 TCP 连接失败表示
故障注入
尽可能去模拟出可能会出现问题,用于模拟问题
1.延迟故障
2.中断故障
控制时间也就是等多少秒然后再往svc去转发,其实也就是暂停一下,这叫做延时注入。
凡是往svc1走的时候,都给你延迟一下fixedDelay,percent意思为百分比,就是客户端来流量的时候,是不是所有的客户端经过这个vs的时候都做延迟一下,还是按照比例去做。
故障注入是一种软件测试方式,通过在代码中引入故障来发现系统隐藏的bug,并可以与压测一起验证软件的稳健性。
目前istio仅针对http协议支持两种方式:延迟故障和中断故障,所有故障相关配置在 Virtual services CRD对象内。
延迟故障
- 场景1 为服务A设置5秒延迟,期望100%请求都是 5秒后返回数据
## 配置示例
http:
- fault:
delay:
percentage:
value: 100.0
fixedDelay: 5s
- 场景2 为服务A设置5秒延迟,期望50%的请求都是5秒后返回数据
## 配置示例
http:
- fault:
delay:
percentage:
value: 50.0
fixedDelay: 5s
中断故障
中断故障注入是用来模拟服务器出问题的情况下,当客户端连接过来的时候,可能后端服务出问题了,比如pod1出现问题了。
[root@k8s-master vs]# cat vsinject.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myvs
namespace: istio
spec:
hosts:
- "cc.rhce.cc"
gateways:
- mygateway
http:
- fault:
abort:
percentage:
value: 100
httpStatus: 503
route:
- destination:
host: svc1
port:
number: 80
这些返回的错误代码是你自己就可以去定义的。
上面就是尽可能的去故障还原,将问题还原出来,模拟出来,再次去解决问题。