1

我有一个在 Google kubernetes 引擎 (GKE) 上运行良好的简单应用程序(基于 python 和烧瓶的 REST api)。我的 CI/CD 设置创建一个 docker 映像,将其推送到 Google 云注册表 (GCR),然后将其部署到 GKE。一切正常。现在,我添加了一个数据库。它将托管在 Google Cloud SQL 上。为了从 kubernetes 访问数据库,我使用谷歌云 sql 代理(作为边车)和谷歌推荐的工作负载身份。

我的问题是,配置云 sql 代理后,我收到此错误:

ImagePullBackOff:无法从注册表中提取图像“gcr.io/xxx-project/xxx-image:xxx-tag”。

云 sql 代理映像已正确加载(我认为是因为它托管在公共注册表中),但不是我的映像,因此 pod 不断崩溃。

我错过了什么?我应该添加 docker 凭据吗?这很奇怪,因为它在设置云代理之前就已经工作了!!

非常感谢您的帮助,

此致

4

1 回答 1

1

我认为这里有一些重要的事情需要理解,那就是 Autopilot 不使用 Workload Identity 或任何与 pod 拉取图像的权限有关的东西。它为您的项目使用默认计算服务帐户。

需要权限来拉取图像的是节点,而不是 Pod。请参阅GCP 文档中有关 Workload Identity 的注释。

注意:即使启用了 Workload Identity,GKE 仍然使用为节点池配置的 Google 服务帐户从镜像注册表中提取容器镜像。如果您遇到 ImagePullBackOff 或 ErrImagePull 错误,请查看故障排除文档。

我也发生了同样的事情,结果发现默认的计算服务帐户已被删除。它恢复了它(使用这些说明Deleted Compute Engine default service account)并授予它 storage.admin 权限,从而解决了问题。

于 2021-07-28T08:23:35.087 回答