首页 > 解决方案 > 当下游服务抛出 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。问题出在哪里?

注意:每个服务只有一个实例。

标签: kubernetesopenshiftistiocircuit-breaker

解决方案


此功能适用于 Istio 1.3(但不适用于 1.2)。请参阅我在https://github.com/istio/api/issues/1068提出的问题


推荐阅读