Cloud Run 与 ALB:逐层验收和排障

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

返回 ALB 实验或 Cloud Run 实验。按请求路径逐层检查,避免把所有 403 都归为 IAM、所有 404 都归为应用。HTTP 状态码只是线索,需要结合日志确定是谁返回的。

验收前记录目标#

确认当前项目、服务 Region、服务名、ALB 类型和域名。下列命令在配置了 gcloud 的本机终端运行;读取配置不改变服务。

source lab.env
gcloud config get-value project
gcloud run services describe lab-hello \
  --project="$PROJECT_ID" --region="$REGION" --format=yaml
gcloud run services get-iam-policy lab-hello \
  --project="$PROJECT_ID" --region="$REGION"
gcloud run revisions list --service=lab-hello \
  --project="$PROJECT_ID" --region="$REGION"

检查 Ready 状态、容器镜像/端口、当前承接流量的 Revision、ingress、runtime Service Account 及调用者授权。最新创建或 Ready 的 Revision 不一定正在承接正式流量;候选版本可能为 0%。

按请求路径逐层检查#

层次 检查内容 通过标准
DNS 域名的 A/AAAA 是否指向当前 ALB;是否有旧记录 请求进入预期前端
TLS 域名、证书覆盖范围、证书状态、绑定的 HTTPS proxy 客户端证书校验通过
Frontend IP、端口、HTTP/HTTPS、forwarding rule 的范围 监听的是客户端访问的入口
URL map 请求 Host、路径和默认后端 匹配预期 Backend service
Backend / NEG NEG 类型、项目、Region、服务名;如用 mask,提取出的服务是否存在 引用正确且配置已传播
Cloud Run 入口 ingress 是否允许外部 ALB,而非纯 Internal 该来源有资格到达服务
调用身份 Invoker 检查、IAM、ID token audience、IAP 配置 当前调用身份被授权
Revision / 应用 Ready、流量分配、监听端口、路由、日志和下游依赖 应用正常响应

Serverless NEG 不使用普通 VM health check。 Cloud Run 后端没有这种检查是正常情况;应核对 NEG 引用、服务状态、ingress、IAM 和应用日志。排障说明

常见错误从哪里查#

现象 可能原因与下一步
401 / 403 ID token 缺失、过期、audience 不符、Invoker 权限、IAP 或 Cloud Armor 拒绝;先看拒绝发生在哪层
404 URL map / URL mask 指向错误、应用路径不存在、Cloud Run ingress 或默认 URL 限制;不能仅凭状态码认定应用收到请求
502 LB 到后端通信异常、连接提前关闭或后端响应问题;查看 LB 的 statusDetails 与容器日志
503 实例启动失败、资源或容量不足、应用主动返回错误等;检查 Revision、实例与扩容状态
429 实例/并发容量、平台限制或限流策略;检查 Cloud Armor 与 Cloud Run 指标
超时 / 504 客户端、ALB、应用或依赖超时;逐层比对耗时,避免只调大一个 timeout
证书一直 PROVISIONING DNS、证书授权记录、域名与所绑定前端不匹配;检查对应证书签发方式

Cloud Run 错误排查、ALB 排障

如何看日志#

控制台的 Cloud Run → 服务 → Logs查看请求和容器日志;Logging → Logs Explorer 可同时查询 LB 与 Cloud Run。请求日志描述访问结果,容器 stdout/stderr 通常包含代码异常、端口或数据库连接错误。运行身份缺少数据库或 Secret 权限,可能表现为应用 5xx,而不是用户调用 IAM 的 403。

Cloud Run 查询示例,在 Logs Explorer 中填写:

resource.type="cloud_run_revision"
resource.labels.service_name="lab-hello"

全局 ALB 查询示例:

resource.type="http_load_balancer"
resource.labels.backend_service_name="lab-backend"

区域型 ALB 使用 resource.type="http_external_regional_lb_rule",按实际日志标签筛选本例资源。先扩大到该资源类型及测试时间窗口,避免标签条件错误把所有日志过滤掉。

CLI 创建的全局实验后端可显式开启请求日志:

gcloud compute backend-services update lab-backend \
  --global --enable-logging --logging-sample-rate=1

查看同一时间、Host、请求路径和 trace(若传播)对应的日志。没有日志可能是采样、日志未启用、时间窗口或请求尚未到达该层,不能单独证明网络被阻止。ALB 日志

正向和反向验证#

阶段 正向测试 反向测试
IAM 保护的 Cloud Run 入门 有权限的 ID token 调用返回 hello 匿名调用被拒绝
公开 hello + ALB ALB 地址返回 hello 普通公网客户端直连 run.app 被 ingress 拒绝
自有域名 HTTPS 域名访问成功且证书验证通过 错误主机名不应被当作有效 TLS 身份
IAP 员工应用 已授权员工登录成功 未授权身份被拒绝

Cloud Run ingress 设置为 internal-and-cloud-load-balancing 后,从本机直接访问 run.app 失败是预期结果,即使你带有有效 token。需要测试服务本身时,选择已授权且符合 ingress 的路径;不要为了排障直接把所有控制都关闭。

清理怎么确认#

Cloud Run 和 ALB 独立清理:只删一方不会回收另一方。具体顺序见 全局清理或 区域型清理。

清理后核对 Cloud Run、Load balancing、IP addresses、证书与 Proxy-only subnet;共享代理 subnet 在其他依赖解除前保留。

搜索文档

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

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