我正在尝试将我的GKE集群配置为从同一项目中的私有GCR回购中提取。我没有使用OAuth作用域,但已将最低权限服务帐户与默认节点池相关联,并为其提供了roles/storage.objectViewer
权限。
但是,在尝试访问此图像时,我仍然收到以下信息:
Failed to pull image "eu.gcr.io/<project>/<image>": rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
我是否还需要配置imagePullSecrets
,或者roles/storage.objectViewer
权限是否足够?
此问题的根本原因是没有在群集实例上设置访问(OAuth(作用域,从而阻止服务帐户按预期工作。
来自GCP关于计算服务帐户的文档:
必须在实例上设置访问作用域才能授权访问
创建虚拟机实例时,不能仅在服务帐户上设置IAM角色并省略访问作用域。服务帐户的访问级别由访问作用域和IAM角色的组合决定,因此您必须同时配置访问范围和IAM角色,才能使服务帐户正常工作。
访问GCR中的私有映像时所需的最小作用域可以在此处找到,这些作用域的含义可以在此处发现。然后,可以按照此处的说明创建集群节点的最低权限服务帐户。
如本文所述,一种替代方案是仅向授权访问所有云平台服务的集群节点授予https://www.googleapis.com/auth/cloud-platform
作用域,然后限制通过节点服务帐户上的IAM角色进行访问。
通过如上所述配置集群节点,imagePullSecrets
不需要在同一项目中从GCR中提取私有映像。