如何使用GitLab管理的Kubernetes集群从私有项目的镜像注册表中拉出 [英] How to pull from private project's image registry using GitLab managed Kubernetes clusters
问题描述
GitLab提供管理Kubernetes集群,包括(例如)创建命名空间、添加一些令牌等。在GitLab CI作业中,您可以直接使用$KUBECONFIG
变量联系集群,例如使用HELM创建部署。只要GitLab项目是公开的,因此由GitLab项目的图像注册表托管的Docker图像是可公开访问的,这就像一个魔咒。
但是,在处理私人项目时,Kubernetes当然需要ImagePullSecret
来验证GitLab的镜像注册表以检索镜像。据我所知,GitLab不会自动为存储库访问提供ImagePullSecret
。
因此,我的问题是:在GitLab托管部署环境中的Kubernetes部署中,访问私有GitLab存储库的映像存储库的最佳方式是什么?
在我看来,以下是它们不符合条件/最佳的可能性和原因:
- 永久性
ImagePullSecret
由GitLab提供:在GitLab管理的Kubernetes集群上进行部署时,GitLab向部署脚本(如Helm Chart或kubectl apply -f manifest.yml
)提供a list of variables。据我所见(不能),有很多东西,如ServiceAccount和Token等,但没有ImagePullSecret-也没有启用ImagePullSecret创建的配置选项。 - 使用
$CI_JOB_TOKEN
:在使用GitLab CI/CD时,GitLab提供了一个名为$CI_JOB_TOKEN
的变量,用于在作业执行时将Docker镜像上传到注册表。此内标识在作业完成后过期。它可以与helm install --wait
结合使用,但是当对还没有映像的新节点进行重新调度时,令牌将过期,该节点将无法再下载映像。因此,这仅在部署应用程序的时刻有效。 - 手动创建ImagePullSecret并将其添加到
Deployment
或默认ServiceAccount
:*这是一个手动步骤,必须为每个单独的项目重复,非常糟糕-我们正在尝试自动化/GitLab管理的Kubernetes群集旨在避免任何手动步骤。` - 其他,但我不知道。
那么,在这几点中有一点我说错了吗?我是否在此列表中缺少合格选项?
再说一遍:这一切都是关于与GitLab的";Managed Cluster&qot;功能的无缝集成。我知道如何将GitLab中的令牌作为ImagePullSecrets添加到Kubernetes中,但我想知道如何使用托管群集功能自动执行此操作。
推荐答案
还有另一种方法。您可以在容器运行时配置中烘焙ImagePullSecret。docker、tainerd或CRI-O(无论您使用什么)
Docker
以root身份运行
docker login <your-private-registry-url>
。则应创建/更新文件/root/.docker/config.json
。将其放入所有Kubernetes节点中,并确保您的kubelet以root身份运行(通常如此)。Some background info。文件内容应如下所示:
{ "auths": { "my-private-registry": { "auth": "xxxxxx" } }, "HttpHeaders": { "User-Agent": "Docker-Client/18.09.2 (Linux)" } }
容器d
- Configure your
containerd.toml
文件,如下所示:[plugins.cri.registry.auths] [plugins.cri.registry.auths."https://gcr.io"] username = "" password = "" auth = "" identitytoken = ""
CRI-O
- 在crio.conf文件中指定
global_auth_file
选项。
✌️
这篇关于如何使用GitLab管理的Kubernetes集群从私有项目的镜像注册表中拉出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!