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

如何低成本实现Cloud Scheduler与内部Cloud Load Balancer的连接?

问题根源

Cloud Scheduler的HTTP任务默认从公网环境发起请求,而内部负载均衡(ILB)的私有IP仅对VPC内部流量开放,因此直接访问会触发「Connection refused」错误——哪怕权限配置正确也没用,核心问题是网络层面不通。

低成本解决方案

以下是几种几乎零成本或极低开销的可行方案:

方案1:Cloud Run + VPC内部访问(推荐)

这是最省心的无服务器方案,完全在GCP免费额度内就能运行:

  • 写一个极简的HTTP代理服务(用Python Flask/Node.js Express几行代码即可),功能就是接收请求后转发到ILB的私有IP地址
  • 创建Cloud Run服务时,开启「允许内部VPC访问」选项,确保服务部署在ILB所在的VPC网络中
  • 将Cloud Scheduler的任务URL改为Cloud Run的公网端点,Scheduler通过公网调用Cloud Run,Cloud Run在VPC内部直接访问ILB的私有IP

示例Python代理代码(仅作参考):

from flask import Flask, request
import requests

app = Flask(__name__)
ILB_PRIVATE_IP = "http://10.0.0.10"  # 替换为你的ILB私有IP

@app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE'])
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def proxy(path):
    target_url = f"{ILB_PRIVATE_IP}/{path}"
    response = requests.request(
        method=request.method,
        url=target_url,
        headers={k: v for k, v in request.headers if k != 'Host'},
        data=request.get_data(),
        cookies=request.cookies
    )
    return (response.content, response.status_code, response.headers.items())

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

方案2:Cloud Functions + Serverless VPC Access

原理和Cloud Run类似,用Cloud Functions作为中间转发层:

  • 创建Cloud Functions函数,逻辑为转发请求到ILB私有IP
  • 配置Serverless VPC Access连接器,将Cloud Functions接入ILB所在的VPC
  • Cloud Scheduler调用Cloud Functions的HTTP触发器端点,函数通过VPC连接器访问ILB

方案3:微型Compute Engine实例(适合不想用无服务器的场景)

  • 创建f1-micro实例(属于GCP免费额度范围),部署简单的HTTP转发服务(比如Nginx反向代理)
  • 配置实例防火墙规则,允许Cloud Scheduler的公网IP段访问实例的HTTP端口
  • Scheduler调用实例的公网IP,实例再转发请求到ILB的私有IP
额外排查点
  • 确认ILB的后端实例监听了目标端口(比如你访问的80端口),且后端服务的健康检查状态正常
  • 验证中间层服务(Cloud Run/Cloud Functions/VM)确实能访问ILB私有IP,可通过服务日志或实例内的curl命令测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:14