前提条件:
- 部署服务(deployment、service)并注入sidecar
我这里还是使用官方提供的bookinfo程序,选择productpage作为熔断目标
1 | kubectl apply -f - << EOF |
在之前的文档中,设置了目标路由的subset,使virtual service能够识别版本,本文中流量熔断是基于目标路由配置的设置。
测试工具
这是一个名为 Fortio 的负载测试客户端, 它可以控制连接数、并发数及发送 HTTP 请求的延迟。 通过 Fortio 能够有效的触发前面在 DestinationRule
中设置的熔断策略
注意:Fortio也需要注入sidecar
1 | kubectl apply -f - << EOF |
测试并发数
获取Fortio pod名称
1
export FORTIO_POD=$(kubectl get pods -l app=fortio -o 'jsonpath={.items[0].metadata.name}')
测试并发
1
kubectl exec "$FORTIO_POD" -c fortio -- /usr/bin/fortio load -c 10 -qps 0 -n 1 -loglevel Warning http://productpage:9080/productpage
-c : 每次连接的并发连接数
-n : 发送连接次数
配置Destination Rule
1 | kubectl apply -f - <<EOF |
再次测试
获取Fortio pod名称
1
export FORTIO_POD=$(kubectl get pods -l app=fortio -o 'jsonpath={.items[0].metadata.name}')
测试并发
1
kubectl exec "$FORTIO_POD" -c fortio -- /usr/bin/fortio load -c 10 -qps 0 -n 1 -loglevel Warning http://productpage:9080/productpage
istio-proxy 允许存在一些误差,所以偶尔会出现拦截9个请求偶尔拦截8个请求,这与各种因素有关,只需要关心大概范围即可。
查看详细熔断日志
多次并发测试后可以通过日志了解更多熔断详情
1 | kubectl exec "$FORTIO_POD" -c istio-proxy -- pilot-agent request GET stats | grep productpage | grep pending |
其中110个被请求标记为熔断,20个请求通过