问题描述
在设置使用SSL的AWS负载均衡器(ELB)时,您遇到了一个问题,即在浏览器访问网站时出现了错误:“upstream connect error或disconnect/reset before headers. reset reason: connection termination”。您之前的无SSL设置是正常工作的,但是现在遇到了这个问题。
解决方案
方案1:更新Gateway和VirtualService配置
您提供的配置中有一些问题,特别是在gateway.yaml
中的配置。请根据下面的步骤更新配置。
-
更新
gateway.yaml
中的tls
段落,确保httpsRedirect
设置为false
:
yaml
tls:
httpsRedirect: false -
更新
VirtualService
配置,使用websocketUpgrade
来启用WebSocket协议:
“`yaml
http: - match:
- uri:
prefix: “/socket.io”
route: - destination:
host: api-gateway-ws.default.svc.cluster.local
port:
number: 5001
websocketUpgrade: true
- uri:
- route:
- destination:
host: api-gateway.default.svc.cluster.local
port:
number: 5000
“`
- destination:
方案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”错误。如果问题仍然存在,请检查日志以获取更多信息,并确保所有的数据同步和配置都正确。