如何在无特权权限下将Google Cloud Run容器连接到OpenVPN?
解决方案
下面是4种不需要Cloud Run特权权限即可实现需求的可行方案,可根据你的改造成本选择:
方案1:使用GCP托管VPN打通网络(推荐,运维成本最低)
- 直接用GCP Cloud VPN和你侧的OpenVPN服务端建立站点到站点的IPsec隧道,将Cloud Run所在VPC与OpenVPN后方的内网网段打通
- 给Cloud Run服务配置VPC连接器,配置路由规则允许Cloud Run的流量通过Cloud VPN访问内网FTP站点,全程不需要在Cloud Run容器内运行任何VPN客户端,也不需要任何特殊权限。
方案2:部署独立中转代理节点(改造成本最低)
- 申请一台最低配置的GCE虚拟机实例,在实例内正常运行OpenVPN客户端连接目标VPN网络
- 在该GCE实例上部署TCP代理(如Nginx流代理、Socks5代理),开放FTP所需的21控制端口 + 被动模式端口段的转发规则
- 修改Java Web应用的FTP连接配置,将目标地址改为GCE实例的内网IP,由代理中转流量到VPN后的FTP站点,不需要修改Cloud Run的任何权限配置。
方案3:使用用户态VPN客户端(无需改网络架构)
- 替换容器内的内核态OpenVPN客户端,改用用户态实现的VPN工具如
openvpn3、tun2socks,这类工具不需要依赖tun/tap内核设备的特权操作 - 搭配Cloud Run第二代执行环境,部署时添加
NET_ADMIN、NET_RAW权限即可运行,命令示例:
gcloud run deploy [服务名] \ --execution-environment gen2 \ --capabilities NET_ADMIN,NET_RAW \ # 其余原有部署参数
- 该方案完全不需要修改现有网络架构,只需要调整容器镜像和部署参数即可。
方案4:使用Serverless VPC访问连接器对接内网出口
- 如果你的OpenVPN服务端已经部署在和Cloud Run同VPC的其他节点上,直接配置Serverless VPC访问连接器,将Cloud Run的流量路由到运行了OpenVPN客户端的出口节点即可,不需要在Cloud Run侧运行VPN逻辑。
注意:FTP是多端口协议,如果你使用代理中转方案,需要提前配置好被动模式的端口段转发规则,避免出现主动连接可用、被动模式不可用的问题。
内容的提问来源于stack exchange,提问作者zbenev
相关产品推荐
相关产品推荐

