GCP:如何让Cloud Run同时访问共享VPC与Serverless VPC连接器?
最优解决方案
针对你的场景,核心矛盾是Cloud Run仅支持配置一种VPC访问方式(要么绑定共享VPC子网,要么使用Serverless VPC访问连接器),以下是两种可行的最优方案,按优先级排序:
方案一:将Redis实例迁移至共享VPC子网
操作步骤
- HOST项目授权APP项目使用共享VPC子网
由HOST项目管理员执行,允许APP项目在共享VPC的snet0子网中部署资源:
gcloud compute shared-vpc associated-projects add APP_PROJECT_ID \ --host-project=HOST_PROJECT_ID \ --subnet=regions/REGION/subnetworks/snet0
- 迁移Redis实例至
snet0子网
- 创建新的Redis实例,指定使用共享VPC的
snet0子网:
gcloud redis instances create NEW_REDIS_INSTANCE \ --region=REGION \ --network=projects/HOST_PROJECT_ID/global/networks/shared \ --subnet=projects/HOST_PROJECT_ID/regions/REGION/subnetworks/snet0 \ --redis-version=REDIS_VERSION
- 将原有Redis实例的数据迁移至新实例(可使用
redis-cli --rdb导出导入,或GCP原生迁移工具)
- 配置Cloud Run绑定共享VPC子网
部署Cloud Run时指定使用snet0子网,即可同时访问HOST子网资源和新Redis实例:
gcloud run deploy YOUR_SERVICE \ --image=YOUR_IMAGE \ --region=REGION \ --vpc-connector="" \ --vpc-network=projects/HOST_PROJECT_ID/global/networks/shared \ --vpc-subnet=projects/HOST_PROJECT_ID/regions/REGION/subnetworks/snet0 \ --vpc-access-egress=all-traffic
优势
- 架构更简洁,避免多VPC的路由复杂度
- 减少网络组件维护成本(无需保留Serverless VPC连接器)
- 契合共享VPC的资源集中管理设计理念
方案二:配置共享VPC与redis-network的VPC对等连接
如果无法迁移Redis实例,可通过VPC对等连接打通两个网络,让Cloud Run通过现有Serverless VPC连接器访问双方资源:
操作步骤
- 创建VPC对等连接
- 在HOST项目发起对等连接请求:
gcloud compute networks peerings create PEERING_NAME \ --network=shared \ --peer-project=APP_PROJECT_ID \ --peer-network=redis-network \ --auto-create-routes
- 在APP项目接受对等连接请求:
gcloud compute networks peerings update PEERING_NAME \ --network=redis-network \ --peer-project=HOST_PROJECT_ID \ --peer-network=shared \ --accept
- 配置防火墙规则
- 在HOST项目添加规则,允许
redis-network的CIDR段访问snet0子网内的资源 - 在APP项目添加规则,允许
shared网络的CIDR段访问Redis实例
- Cloud Run保留原有Serverless VPC连接器配置
无需修改Cloud Run的VPC配置,通过对等连接即可直接访问HOST项目的snet0子网资源
优势
- 无需迁移现有Redis实例,对业务运行影响极小
- 保留原有Serverless VPC连接器的配置逻辑
方案选择建议
优先选择方案一,因为它简化了网络架构,降低了长期维护成本;如果业务无法中断或Redis迁移难度极高,则选择方案二。
内容的提问来源于stack exchange,提问作者memyrok99
相关产品推荐
相关产品推荐

