当我将流量定向到其云运行实例 URL 时,我的 Streamlit 应用程序抛出 WebSocket 错误

问题描述 投票:0回答:1

这是我的这些应用程序的基础设施:

GCE Global LB(中央 GCP 项目)=> 互联网 NEG => 云运行应用程序(其自己项目中的 Streamlit 应用程序)

我在网上看到很多关于用户在与 websockets 相关的云运行上运行 Streamlit 应用程序时遇到问题的内容,但如果直接访问,该应用程序运行良好。

应用程序在以下情况下运行良好:

  • 如果您直接通过云运行URL访问它,即
    https://myapp-abc123-uc.a.run.app
  • 如果我在同一个项目中创建一个 GCE LB,并将其连接到具有无服务器后端的云运行应用程序

我的 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 错误吗?我是否需要更改代码来支持此配置,或者是否需要显式传递标头或其他内容?

google-cloud-platform websocket google-cloud-run streamlit gcp-load-balancer
1个回答
0
投票

让我详细介绍一下我听到、读到但从未测试过的内容。这是文档

  • 您必须在与 Cloud Run 服务相同的项目中创建无服务器 NEG。
  • 然后,您可以创建一个后端服务,只要它位于同一共享 VPC 中,该服务就会引用此无服务器 NEG
© www.soinside.com 2019 - 2024. All rights reserved.