我在与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基础架构一起运行。
默认情况下,由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
第二个选项是修改您的权限,但这更复杂。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。