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=ACTIVEpurpose 规定地址仅供托管代理,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.invoker3. 创建后端与路由#
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 或其他服务。