这是我的这些应用程序的基础设施:
GCE Global LB(中央 GCP 项目)=> 互联网 NEG => 云运行应用程序(其自己项目中的 Streamlit 应用程序)
我在网上看到很多关于用户在与 websockets 相关的云运行上运行 Streamlit 应用程序时遇到问题的内容,但如果直接访问,该应用程序运行良好。
应用程序在以下情况下运行良好:
https://myapp-abc123-uc.a.run.app
我的 GCE LB 位于一个中心项目中,我想将流量路由到其他项目中的云运行应用程序。这可以通过路由到云运行应用程序 URL(并设置标头)的互联网否定来完成,本文解释了设置:https://medium.com/google-cloud/cloud-run-and-load-balancing -超越您自己的项目-adfa1c8b001d
所有流量路由都有效,但是当我尝试通过负载均衡器访问它时,streamlit 应用程序会抛出这样的错误:
WebSocket connection to 'wss://my.domain.com/my_app/_stcore/stream' failed:
。
LB 路由如下所示:
Path "/my_app" in URL map
=> backend with request header of "host: myapp-abc123-uc.a.run.app"
=> internet neg with fqdn of "run.app"
我怀疑这可能是因为,虽然 GCE LB 支持 websockets ootb,但我直接路由到 URL 破坏了连接?
有办法修复这些 websocket 错误吗?我是否需要更改代码来支持此配置,或者是否需要显式传递标头或其他内容?
让我详细介绍一下我听到、读到但从未测试过的内容。这是文档