[译] Istio-proxy 的503问题

原文链接:Istio-proxy 503 issue

一、问题描述

在定位连接丢失的问题过程中,通过分析日志发现,请求到达 istio-proxy 的 sidecar 之后并没有继续转发到相应的应用容器,而且大部分503报错都是 inbound 型流量。通过查看 istio 文档以及进一步定位,我们发现,当一个请求到达 Istio-proxy 后,Istio-proxy 会新建一个与应用容器的连接,这些连接缓存在 istio 内以实现更好的性能表现(复用)。但从应用侧来看,这些连接都有 idle 超时设置,而503报错就是因为 Istio-proxy 转发请求时使用的已有连接,而该连接在应用侧由于idle超时设置是已经关闭了的。

二、解决方案

2.1 关闭 istio-proxy 缓存机制

影响性能,暂不考虑

2.2 引入重试机制

引入重试机制,当请求由于某些特定连接错误而失败时,进行必要的重试操作。
方法就是配置VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  label:
    applyverb: automated
    project: example
    service: app
  name: example-ivs
  namespace: example-ns
spec:
  gateways:
  - istio-system/prod-domain-gty
  hosts:
  - domain.io
  http:
  - match:
    - uri:
        prefix: /api/
      route:
      - destination:  
          host: example-svc
          port:
            number: 80
      retries:
        attempts: 3
        perTryTimeout: 0.1s
        retryOn: gateway-error, connect-failure,refused-stream

添加retries配置后,当请求遇到这3种错误时,会每隔0.1s进行一次重试,一共重试3次,重试间隔根据实际情况自行调试。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Istio简介 Istio提供了完整的非侵入式的微服务治理解决方案,解决微服务的管理、网络连接以及安全管理等应用网...
    sknfie阅读 1,514评论 0 0
  • 本文是 Istio 管理 Java 微服务的案例教程,使用的所有工具和软件全部基于开源方案,替换了redhat-d...
    蒲熠星F1阅读 8,883评论 0 1
  • 在微服务中另外一个重点就是网关,网关理论包含入口网关和出口网关,传统意义上的网关很难做到出口网络控制,但是对于Is...
    城市里永远的学习者阅读 6,495评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,837评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,277评论 0 4