YAZONG 我的开源

Kubernetes(十三)istio(13.8)设置请求超时(对比13-6)

  , , ,
0 评论0 浏览

== 设置请求超时

本任务用于示范如何使用Istio 在 Envoy 中设置请求超时。

http 请求的超时可以用路由规则的 timeout 字段来指定。 默认情况下,超时是禁用的,本任务中,会把 reviews 服务的超时设置为 1 秒。 为了观察效果,还需要在对 ratings 服务的调用上人为引入 2 秒的延迟。

谁调用reviews服务1s就会超时。

如果reviews服务无返回,那么不可以等待,直接就超时。

跟之前”13-6故障注入”的7s等待是完全两个维度的东西。

初始化路由

#### 1. 初始化路由


# 基础路由,所有请求全路由到v1版本中去
[root@node-2 istio-1.9.5]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created


#将请求路由到 reviews 服务的 v2 版本
[root@node-2 istio-1.9.5]# kubectl apply -f - <<EOF
> apiVersion: networking.istio.io/v1alpha3
> kind: VirtualService
> metadata:
>   name: reviews
> spec:
>   hosts:
>     - reviews
>   http:
>   - route:
>     - destination:
>         host: reviews
>         subset: v2
> EOF
virtualservice.networking.istio.io/reviews configured

给对ratings 服务的调用添加 2 秒的延迟

==== 2. 给对 ratings 服务的调用添加 2 秒的延迟

因为只有v2和v3才会调用ratings服务

[root@node-2 istio-1.9.5]# kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
   name: ratings
spec:
   hosts:
   - ratings
   http:
   - fault:
       delay:
         percent: 100
         fixedDelay: 2s
     route:
     - destination:
         host: ratings
         subset: v1
EOF
virtualservice.networking.istio.io/ratings configured

在浏览器中打开 Bookinfo ,这时可以看到 Bookinfo 应用运行正常(显示了评级的星型符号),但是每次刷新页面,都会有 2 秒的延迟。

image.png

给对reviews 服务的调用增加一个半秒的请求超时

#### 3. 给对 reviews 服务的调用增加一个半秒的请求超时


[root@node-2 istio-1.9.5]# kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
   name: reviews
spec:
   hosts:
   - reviews
   http:
   - route:
     - destination:
         host: reviews
         subset: v2
     timeout: 0.5s
EOF
virtualservice.networking.istio.io/reviews configured

刷新Bookinfo 页面。这时候应该看到 1 秒钟就会返回,而不是之前的 2 秒钟,但 reviews 是不可用的。

即使超时配置为半秒,响应仍需要1 秒,是因为 productpage 服务中存在硬编码重试,因此它在返回之前调用 reviews 服务超时两次。

所有调用reviews的服务,如果reviews服务在0.5s之内没有返回,那么就返回超时。

这个不是网络延迟,是reviews服务真正执行的时间。

image.png

发现超时时间不是之前设置的2S,但是提示没调用成功reviews服务。

为啥不是0.5S,因为本身有重试机制。是符合预期的。

清理环境

[root@node-2 istio-1.9.5]# kubectl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io "productpage" deleted
virtualservice.networking.istio.io "reviews" deleted
virtualservice.networking.istio.io "ratings" deleted
virtualservice.networking.istio.io "details" deleted

标题:Kubernetes(十三)istio(13.8)设置请求超时(对比13-6)
作者:yazong
地址:https://blog.llyweb.com/articles/2022/12/24/1671815821672.html