Cloud 运行 通过 YAML 部署说找不到图像

Cloud Run deploying via YAML says Image not found

我有两个 Cloud 运行 Knative YAML 文件用于暂存和生产。我有两个用于暂存和生产的 GCP 项目以及两套 Artifact Registry。

我使用简单的 zip 并像这样构建:

gcloud builds submit --tag us-east1-docker.pkg.dev/proj-a/repo-x/image-y:1.0

然后我编辑 yaml 以在末尾调整标签,然后重新部署:

gcloud run services replace staging.yaml

前几天一切正常,我的暂存和生产站点已启动。它也刚刚对我的生产项目起作用。

我刚刚使用 gcloud config set core/project proj-b 切换了项目,然后再次 运行 这两个命令,进行了必要的调整。

第一个命令成功;图像已构建,我可以在 Artifact Registry 中看到它。

但是第二个命令失败了:

Applying new configuration to Cloud Run service [cloud-run-z] in project [01234567890] region [us-east1]

X Deploying... Image 'us-east1-docker.pkg.dev/proj-a/repo-x/image-y:1.0' not found.

X Creating Revision... Image 'us-east1-docker.pkg.dev/proj-a/repo-x/image-y:1.0' not found.

. Routing traffic...

Deployment failed

ERROR: (gcloud.run.services.replace) Image 'us-east1-docker.pkg.dev/proj-a/repo-x/image-y:1.0' not found.

我可以看到该图像,我已将控制台中写入的 URL 粘贴到我的 yaml 中,以确保前几天工作正常。

为什么 Cloud 运行 看不到我能看到的图像?

当我输入这个问题时,我想起了我在两个项目之间引入的唯一区别:我将生产配置为 运行 作为用户管理的服务帐户。我这样做是为了允许它访问生产机密(暂存不使用)。

所以我在我的暂存项目中添加了一个新的服务帐户,并赋予它 Secret Manager Secret Accessor 角色,然后通过 YAML 配置为 运行 作为该帐户,然后重新部署并成功。

这对我来说实际上没有任何意义。似乎 a) 与 Artifact Registry 无关 b) 解释它为什么在前几天工作。