[译] 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-proxy 的503问题)