我正在测试 istio 的流量治理,部署了 A/B 服务到 k8s 并注册到 nacos ,给服务 B 设置了熔断器最大请求数为 1 。 做了如下验证
A 是 order-service B 是 user-service
- A 服务使用 nacos 返回的实例 IP 调用 B 服务,通过观察,发现熔断器没有工作
kubectl -n test exec "$FORTIO_POD" -c fortio -- /usr/bin/fortio load -c 3 -qps 0 -n 10 -loglevel Warning http://order-service:8082/orders/1
kubectl -n test exec "$ORDER_POD" -c istio-proxy pilot-agent request GET stats|grep 'user-service'|grep pending
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.default.remaining_pending: 1
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.default.rq_pending_open: 0
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.high.rq_pending_open: 0
- A 服务使用服务名调用 B 服务,通过观察
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.default.remaining_pending: 1
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.default.rq_pending_open: 0
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.circuit_breakers.high.rq_pending_open: 0
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.upstream_rq_pending_active: 0
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.upstream_rq_pending_failure_eject: 0
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.upstream_rq_pending_overflow: 4
cluster.outbound|8081||user-service.dd-test.svc.cluster.local;.upstream_rq_pending_total: 6
通过上述验证,我感觉是需要通过服务名(ClusterIP 也可以)调用的,可能测试或者观察的过程有问题,所以想到 v2 请教一下各位大佬
问题
- istio 是必须要通过服务名调用才能实现治理吗?
- 如果通过服务名调用是不是现有微服务都需要改造,因为都是通过 nacos 获取实例 IP