使用自定义服务帐户从 GKE 中提取 GCR 中的 Docker 图像

Pull Docker image in GCR from GKE with custom service account

在 Google 云平台上我有两个项目,project-aproject-b

project-a 我有一个 Google 容器注册表 (GCR),在 project-b 我有一个私有 Google Kubernetes Engine (GKE) 集群(带有 Cloud NAT和私人 Google 访问)。在 project-b 中,我有一个 GKE 集群使用的自定义服务帐户(在创建集群时配置,而不是默认的 compute 服务帐户。因此,我也不需要配置访问权限范围)。

根据文档,为了能够从 project-a 中的 GCR 中提取图像,我授予自定义服务帐户 "Storage Object Viewer" 对 project-a 中相应 GCS 存储桶的权限。

但是,我一直收到 GKE 无法拉取镜像的错误。不过,存储桶上的权限似乎还不错:如果我为自定义服务帐户生成一个密钥文件,从中创建一个 kubernetes.io/dockerconfigjson 秘密并将该秘密用作 imagePullSecrets,则该节点能够拉取图片。

我的假设是不需要创建此机密,因为 GKE 节点已经使用了自定义服务帐户。这里出了什么问题?

在官方文档中,没有类似服务帐户访问节点的内容。

文档:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

考虑示例每个部署可能有不同的私有存储库,在这种情况下如果使用官方文档建议的方法是创建秘密并使用它。

我找到了解决方案,看来我仍然需要配置访问范围(存储-读取),即使我使用的是自定义服务帐户。我的假设是,当一个人为节点池使用自定义服务帐户时,不必配置访问范围;并且只允许对 GCR 存储桶的自定义 SA Storage Object Viewer 权限就足够了。