You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python GCP Cloud Run gRPC服务无法响应问题排查求助

排查GCP Cloud Run部署gRPC服务后Envoy代理连接失败问题

问题背景

我正在开发一款聊天应用,本地环境由三个核心组件构成且运行正常:

  • 基于SolidJS、Vite构建的客户端,使用nice-grpc-web库
  • Docker容器运行的Envoy代理
  • Python编写的gRPC服务器,通过Haystack的PromptNode流式返回响应,支持直接运行或Docker部署

将Python服务以Docker容器部署到GCP Cloud Run后,服务本身运行正常且通过健康检查,但将Envoy代理指向该服务时,客户端抛出错误:

ClientError: /ChatBot/AskQuestion UNAVAILABLE: upstream connect error or disconnect/reset before headers. reset reason: connection failure

排查建议

1. 适配Cloud Run的HTTPS协议要求

Cloud Run对外仅暴露HTTPS端口(443),所有外部请求必须使用HTTPS。若Envoy仍以HTTP方式连接服务,会直接导致连接失败。需在Envoy集群配置中启用TLS:

clusters:
  - name: chatbot-grpc-service
    connect_timeout: 5s
    type: LOGICAL_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: chatbot-grpc-service
      endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: <你的Cloud Run服务域名>
                    port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        sni: <你的Cloud Run服务域名>

2. 确认Cloud Run端口配置

Cloud Run默认监听端口为8080,若你的gRPC服务在Docker中监听50051端口,需在部署时明确指定:

  • 命令行部署:gcloud run deploy --port=50051
  • 控制台部署:在Cloud Run控制台的「容器」设置中修改「端口」为50051

注意:Envoy配置中只需填写Cloud Run对外的443端口,Cloud Run会自动将请求转发到你指定的容器端口。

3. 检查CORS配置

gRPC-Web依赖CORS规则实现跨域请求,需确保Envoy代理配置了正确的CORS过滤器:

http_filters:
  - name: envoy.filters.http.cors
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
  # 后续添加grpc_web、router等其他过滤器

4. 验证服务网络可达性

  • 本地直接调用测试:使用grpcurl工具直接访问Cloud Run服务,确认服务本身可正常响应:
    grpcurl -insecure <你的Cloud Run服务域名>:443 ChatBot.AskQuestion
    
    若调用失败,说明gRPC服务本身存在配置问题,需检查服务监听端口、proto定义是否正确。
  • 查看Cloud Run访问权限:确保服务设置为「允许所有访问」(测试阶段),或配置了正确的VPC连接器(若需访问内部资源)。
  • 开启Envoy调试日志:启动Envoy时添加--log-level debug参数,查看连接失败的具体细节(如DNS解析失败、TLS握手错误等)。

补充:Dockerfile配置检查

确保Python gRPC服务的Dockerfile正确暴露端口且启动命令无误:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 50051

CMD ["python", "server.py"]

注:Cloud Run会忽略EXPOSE指令,但部署时必须指定正确的容器端口。

内容的提问来源于stack exchange,提问作者serlingpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:25:07