部署 httpbin
服务:
(相关资料图)
kubectl apply -f samples/httpbin/httpbin.yaml
部署 sleep
服务:
kubectl apply -f samples/sleep/sleep.yaml
httpbin
服务作为接收请求的服务端, sleep
服务作为发送请求的客户端。
在 sleep
服务中向 httpbin
服务发出请求:
export SLEEP_POD=$(kubectl get pods -l app=sleep -o "jsonpath={.items[0].metadata.name}")kubectl exec "$SLEEP_POD" -c sleep -- time curl -o /dev/null -sS -w "%{http_code}\n" http://httpbin.org/delay/5
返回结果如下:
200real 0m 5.69suser 0m 0.00ssys 0m 0.00s
可以看到,请求大约在 5 秒返回 200 (OK)。
创建虚拟服务,访问httpbin
服务时,请求超时设置为 3 秒:
kubectl apply -f - <
再次访问,返回结果如下:
504real 0m 3.01suser 0m 0.00ssys 0m 0.00s
可以看到,在 3 秒后出现了 504 (Gateway Timeout)。 Istio 在 3 秒后切断了响应时间为 5 秒的httpbin
服务的请求。接下来,我们深入地看一下,Istio是怎么切断请求的?
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
查看Envoy日志执行以下命令,查看sleep
服务的Envoy日志:
kubectl logs -l app=sleep -c istio-proxy
可以看到sleep
服务对httpbin
服务的调用的日志:
{ "authority": "httpbin:8000", "bytes_received": 0, "bytes_sent": 24, "connection_termination_details": null, "downstream_local_address": "172.24.146.239:8000", "downstream_remote_address": "172.24.158.25:40384", "duration": 3001, "method": "GET", "path": "/delay/5", "protocol": "HTTP/1.1", "request_id": "5ef38816-7f49-48c8-9627-2416e1716293", "requested_server_name": null, "response_code": 504, "response_code_details": "upstream_response_timeout", "response_flags": "UT", "route_name": null, "start_time": "2022-07-01T09:40:13.882Z", "upstream_cluster": "outbound|8000||httpbin.onemore.svc.cluster.local", "upstream_host": "172.24.158.96:80", "upstream_local_address": "172.24.158.25:32846", "upstream_service_time": null, "upstream_transport_failure_reason": null, "user_agent": "curl/7.81.0-DEV", "x_forwarded_for": null}
其中,response_flags
为UT
,表示上游(upstream)请求超时,也就是sleep
服务检测到了httpbin
服务的请求超时。
执行以下命令,查看httpbin
服务的Envoy日志:
kubectl logs -l app=httpbin -c istio-proxy
可以看到httpbin
服务被sleep
服务调用的Envoy日志:
{ "authority": "httpbin:8000", "bytes_received": 0, "bytes_sent": 0, "connection_termination_details": null, "downstream_local_address": "172.24.158.96:80", "downstream_remote_address": "172.24.158.25:32846", "duration": 2997, "method": "GET", "path": "/delay/5", "protocol": "HTTP/1.1", "request_id": "5ef38816-7f49-48c8-9627-2416e1716293", "requested_server_name": "outbound_.8000_._.httpbin.onemore.svc.cluster.local", "response_code": 0, "response_code_details": "downstream_remote_disconnect", "response_flags": "DC", "route_name": "default", "start_time": "2022-07-01T09:40:13.885Z", "upstream_cluster": "inbound|80||", "upstream_host": "172.24.158.96:80", "upstream_local_address": "127.0.0.6:35701", "upstream_service_time": null, "upstream_transport_failure_reason": null, "user_agent": "curl/7.81.0-DEV", "x_forwarded_for": null}
其中,response_flags
为DC
,表示下游(downstream)连接中断,也就是sleep
服务的调用请求被中断了。
通过Envoy日志,我们可以做出一些分析和判断:
当httpbin
服务的请求正常的时候,调用过程如下图:
当httpbin
服务的请求超时的时候,调用过程如下图:
虽然,我们在httpbin
服务上设置的请求超时时间,但实际上主动断开请求的却是sleep
服务的Envoy。
kubectl delete virtualservice httpbinkubectl delete -f samples/httpbin/httpbin.yamlkubectl delete -f samples/sleep/sleep.yaml
最后,感谢你这么帅,还给我点赞。
微信公众号:万猫学社
微信扫描二维码
关注后回复「电子书」
获取12本Java必读技术书籍
上一篇: 贵州省地质博物馆2023年端午参观攻略
下一篇: 最后一页
所有文章、评论、信息、数据仅供参考,使用前请核实,风险自负。
Copyright 2013-2020 高陵经济网 版权所有 京ICP备2022016840号-34
联系邮箱:920 891 263@qq.com glxcb.cn All Rights Reserved