Istio 出口给出来自 python 微服务的 "upstream connect error or disconnect/reset before headers" 错误
Istio egress gives "upstream connect error or disconnect/reset before headers" errors from python micro-service
当我 运行 一个 Python dockerized 或 kubernetes 容器中的微服务时,它工作得很好。但是对于 Istio 服务网格,它不起作用。
我已经为我的两个出站外部 http api 添加了 ServiceEntry。看来我可以使用服务网格内的 curl 命令访问容器内的 url 内容表单。所以,我认为服务条目很好并且可以正常工作。
但是当我尝试在 Python 中使用 xml.sax 解析器的微服务时,它给了我 upstream connect error or disconnect/reset before headers
尽管同一个应用程序在没有 Istio 的情况下也能正常工作。
我认为它与 Istio 或 Envoy 或 Python 有关。
更新:我确实注入了 Istio-proxy side-car。我还为外部 MySQL 数据库添加了 ServiceEntry 并且 mysql 从微服务连接。
我找到了这不起作用的原因。我的 Python 服务使用 xml.sax 解析器库从互联网解析 xml,它使用发起 http/1.0 请求的遗留 urllib 包。
Envoy 不支持 http/1.0 协议版本。因此,它不起作用。我通过使用 helm 为 Istio 设置 global.proxy.includeIPRanges="10.x.0.1/16" 来解决这个问题。这实际上绕过了给定 ip 范围之外的所有传出连接的整个特使代理。
但我不想全局绕过 Istio。
当我 运行 一个 Python dockerized 或 kubernetes 容器中的微服务时,它工作得很好。但是对于 Istio 服务网格,它不起作用。
我已经为我的两个出站外部 http api 添加了 ServiceEntry。看来我可以使用服务网格内的 curl 命令访问容器内的 url 内容表单。所以,我认为服务条目很好并且可以正常工作。
但是当我尝试在 Python 中使用 xml.sax 解析器的微服务时,它给了我 upstream connect error or disconnect/reset before headers
尽管同一个应用程序在没有 Istio 的情况下也能正常工作。
我认为它与 Istio 或 Envoy 或 Python 有关。
更新:我确实注入了 Istio-proxy side-car。我还为外部 MySQL 数据库添加了 ServiceEntry 并且 mysql 从微服务连接。
我找到了这不起作用的原因。我的 Python 服务使用 xml.sax 解析器库从互联网解析 xml,它使用发起 http/1.0 请求的遗留 urllib 包。
Envoy 不支持 http/1.0 协议版本。因此,它不起作用。我通过使用 helm 为 Istio 设置 global.proxy.includeIPRanges="10.x.0.1/16" 来解决这个问题。这实际上绕过了给定 ip 范围之外的所有传出连接的整个特使代理。
但我不想全局绕过 Istio。