【问题标题】:Pull Docker image in GCR from GKE with custom service account使用自定义服务帐户从 GKE 中拉取 GCR 中的 Docker 映像
【发布时间】:2020-05-15 09:54:04
【问题描述】:

在 Google Cloud Platform 上,我有两个项目,project-aproject-b

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

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

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

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

【问题讨论】:

  • 你能分享一下你收到的确切错误吗?
  • @PjoterS 错误消息是:无法提取图像“eu.gcr.io/***/***:latest”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:未经授权:您没有执行此操作所需的权限,并且您的凭据可能无效。要验证您的请求,请按照以下步骤操作:cloud.google.com/container-registry/docs/…
  • 我认为这个问题与 IAM 权限有关。您是否关注了错误消息中的链接?

标签: google-kubernetes-engine google-container-registry


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 应该是可以的,见cloud.google.com/container-registry/docs/…。其次,它确实可以在我拥有的另一个 GKE 集群中工作,这是一个非私有集群
    • 是的,使用 IAM 是可能的,但您必须设置和管理 RBAC 和权限。
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2023-04-06
    • 2021-09-19
    • 2021-03-08
    • 2021-12-04
    • 2021-07-09
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多