Cloud Run配置静态出口IP访问Azure SQL Server失败排查
问题核心
你遇到的是Cloud Run出口IP无法匹配Azure SQL白名单的问题,两种VPC路由配置的错误原因分别是:
- 全流量路由时:VPC未放行Azure SQL的端口,或ODBC连接缺少加密参数导致连接超时
- 仅私有IP路由时:Azure SQL为公网地址,流量不走VPC,直接使用Cloud Run默认随机出口IP,所以白名单的静态IP未生效
最佳解决方案:Cloud NAT绑定静态IP+全流量路由
这是最可靠的方案,确保Cloud Run所有出口流量都经过指定静态IP,步骤如下:
1. 配置Cloud NAT网关(绑定静态IP)
在你的VPC网络中创建Cloud Router,再配置Cloud NAT将静态IP绑定到网关:
# 创建Cloud Router gcloud compute routers create nat-router --network=你的VPC网络名 --region=你的区域 # 创建NAT配置并绑定静态IP gcloud compute routers nats create nat-config --router=nat-router --region=你的区域 --nat-all-subnet-ip-ranges --static-ip-addresses=你的静态IP名称
2. 创建Serverless VPC Access连接器
gcloud compute networks vpc-access connectors create run-connector --region=你的区域 --network=你的VPC网络名 --range=10.8.0.0/28
3. 部署Cloud Run时指定VPC配置
部署服务时设置全流量路由并关联上述连接器:
gcloud run deploy 你的服务名 --image=你的镜像地址 --vpc-connector=run-connector --vpc-egress=all-traffic --region=你的区域
4. 优化ODBC连接串
Azure SQL强制要求加密连接,补充参数避免超时:
cnxn_str = ( "Driver={ODBC Driver 18 for SQL Server};" "Server=tcp:你的Azure SQL服务器名.database.windows.net,1433;" "Database=你的数据库名;" "Uid=你的用户名;" "Pwd=你的密码;" "Encrypt=yes;" "TrustServerCertificate=no;" "Connection Timeout=30;" )
5. 验证配置
- 在Cloud Run容器中执行
curl ifconfig.me,确认出口IP为你绑定的静态IP - 检查Azure SQL防火墙规则,确保该静态IP已被加入白名单(等待5分钟生效)
- 检查VPC防火墙规则,允许出站流量到
1433端口(Azure SQL默认端口)
备选方案:Azure Private Link(适合严格网络隔离场景)
如果需要完全通过私有网络访问Azure SQL,可以配置Azure Private Link,将Azure SQL的端点映射到你的GCP VPC中:
- 在Azure中创建Private Link服务,关联你的SQL Server
- 在GCP中创建VPC peering或Cloud Interconnect,连接到Azure虚拟网络
- Cloud Run通过VPC连接器访问私有链接端点,无需公网IP白名单
内容的提问来源于stack exchange,提问作者Hamza Ahmed
相关产品推荐
相关产品推荐

