Google Cloud Function连接Google VM实例失败求助
排查Cloud Function无法访问VM实例的步骤
以下是针对你的场景的具体排查方向,按优先级排序:
1. 确认Serverless VPC访问连接器的核心配置
- 检查连接器状态:必须处于RUNNING状态,若为PROVISIONING或ERROR状态,等待恢复或重新创建
- 核对IP范围:连接器的IP段不能与VM所在子网的IP范围重叠,否则会导致路由冲突
- 验证CF关联:确认Cloud Function的配置中已正确选择该连接器,若勾选了
Allow traffic to private IPs only,确保你请求的是VM的内部IP(而非外部IP)
2. 检查VM实例的网络与系统防火墙
- 确认VM的内部IP与你在CF代码中请求的地址完全一致,避免拼写错误
- 验证VM与连接器属于同一个VPC网络,跨VPC访问需要额外配置对等连接,新手优先确保同VPC
- 检查VM操作系统自带的防火墙(如Ubuntu的
ufw、CentOS的firewalld):必须开放5432(PostgreSQL)或80端口给VPC的IP范围(或连接器的IP段),很多新手会忽略系统防火墙,只配置了GCP云防火墙
3. 验证GCP云防火墙规则的有效性
- 目标匹配:若VM设置了网络标签,防火墙规则的目标必须选择对应的标签;未设置标签则选
All instances in network - 来源范围:防火墙规则的来源IP范围必须包含Serverless VPC连接器的IP段(或直接覆盖VPC子网范围,如
10.0.0.0/16) - 方向与端口:规则方向为入站(Ingress),且明确开放5432/80端口,协议选择
tcp
4. 测试VPC内部连通性
- 在同一VPC下创建一个临时测试VM,通过SSH登录后执行以下命令测试:
- ping目标VM的内部IP:
ping 10.x.x.x(替换为你的VM内部IP) - 测试端口连通性:
telnet 10.x.x.x 5432或nc -zv 10.x.x.x 5432
如果测试VM能连通,说明VPC内部网络正常,问题出在Cloud Function的配置或代码;如果不通,聚焦VM或防火墙配置
- ping目标VM的内部IP:
5. 检查Cloud Function的代码与部署
- 确认代码中请求的是VM的内部IP,而非外部IP(VPC连接器仅支持访问内部IP)
- 给axios请求添加超时参数,看是否能触发更明确的错误:
axios.get('http://10.x.x.x', { timeout: 10000 }) - 确认依赖安装:部署时确保
axios已正确安装,使用gcloud命令部署会自动安装package.json中的依赖,若手动打包需包含node_modules
6. 查看日志定位问题
- 查看Cloud Function日志:在GCP控制台→Cloud Functions→你的函数→Logs,查看是否有
connection refused(端口未开)或其他错误提示 - 查看VM系统日志:在VM实例页面→Logs,检查是否有来自Cloud Function的连接请求被拦截的记录
内容的提问来源于stack exchange,提问作者bstras21
相关产品推荐
相关产品推荐

