idou老师带教你学Istio 03: istio故障注入功能的介绍和使用

举报
云容器大未来 发表于 2019/01/21 11:35:43 2019/01/21
【摘要】 Istio提供了HTTP故障注入功能,在http请求转发的过程中,用户可以设定一个或多个故障。故障注入的修改作用于Virtual Service,共有两种不同的故障模式abort和delay。

故障注入测试

故障注入测试顾名思义就是当被测试应用部分组件或功能出现潜在故障时其本身的容错机制是否正常工作,以达到规避故障保证正常组件或功能的使用。Istio提供了HTTP故障注入功能,在http请求转发的过程中,用户可以设定一个或多个故障。故障注入的修改作用于Virtual Service,共有两种不同的故障模式abort和delay。


类型所属描述
abortHTTPFaultInjection.Abort中断Http请求并且返回既定的错误状态码给请求方
delayHTTPFaultInjection.Delay按预设的时延返回Http请求响应
为了方便大家理解本文内容,我们预先部署了bookinfo示例。


图中是原来完整的 virtualservice,设置了当cookie满足user=vip时,reviews的请求会流入v4版本,其余都会流入v1版本。

0121_1.jpg


中断故障

当用户对某个负载注入了中断故障时,对于访问该负载的http请求,都会收到预先设定的错误状态码而不会收到正确内容的响应。图中的yaml截取于reviews的virtualservice文件。

0121_2.jpg

我们可以看到对于版本v1的路由规则里多了一条fault对象。这个fault对象中,则包含了设定的故障属性。可以解读为,v1版本添加abort故障并且设定返回的http状态码为501,percent设定为100这意味着所有访问v1的请求都会收到501的http响应,显而易见如果这里设成50则只有一半的请求会收到501响应,另一半则会收到正常的响应。

0121_3.jpg

如果我们访问productpage只能看到基本的报错信息,并不能确定,这到底是我们预设的中断故障起作用了,还是某种原因导致服务“崩了”。


为了确定是我们人工导致的服务中断,而不是其他,我们必须直接访问reviews。给Reviews组件配置外部ip,打开浏览器,并且按下F12,选择network,在地址栏中输入“地址/reviews/0”,network中会有一项红色报错信息,点开则可以看到我们预设的501报错状态码。至此中断故障已经成功注入。删除则只需将fault对象直接清除掉即可。

0121_4.jpg


如果这时候我们去访问v4,将cookie设为user=vip

可以看到这时的reviews可以正常的显示。

0121_5.jpg


延时故障注入

除了刚才延时的中断服务故障,延时故障也可以手动注入组件中。刚才使用的bookinfo示例中有两个版本v1和v4。我们已经给v1版本注入了中断故障,现在我们给v4版本注入延时故障,设定时间延迟为2秒,并且所有访问v4的请求都会有2秒的延迟。

0121_6.jpg

如上,我们打开product page 以及 reviews page 来验证一下:

0121_7.jpg

从这里我们可以看到product page 响应2.39秒

0121_8.jpg

Reviews page的响应2.27s



我们用例子介绍了两种基本故障注入的方式

接下来我们看一些其他的故障注入例子


Virtual Service 例子1:

0121_9.jpg

在这个例子中,当cookie满足user=vip时会触发延时故障,2秒延时后访问v4版本,当user=svip的时候则会触发中断故障,当cookie不满足以上两个条件时,则可以正常访问v1版本。


Virtual Service 例子2:

0121_10.jpg

在这个例子中不论cookie符合vip还是svip,亦或是都不符合两个条件,都可以正常的访问到v1版本。这是由于route对象放在了第一个,没有任何匹配条件,不管cookie值是什么都“满足条件”,所以所有的流量不加任何处理直接会流向版本v1,这里要特殊提醒下,如若自己手动添加故障注入一定要注意相对顺序,否则可能不会出现你想设定的结果。


Virtual Service 例子3:

0121_11.jpg

这个virtual service中我们对同一个版本注入了两个不同的故障,满足任何一个条件都可以触发相应的故障,如果所有条件都不满足则会默认的正常访问v1版本。那么问题来了,如果我没有配置最后一条route,出现了一条既不符合中断故障匹配条件,也不符合延时故障匹配条件,请求会走向哪里呢?对于这种yaml设置,结果异常的简单直白,如果请求不符合任何条件,则会直接获得404的响应,不会自动流入任何其他的版本。

 

故障注入测试为应用在上线前提供了完备的可靠性测试,istio为使用者进行故障注入提供了极大地便捷,在正确的地方添加3-4行配置而不用修改应用代码即可进行故障注入测试。希望有更多的人可以利用istio故障注入功能提供的便捷来提高自己的研发和测试效率。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。