如何解决Istio中的’upstream connect error或disconnect/reset before headers. reset reason: connection termination’错误

204次阅读
没有评论

问题描述

在设置使用SSL的AWS负载均衡器(ELB)时,您遇到了一个问题,即在浏览器访问网站时出现了错误:“upstream connect error或disconnect/reset before headers. reset reason: connection termination”。您之前的无SSL设置是正常工作的,但是现在遇到了这个问题。

解决方案

方案1:更新Gateway和VirtualService配置

您提供的配置中有一些问题,特别是在gateway.yaml中的配置。请根据下面的步骤更新配置。

  1. 更新gateway.yaml中的tls段落,确保httpsRedirect设置为false
    yaml
    tls:
    httpsRedirect: false

  2. 更新VirtualService配置,使用websocketUpgrade来启用WebSocket协议:
    “`yaml
    http:

  3. match:
    • uri:
      prefix: “/socket.io”
      route:
    • destination:
      host: api-gateway-ws.default.svc.cluster.local
      port:
      number: 5001
      websocketUpgrade: true
  4. route:
    • destination:
      host: api-gateway.default.svc.cluster.local
      port:
      number: 5000
      “`

方案2:检查端口配置

您提到了Docker配置中的端口配置问题。确保Docker文件中的EXPOSE <PORT>与应用程序实际运行的端口相匹配。

方案3:禁用mTLS

如果您的Pod中使用了gRPC,尝试在相关的命名空间中禁用mTLS。您可以使用以下命令来获取PeerAuthentication资源并禁用mTLS:

kubectl get peerauthentication --all-namespaces

方案4:拆分大的VirtualService和DestinationRule配置

如果您的配置中包含大量的VirtualService和DestinationRule,建议将它们拆分为多个资源。这可以提高配置的可维护性和灵活性。

方案5:检查Istio版本和配置要求

确保您的Istio版本与您的配置要求相匹配,并遵循Istio的最佳实践和要求。

方案6:检查日志和同步问题

您提到了一些日志和同步问题。可以尝试检查日志以获取更多信息,并确保Pilot和istio-proxy之间的数据同步正常。如果您的服务启动后第一次无法登录,但删除所有服务后重新启动可以工作,可能是由于同步问题导致的。

方案7:更新istio-ingressgateway配置

检查istio-ingressgateway的配置是否正确,尤其是与AWS负载均衡器相关的配置。确保您的SSL证书和后端协议设置正确。

结论

通过更新gateway.yaml配置,检查端口配置,禁用mTLS(如果需要),拆分大的配置资源,并确保Istio版本与配置要求匹配,您应该能够解决“upstream connect error或disconnect/reset before headers. reset reason: connection termination”错误。如果问题仍然存在,请检查日志以获取更多信息,并确保所有的数据同步和配置都正确。

正文完