kubernetes - 当下游服务抛出 5xx (500, 502, 503, 504) 错误时,Istio 断路器不会在连续错误上打开电路
问题描述
我有几个微服务,客户服务和客户评级服务。第一个调用后者。
我在调用客户评级服务时放置了一个断路器,并强制此服务始终抛出 5xx 错误以验证断路器。但是客服总是这么称呼它,显然电路永远不会打开。
客户评级服务 - Istio 虚拟服务
...
spec:
hosts:
- customer-rating-service
gateways: ~
http:
- route:
- destination:
host: customer-rating-service
subset: v1
客户评级服务 - Istio 目标规则
...
spec:
host: customer-rating-service
trafficPolicy:
outlierDetection:
baseEjectionTime: 30s
consecutiveErrors: 1
maxEjectionPercent: 100
minHealthPercent: 0
tls:
mode: ISTIO_MUTUAL
subsets:
- labels:
version: v1
name: v1
如您所见consecutiveErrors: 1
,在从客户服务到客户评级服务的第一次调用后,我已设置为这样,因为这会返回 5xx 错误(我尝试抛出不同的错误 500、502、503 ...),电路应该打开。但是,每个后续调用都会到达 customer-rating-service。问题出在哪里?
注意:每个服务只有一个实例。
解决方案
此功能适用于 Istio 1.3(但不适用于 1.2)。请参阅我在https://github.com/istio/api/issues/1068提出的问题