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

如何在GCP Cloud Run中允许TCP流量以支持SSH连接?

解决Cloud Run允许SSH流量的方法

Cloud Run默认仅支持HTTP/HTTPS协议的流量(端口80/443),直接通过TCP协议的SSH连接会被拦截,你可以通过以下两种方式解决:

方法一:用HTTP隧道封装SSH流量

把SSH流量封装在HTTP请求中,让Cloud Run识别为合法的HTTP流量,具体实现有两种方式:

  • 使用现成工具(如sshuttle)或自定义HTTP代理,将SSH流量通过POST请求转发到Cloud Run服务
  • 在你的Go服务中新增HTTP端点,接收POST请求后,把请求体数据转发到SSH处理逻辑,再将SSH响应返回给客户端

示例Go代码片段:

// 处理封装SSH流量的HTTP请求
func sshTunnelHandler(w http.ResponseWriter, r *http.Request) {
    input, _ := io.ReadAll(r.Body)
    // 调用你已有的SSH处理逻辑
    output := yourSSHProcessingFunc(input)
    w.Write(output)
}

func main() {
    http.HandleFunc("/ssh-tunnel", sshTunnelHandler)
    http.ListenAndServe(":8080", nil)
}

客户端连接时,需要通过自定义工具或代理将SSH流量封装为POST请求,发送到https://***.run.app/ssh-tunnel

方法二:基于私有VPC的TCP端口转发

如果你的Cloud Run服务部署在私有VPC网络内,可以通过VPC负载均衡器转发TCP流量:

  • 创建TCP负载均衡器,将外部端口(如22)映射到Cloud Run服务的内部端口
  • 配置Cloud Run服务的VPC访问权限,允许负载均衡器的流量进入
  • 客户端通过负载均衡器的IP和端口发起SSH连接,而非直接连接Cloud Run公共域名

关键提示

  • Cloud Run公共域名仅支持HTTP/HTTPS协议,无法直接通过该域名走纯TCP的SSH流量
  • 方法一无需额外VPC配置,但需要修改客户端和服务端逻辑实现流量封装
  • 方法二需要配置VPC和负载均衡器,成本更高,但更接近原生SSH使用体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:32:35