Regional ALB:Proxy-only subnet 与 Cloud Run

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

选择明确的区域处理边界时使用;此方案 ALB、NEG、Cloud Run 同 Region。

推荐做法#

  • 复用同 VPC/Region 的 ACTIVE REGIONAL_MANAGED_PROXY subnet;地址仅给 Google 托管代理。
  • Regional frontend、backend、证书按区域型支持配置,不照搬 global 参数。
  • Cloud Run 仍选 Serverless NEG,容器不直接部署进 Proxy-only subnet。

常用操作#

替换为实际资源;本段不依赖 lab.env。

PROJECT_ID='REPLACE_PROJECT_ID'
REGION='REPLACE_REGION'
NETWORK='REPLACE_NETWORK'
BACKEND='REPLACE_BACKEND_SERVICE'

gcloud compute networks subnets list --project="$PROJECT_ID" --network="$NETWORK"
gcloud compute backend-services describe "$BACKEND" \
  --project="$PROJECT_ID" --region="$REGION"

容易踩的坑#

  • Proxy-only subnet 不给普通 VM 或公网 frontend 分配地址,共享使用时不能直接删除。

Global certificate map 不能直接套给 Regional target proxy。 使用同 Region 的 Certificate Manager certificate 直接附加到 proxy;不要复制全局示例的 --global / map 配置。

配置说明与完整示例(按需展开)

这是 全局 ALB 实验的替代分支。先读 类型与资源关系,确认需要区域型 ALB。以下使用独立的 lab-reg-* 名称;不需要为了连接单 Region 的 Cloud Run 而同时创建两种 ALB。命令未在云端实测。

前提与控制台选择#

已有本项目、本 Region 中正常工作的 lab-hello,并完成 Cloud Run实验。lab.env 提供 PROJECT_ID、REGION。操作者需有负载均衡、网络和服务配置的相应权限。

控制台选择 Application Load Balancer → Public facing → Regional。核对以下项:

配置 本例选择及原因
Region 与 Cloud Run 同区域
VPC lab-vpc,用来归属代理 subnet;不表示容器自动部署到该 subnet
Proxy-only subnet 同 VPC、Region 的 ACTIVE 区域代理 subnet
Frontend HTTP:80,仅用于合成 hello 测试;业务入口使用 HTTPS
Backend type Serverless network endpoint group
Protocol 保持 UI 默认;Serverless NEG 忽略此字段
NEG 选择 Cloud Run 的 lab-hello,无需 URL mask
Routing rules 默认后端指向本例 Backend service

本篇验证匿名 hello + ALB。若该服务做过 IAP 实验,先按 结束 IAP 实验恢复 Cloud Run IAM authentication,再继续;不要将浏览器 IAP 认证状态带入这条实验路径。

1. 准备代理地址池#

先确认所选 VPC 存在,检查所有 subnet 及互联地址规划。示例 10.130.0.0/23 必须替换为你网络中无冲突的范围;特别是 Auto mode 网络可能占用相关范围。

source lab.env
gcloud config set project "$PROJECT_ID"
gcloud services enable compute.googleapis.com run.googleapis.com
export LB_NETWORK=lab-vpc
export PROXY_CIDR=10.130.0.0/23
gcloud compute networks subnets list --network="$LB_NETWORK"

如果已有同 Region、purpose 为 REGIONAL_MANAGED_PROXY 且 role 为 ACTIVE 的 subnet,复用它并跳过创建。没有时才执行:

gcloud compute networks subnets create lab-reg-proxies \
  --network="$LB_NETWORK" \
  --region="$REGION" \
  --range="$PROXY_CIDR" \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE

purpose 规定地址仅供托管代理,role=ACTIVE 表示使用中的代理地址池。范围至少 /26,这里用 /23 留出代理扩容空间。这个 subnet 不能用于普通 VM,也不能作为 ALB 公网地址池。

2. 允许 ALB 访问演示服务#

这里公开的是仅返回 hello 的实验服务。Ingress 限制入口,allUsers 授予匿名调用;如组织禁止该授权,应先选择批准的认证方案。

gcloud run services update lab-hello \
  --region="$REGION" \
  --ingress=internal-and-cloud-load-balancing
gcloud run services add-iam-policy-binding lab-hello \
  --region="$REGION" \
  --member=allUsers \
  --role=roles/run.invoker

3. 创建后端与路由#

NEG 引用 Cloud Run;Backend service 引用 NEG;URL map 将请求交给默认 Backend service。这里不配置 VM 式健康检查。

gcloud compute network-endpoint-groups create lab-reg-neg \
  --region="$REGION" \
  --network-endpoint-type=serverless \
  --cloud-run-service=lab-hello
gcloud compute backend-services create lab-reg-backend \
  --region="$REGION" \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --protocol=HTTP \
  --enable-logging \
  --logging-sample-rate=1
gcloud compute backend-services add-backend lab-reg-backend \
  --region="$REGION" \
  --network-endpoint-group=lab-reg-neg \
  --network-endpoint-group-region="$REGION"
gcloud compute url-maps create lab-reg-map \
  --region="$REGION" \
  --default-service=lab-reg-backend

--protocol=HTTP 对此 Serverless NEG 路径不控制实际后端协议;并不关闭平台加密。临时开启全量请求日志方便验收,业务环境另定采样率。

4. 创建 HTTP 前端并验收#

Target proxy 处理 HTTP,forwarding rule 把公网 IP:80 连接到该代理。这里静态 IP 与 forwarding rule 都使用区域范围和 Standard 网络层级。

gcloud compute addresses create lab-reg-ip \
  --region="$REGION" \
  --network-tier=STANDARD
gcloud compute target-http-proxies create lab-reg-http \
  --region="$REGION" \
  --url-map=lab-reg-map
gcloud compute forwarding-rules create lab-reg-http-rule \
  --region="$REGION" \
  --network="$LB_NETWORK" \
  --network-tier=STANDARD \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --address=lab-reg-ip \
  --target-http-proxy=lab-reg-http \
  --target-http-proxy-region="$REGION" \
  --ports=80
export REGIONAL_LB_IP=$(gcloud compute addresses describe lab-reg-ip \
  --region="$REGION" --format='value(address)')
curl --fail "http://$REGIONAL_LB_IP/"

等待配置传播后返回 hello。从普通公网客户端访问 run.app 原地址应被 ingress 阻止;这不是通过关闭 Cloud Run 服务实现的。失败按 排障页定位。

5. HTTPS 的区域限制#

正式入口使用自有域名,DNS 指向区域公网 IP。选择 Certificate Manager 时,在目标 Region 创建 DNS authorization 和 certificate;签发为 ACTIVE 后,用 target HTTPS proxy 的 --certificate-manager-certificates 直接引用,并指定 --region。不使用全局 certificate map,也不复制全局实验的 --global。Regional Google-managed certificate 完整流程

使用区域 Google-managed certificate 时按支持的 DNS authorization 方式完成域名验证,再创建 HTTPS proxy 与 443 forwarding rule。TLS 验收使用证书覆盖的域名,不以访问 HTTPS 裸 IP 的证书错误判断后端故障。具体证书类型和命令见 官方区域型 Cloud Run ALB 指南。

6. 按依赖顺序清理#

以下清理本页 HTTP 实验。如果另外创建了 HTTPS forwarding rule、proxy、证书和 DNS 记录,先解除对应入口引用。

gcloud compute forwarding-rules delete lab-reg-http-rule --region="$REGION"
gcloud compute target-http-proxies delete lab-reg-http --region="$REGION"
gcloud compute url-maps delete lab-reg-map --region="$REGION"
gcloud compute backend-services delete lab-reg-backend --region="$REGION"
gcloud compute network-endpoint-groups delete lab-reg-neg --region="$REGION"
gcloud compute addresses delete lab-reg-ip --region="$REGION"

只有 lab-reg-proxies 是本次新建、且没有其他代理服务依赖时,才删除它:

gcloud compute networks subnets delete lab-reg-proxies --region="$REGION"

若同一个 hello 服务仍供全局 ALB 使用,保留它的 ingress 和调用策略。所有 ALB 实验结束后,按 主页面清理恢复服务策略,或删除专用 Cloud Run 服务。不要删除共用 VPC、 subnet 或其他服务。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭