部署在App Engine的Django应用无法连接私有IP的Cloud SQL
解决GAE Django连接私有IP Cloud SQL的问题
先确认Cloud SQL所属VPC网络
- 打开Cloud SQL控制台,进入目标MySQL实例的详情页
- 切换到「连接」标签,在「私有IP」区块里会直接显示实例绑定的VPC网络名称(默认通常是
default网络) - 你在VPC页面看到的10.171.0.0是该VPC下的子网IP段,对应的就是Cloud SQL所在的VPC,必须保证Serverless VPC Access连接器创建在这个VPC内
修正连接器与配置步骤
1. 重建Serverless VPC Access连接器
- 删除之前创建的10.8.0.0/20连接器(如果它不在Cloud SQL的VPC里)
- 新建连接器时:
- 选择Cloud SQL实例所在的VPC网络
- 子网IP段要避开现有VPC的子网段(比如现有是10.171.0.0/20,就选10.172.0.0/20这类不重叠的段)
- 确保连接器的区域和Cloud SQL、GAE服务的区域完全一致
2. 配置GAE的app.yaml
- 必须在app.yaml中添加VPC连接器的引用,否则GAE无法访问私有网络:
vpc_access_connector: name: "projects/你的项目ID/locations/目标区域/connectors/你的连接器名称" - 确认项目已启用Cloud SQL Admin API(GAE连接私有IP实例依赖该API)
3. 修正Django settings.py的数据库配置
- 直接使用Cloud SQL的私有IP作为
HOST,不要用127.0.0.1(本地代理地址,GAE环境不适用)或连接器的网段(10.8.0.0是网段不是实例地址) - 示例配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名称', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'Cloud SQL的私有IP地址', 'PORT': '3306', } }
4. 检查VPC防火墙规则
- 在VPC控制台的「防火墙」页面,添加一条入站规则:
- 目标:指定Cloud SQL实例的私有IP
- 来源:Serverless VPC Access连接器的IP段
- 协议与端口:TCP:3306
- 动作:允许
内容的提问来源于stack exchange,提问作者Kentaro
相关产品推荐
相关产品推荐

