第三十五章 九析带你轻松完爆 Istio - 网络弹性之超时(timeout)

系列文章:


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

目录

1 前言

2 邀约

3 网络弹性介绍

4 超时时间

5 Istio 超时实例

5.1 jiuxi-client.yaml 文件

5.2 jiuxi-deploy.yaml

5.3 jiuxi-svc.yaml

5.4 jiuxi-vs.yaml

6 超时实例部署

6.1 Istio 注入

6.2 部署 k8s service:

6.3 部署 Istio 虚拟服务:

7 超时实例设置

8 超时实例验


1 前言

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

1.png


2 邀约

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

clipboard2.png


3 网络弹性介绍

        网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力。灾难事件的范畴很广泛,比如长时间停电、网络设备故障、恶意***等。


4 超时时间

        工作中常常会碰到这样的开发、测试场景,比如:“对方处理请求时间过长,没有及时响应,我们的程序要怎么处理来确保不会无限期地等待”。常见的处理方式是被调用方使用 sleep 语句模拟响应时间过长,调用方设定请求超时时间过短,来造成请求超时的结果。但是这种处理方法有很多的弊端,第一:本属于网络弹性层的东西,却需要在代码中体现;第二:超时时间设置过长可能导致过多的延迟、设置过短可能导致不必要的失败,因此超时时间需要动态调整。基于上面两个弊端,Istio  使用虚拟服务来优雅实现超时处理。

spacer.gifclipboard3.png


5 Istio 超时实例

        本实例需要结合 Istio 故障注入模拟被调用方响应请求慢的场景,有关 Istio 失败注入之延迟请参考本人的另外一篇博文,简单到让你分分钟轻松完爆。

        该实例的架构图如下:

spacer.gifclipboard4.png

        架构说明如下,本实例就是模拟客户端调用 nginx,nginx 将请求转发给 tomcat 的常见功能。tomcat 响应请求设置为 5s(通过故障注入实现,相当于 sleep 5s 逻辑),nginx 设置 client 的请求超时时间为 2s。因为 nginx 需要在 2s 内返回给 client,而 nginx 请求 tomcat 却需要 5s,因此模拟 client 调用 nginx 超时的情景。

        该实例资源文件一共有 4 个,分别如下:

jiuxi-client.yaml # 客户端资源

jiuxi-deploy.yaml # nginx、tomcat 的 deployment 资源

jiuxi-svc.yaml # nginx、tomcat 的 service 资源

jiuxi-vs.yaml # Istio 虚拟资源

5.1 jiuxi-client.yaml 文件

        资源内容如下图所示:

spacer.gifclipboard5.png

5.2 jiuxi-deploy.yaml

        资源内容如下图所示:

spacer.gifclipboard6.png

5.3 jiuxi-svc.yaml

        资源内容如下图所示:

spacer.gifclipboard7.png

5.4 jiuxi-vs.yaml

        Istio 虚拟服务资源内容如下所示:

spacer.gifclipboard8.png

        此虚拟服务有两个知识点。

        第一:故障注入:

http:

- fault:

     delay:

         percentage:

         value: 100

     fixedDelay: 5s

        该设置说明每次调用 tomcat-svc 的 k8s service,都会延迟 5s 才会调用。

        第二:调用超时:

hosts:

- nginx-svc

http:

- route:

  - destination:

     host: nginx-svc

timeout: 2s

        该设置说明调用 nginx-svc 的 k8s service,请求超时时间是 2s。


6 超时实例部署

        在上面我们编写完样例,下面准备部署。

6.1 Istio 注入

        需要对 client 和 deploy 资源文件进行 Istio 注入,将 client、nginx、tomcat 都放入到网格中。本人是手工注入 Istio 方式,如果你设置了自动 Istio 注入不会影响,一样可以轻松完爆。

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

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

        执行成功后,通过 kubectl get pods 查看 Istio 注入情况:

spacer.gifclipboard9.png

6.2 部署 k8s service

        部署 jiuxi-svc.yaml:

kubectl apply -f jiuxi-svc.yaml

6.3 部署 Istio 虚拟服务

        部署 jiuxi-vs.yaml:

kubectl apply -f jiuxi-vs.yaml


7 超时实例设置

        因为要用到 nginx 对 tomcat 的转发功能,因此需要对 nginx 做一些设置:

        登录 nginx pod:

kubectl exec -it nginx-7559f7d487-djzbb -- sh

        编辑 nginx 配置文件:

vi /etc/nginx/conf.d/default.conf

        添加和修改如下内容:

spacer.gifclipboard10.png

        编辑完后,再执行如下语句验证配置和让配置生效:

spacer.gifclipboard11.png

        自此,整个样例配置和部署完毕。


8 超时实例验证

        登录 client,执行如下语句:

kubectl exec -it client-5b77d5949f-nzdtl -- sh # 别照抄本人 pod,根据各自情况修改

        执行如下语句:

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

        执行结果如下所示:

spacer.gifclipboard12.png

        说明 timeout 样例运行成功。

        也可以同样验证故障注入效果,执行如下语句:

wget -q -O - http://tomcat-svc:8080

        执行效果是请求 5s 后才会返回,说明 Istio 故障注入(延迟 5s)运行成功。

        自此,九析带你轻松完爆了 Istio。

猜你喜欢

转载自blog.51cto.com/14625168/2498209