系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 故障注入简介

4 Istio 故障注入

5 Istio 故障注入实例

    5.1 客户端资源文件

    5.2 k8s 服务文件

    5.3 部署工作负载(deployment)

    5.4 虚拟服务文件

6 验证故障注入


1 前言

        如果你对博客有任何疑问,请告诉我。

第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第1张图片


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:

第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第2张图片


3 故障注入简介

        很多年前,我看过这样一部电影:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第3张图片

        没错,周星驰演得,逃学威龙2。电影的开头讲述了周星驰的飞虎队执行反恐演习,在最后却误射了可爱的小骚妹。

        但是这跟故障注入有神马关系呢?

        周星驰的反恐演习其实并不是真的反恐,而只是演习;故障注入本身也并没有故障,而是人为引入故障。这种机制都是为了测试和提高体系健壮性的手段。

        在程序开发过程中,我们经常会有这样的场景,比如要测试调用第三方服务失败后系统的反应,或者上游服务雪崩时下游服务逻辑处理等。如果没有故障注入,那么我们就只能采用断网、压测等手段模拟故障,但是这样的操作实在费事费力,一点都不随风。


4 Istio 故障注入

        Istio 故障注入与其他在网络层引入错误(例如延迟数据包或者直接杀死 Pod)的机制不同,Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障,比如 HTTP 错误代码等。

        Istio 可以注入两种类型的故障,而这两种故障都是使用虚拟服务来配置的:

延迟:模拟增加网络延迟或上游服务过载。

中止:模拟服务故障而导致调用服务不可用。中止通常以 HTTP 错误代码或 TCP 连接失败表示


5 Istio 故障注入实例

        本实例包括 4 个资源文件,3 个 k8s 相关,1 个 istio 相关:

jiuxi-client.yaml

jiuxi-nginx-svc.yaml

jiuxi-nginx-deploy.yaml

jiuxi-nginx-vs.yaml

5.1 客户端资源文件

        jiuxi-client.yaml 内容如下:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第4张图片

        执行如下语句进行 Istio 注入,注入后,此 client 将处于网格之内:

istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -

        Istio 注入成功成功如下图所示:

spacer.gifclipboard5.png

5.2 k8s 服务文件

        jiuxi-nginx-svc.yaml 内容如下:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第5张图片

        执行如下语句部署 service:

kubectl apply -f jiuxi-nginx-svc.yaml

5.3 部署工作负载(deployment)

        jiuxi-nginx-deploy.yaml 内容如下:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第6张图片

        部署语句如下:

kubectl apply -f jiuxi-nginx-deploy.yaml

5.4 虚拟服务文件

        故障注入就在虚拟服务资源中,内容如下:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第7张图片

        部署语句如下:

kubectl apply -f jiuxi-nginx-vs.yaml

        自此,整个实例部署完毕。


6 验证故障注入

        执行如下语句登录客户端:

kubectl exec -it client-5b77d5949f-clrb7 -- sh

        使用 wget 访问 nginx-svc:

wget -q -O - http://nginx-svc

        发现延迟生效,因为设置的延迟时间是 5s。除去我中间操作花去了大约 3s,发现最终的延迟确实是 5s。如下图所示:

spacer.gif第三十三章 九析带你轻松完爆 Istio - fault injection 故障注入_第8张图片

        自此,九析带你轻松完爆了 Istio 故障注入。