《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证
本文说明如何在Istio中的VirtualService中设置访问的timeout特性。将请求各发给后台backend-v1和backend-v2微服务,其中backend-v2返回会超过3秒,因此会超时。
本文可在完成《OpenShift 4 之Service Mesh教程(2)- 用Kiali监控微服务运行》后进行操作。在开始正式操作前需要运行以下命令将运行应用的my-istio-app项目里的内容清空即可(注意需要将脚本中的“USERID“替换为本文中的”my-istio-app“)。
$ source scripts/teardown.sh
- 部署上图中的frontend-v1和backend-v1微服务,以及相关服务。
$ oc apply -f ocp/frontend-v1-deployment.yaml -n my-istio-app
$ oc apply -f ocp/frontend-service.yaml -n my-istio-app
$ oc apply -f ocp/frontend-route.yaml -n my-istio-app
$ oc apply -f ocp/backend-v1-deployment.yaml -n my-istio-app
$ oc apply -f ocp/backend-v2-deployment.yaml -n my-istio-app
$ oc apply -f ocp/backend-service.yaml -n my-istio-app
- 执行命令发测试请求,查看backend-v1和backend-v2的响应时间。可以看到是轮训访问这两个后台服务的,调用backend-v1的响应比较短(小于3秒),而调用backend-v2响应时间比较长(大于3秒)。
$ while true; do curl -sIL $FRONTEND_URL -o /dev/null -w "Response Coed: %{http_code} Elapsed Time:%{time_total}\n"; done
...
Response Coed: 200 Elapsed Time:5.802549 sec
Response Coed: 200 Elapsed Time:0.799221 sec
Response Coed: 200 Elapsed Time:5.807315 sec
Response Coed: 200 Elapsed Time:0.830107 sec
Response Coed: 200 Elapsed Time:0.818900 sec
Response Coed: 200 Elapsed Time:5.823480 sec
...
- 在Kiali控制台中查看微服务访问请求链和响应时间。
- 在Kiali控制台中的Service,然后进入”backend“。在Action下拉表中选择Request Timeouts。
- 在Create Request Timeouts对话框中设置Timeout为”3s“,然后点击Create。
- 这时在”backend“的Service下方的”Istio Config“中添加了类型为VirtualService和DestinationRule两个对象。
这两个对象内容如下:
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: backend
namespace: my-istio-app
spec:
hosts:
- backend.my-istio-app.svc.cluster.local
http:
- route:
- destination:
host: backend.my-istio-app.svc.cluster.local
subset: v1
weight: 50
- destination:
host: backend.my-istio-app.svc.cluster.local
subset: v2
weight: 50
timeout: 3s
kind: DestinationRule
apiVersion: networking.istio.io/v1alpha3
metadata:
name: backend
namespace: my-istio-app
spec:
host: backend.my-istio-app.svc.cluster.local
subsets:
- labels:
version: v1
name: v1
- labels:
version: v2
name: v2
- 执行命令发测试请求,可以看到backend-v2响应时间比较长。不过这次因为backend-v2响应时间大于3秒已经按照“Response Code: 504”处理了。
$ while true; do curl -sIL $FRONTEND_URL -o /dev/null -w "Response Coed: %{http_code} Elapsed Time:%{time_total}\n"; done
...
Response Coed: 200 Elapsed Time:0.281
Response Coed: 200 Elapsed Time:0.243
Response Coed: 504 Elapsed Time:3.014
Response Coed: 504 Elapsed Time:3.017
...
- 在Kiali控制台中查看微服务访问请求链和响应时间。其中由于发给backend-v2的请求会由于超时而被系统标记为红色。
- 手动修改名为backend的VirtualService,删除最后一行“timeout: 3s“。
- 执行命令发测试请求,确认不再出现“504”的访回结果。
$ while true; do curl -sIL $FRONTEND_URL -o /dev/null -w "Response Coed: %{http_code} Elapsed Time:%{time_total}\n"; done
...
Response Coed: 200 Elapsed Time:0.799221 sec
Response Coed: 200 Elapsed Time:5.807315 sec
Response Coed: 200 Elapsed Time:0.818900 sec
Response Coed: 200 Elapsed Time:5.823480 sec
...
- 最后删除VirtualService和DestinationRule两类对象。
$ oc delete -n my-istio-app vs,dr --all