使用自定义服务帐户从 GKE 中提取 GCR 中的 Docker 图像
Pull Docker image in GCR from GKE with custom service account
在 Google 云平台上我有两个项目,project-a
和 project-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
权限就足够了。
在 Google 云平台上我有两个项目,project-a
和 project-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
权限就足够了。