开发者社区> 问答> 正文

GKE Cluster无法从GCR Registry中拉出(ErrImagePull)同一个项目(GitLab Kubernetes Integration):为什么?

我在与GCR注册表/图像相同的项目中创建了一个来自GitLab Kubernetes集成的集群(docs:https://about.gitlab.com/solutions/kubernetes )。

当我使用Kubectl(依赖于此项目中GCR注册表中的私有映像)向此群集添加新服务/部署时,GitLab创建的群集中的pod无法从GCR中获取:ErrImagePull。

要明确 - 我不是从GitLab私有注册表中提取的,我试图从与GitLab创建的GKE集群(不应该需要Pull Secret)的同一项目中的GCR注册表中提取。

此项目中的其他群集(从GCP控制台创建)可以正确访问相同的图像,因此我的想法是通过API(在本例中为GitLab)创建的群集与从GCP控制台创建的群集之间存在一些差异。

我希望有人在过去遇到这种情况 - 或者可以解释可能导致问题的服务帐户等的差异。

我将尝试创建一个服务帐户并手动授予它Project Viewer角色,看看是否能解决问题。

更新:手动配置的服务帐户未解决问题。

注意:我正在尝试将图像拉入Cluster NOT而不是在群集上运行的GitLab Runner。IE浏览器。我想要一个单独的服务/部署与我的GitLab基础架构一起运行。

展开
收起
k8s小能手 2019-01-09 13:51:41 3180 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    默认情况下,由GitLab-Ci的Kubernetes Integration创建的群集创建的群集节点是使用最小的Google云服务权限(范围)创建的。

    您可以从群集的GCP控制台仪表板直观地看到这一点,向下滚动到权限部分并查找“存储”:
    这实质上意味着在GitLab-Ci Kubernetes集成群集中运行的节点将不具有从GCR注册表中提取图像所需的默认GCR注册表(只读)权限。

    这也意味着(据我所知),即使您授予服务帐户正确访问GCR注册表,它仍然无法正常工作 - 不完全确定我正确设置了我的服务帐户,但我相信我做到了。

    如何修复权限
    基本上你有两个选择。第一个是创建一个集群(即在GitLab Kubernetes集成之外),然后通过遵循手册“连接到现有集群”的方向重新连接您的GitLab项目到THAT集群:https:// gitlab.com/help/user/project/clusters/index#adding-an-existing-kubernetes-cluster

    第二个选项是修改您的权限,但这更复杂。

    2019-07-17 23:24:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像