十三 Istio:Istio项目实际案例——Online Boutique( 七 )

如果我们刷新页面http://192.168.110.190/ , 我们会注意到一个错误信息的出现:

十三 Istio:Istio项目实际案例——Online Boutique

文章插图
rpc error: code = Unavailable desc = upstream request timeout could not retrieve products该错误表明对产品目录服务的请求超时了 。原因为:我们修改了服务,增加了 6 秒的延迟,并将超时设置为 2 秒 。
让我们定义一个重试策略,有三次尝试 , 每次尝试的超时为 1 秒 。
[root@k8scloude1 ~]# vim productcatalogservice-retry.yaml[root@k8scloude1 ~]# cat productcatalogservice-retry.yamlapiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:name: productcatalogservicespec:hosts:- productcatalogservice.online-boutique.svc.cluster.localhttp:- route:- destination:host: productcatalogservice.online-boutique.svc.cluster.localretries:attempts: 3perTryTimeout: 1s[root@k8scloude1 ~]# kubectl apply -f productcatalogservice-retry.yamlvirtualservice.networking.istio.io/productcatalogservice configured[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d14hfrontend-ingress["frontend-gateway"]["*"]24hproductcatalogservice["productcatalogservice.online-boutique.svc.cluster.local"]10mrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]86m由于我们在产品目录服务部署中留下了额外的延迟,我们仍然会看到错误 。
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
让我们打开 Zipkin 中的追踪,看看重试策略的作用 。使用 getmesh istioctl dash zipkin 来打开 Zipkin 仪表盘 。或者使用如下方法打开zipkin界面
#查看zipkin端口为30350[root@k8scloude1 ~]# kubectl get svc -n istio-system | grep zipkinzipkinNodePort10.104.85.78<none>9411:30350/TCP23d浏览器输入http://192.168.110.130:30350/打开zipkin界面 。
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
点击 + 按钮,选择 serviceNamefrontend.online-boutique 。为了只得到至少一秒钟的响应(这就是我们的 perTryTimeout),选择 minDuration,在文本框中输入 1s 。点击RUN QUERY搜索按钮,显示所有追踪 。
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
点击 Filter 按钮 , 从下拉菜单中选择 productCatalogService.online-boutique 。你应该看到花了 1 秒钟的 trace 。这些 trace 对应于我们之前定义的 perTryTimeout
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
点击SHOW
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
详细信息如下:
十三 Istio:Istio项目实际案例——Online Boutique

文章插图
运行 kubectl delete vs productcatalogservice 删除 VirtualService 。
[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d15hfrontend-ingress["frontend-gateway"]["*"]24hproductcatalogservice["productcatalogservice.online-boutique.svc.cluster.local"]37mrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]113m[root@k8scloude1 ~]# kubectl delete virtualservice productcatalogservicevirtualservice.networking.istio.io "productcatalogservice" deleted[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d15hfrontend-ingress["frontend-gateway"]["*"]24hrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]114m

推荐阅读