当前位置: 首页 > 知识库问答 >
问题:

Istio断路器在连续错误时未断开电路,当下游服务抛出5xx(500,502,503,504)错误时

暴英达
2023-03-14

我有几个微服务,客户服务和客户评级服务。第一个调用后者。

我在对customer-rating-service的调用中放置了一个断路器,并强制该服务始终抛出一个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

如您所见,我设置了consautiveerrors:1,所以在第一次从customer-service调用到customer-rating-service之后,由于这返回一个5xx错误(我尝试抛出不同的错误500、502、503...),电路应该会打开。但是,每个后续调用都到达Customer-rating-service。问题出在哪里?

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

共有1个答案

司空兴为
2023-03-14

这一特性在ISTIO1.3中起作用(但在1.2中不起作用)。请参阅我在https://github.com/istio/api/issues/1068上提出的问题

 类似资料:
  • 当我在dockerize或kubernetes容器中运行Python微服务时,它工作得很好。但是对于Istio服务网格,它不起作用。 我已经为两个出站外部超文本传输协议API添加了ServiceEntry。我似乎可以使用服务网格内的curl命令访问容器内的url内容表单。所以,我认为服务条目很好,而且有效。 但是当我尝试从Python中使用xml.sax解析器的微服务时,它会给我之前断开连接/重置

  • 我正在评估resilience4j,以便将其包含在我们的反应API中,到目前为止,我使用的是模拟流量。 正如你所看到的,电路总是关闭的。我不知道它是否与此有关,但注意到以下消息。 为什么这不起作用?

  • 我实现了自定义GatewayFilterFactory来实现自定义安全性。我观察到网关和远程服务器之间的连接突然关闭时出现间歇性问题。 Spring cloud gateway吞咽异常并向客户端抛出500个内部服务器错误。 完全堆栈跟踪- 示例实现- 以下查询的任何建议- 如何确保netty将连接/握手错误转发到客户端,而不是抛出500个内部服务器错误? 如何重新建立关闭的连接?

  • 无论我尝试什么,当我访问docker机器ip时,我总是得到HTTP错误代码500。 我运行laradock通过Docker工具箱(操作系统:Windows 10),并有一个默认的虚拟机运行。我已经按照视频中的说明设置laradock。 我已经成功地将我需要的文件夹挂载到VM中,并根据我的代码在VM中的位置更改了docker-compose.yml: 这是我的docker-compose.yml文件

  • 试图调试这个简单的NodeJS socketIO服务器。 我在启动时不断收到以下错误消息。我看不出代码有什么问题。 TypeError:侦听器必须是服务器上Namespace.EventEmitter.AddListener(Events.js:130:11)处的TypeError()处的函数。(匿名函数)[如上](/users/foo/bin/node_modules/socket.io/lib