如何为私有 GKE 集群启用 Gitlab CI/CD?

Posted

技术标签:

【中文标题】如何为私有 GKE 集群启用 Gitlab CI/CD?【英文标题】:How to enable Gitlab CI/CD for Private GKE cluster? 【发布时间】:2020-07-13 07:08:32 【问题描述】:

我想设置 Gitlab CI/CD 的 AutoDevops 功能,为此我正在尝试将现有的 kubernetes 集群设置为我的环境。

但是,Gitlab 需要用于访问 Kubernetes API 的 Kubernetes Master API URL。 Kubernetes 公开几个 API,我们想要所有这些 API 通用的“基本”URL, 例如,https://kubernetes.example.com 而不是 https://kubernetes.example.com/api/v1。 我们将通过运行以下命令获取 API URL:

kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ print $NF

返回 https://

在我的情况下,我有一个私人 IP 是 https://172.10.1.x

没有任何文档可以帮助为私有 GKE 集群设置 gitlab CI。

如何设置 gitlab 以借助正在运行的 VM 实例或 pod 的服务 IP 访问我的 kubernetes master?或者如果有任何解决方案/变通方法的建议可以实现这一点,请提供帮助。

Add Existing GKE cluster as Environment

【问题讨论】:

嗨,请检查this answer。它解决了一些不同的问题,但与您的问题有关。 Yasen,感谢您的回复,这个答案也很有用,因为我还必须设置 Gitlab 跑步者。我可以通过哪些方式访问 Gitlab ci 的 k8s 主 API。请检查我分享的链接。 还有其他解决方法吗? 【参考方案1】:

现在(2020 年 9 月)有替代方案,但它不是免费的(仅限 GitLab.com Premium/Ultimate),在 14.5+(2021 年 11 月)中免费。

见GitLab 13.4

GitLab Kubernetes 代理简介

GitLab 的 Kubernetes 集成长期以来无需手动设置即可部署到 Kubernetes 集群。许多用户都喜欢这种易用性,而另一些用户则遇到了一些挑战。

当前的集成要求您的集群对 Internet 开放,以便 GitLab 访问它。对于许多组织来说,这是不可能的,因为出于安全、合规或监管目的,他们必须锁定其集群访问权限。为了解决这些限制,用户需要在 GitLab 之上创建自定义工具,否则他们无法使用该功能。

今天,我们发布了 GitLab Kubernetes 代理:一种部署到 Kubernetes 集群的新方法。代理在您的集群内部运行,因此您无需将其打开到 Internet。代理通过从 GitLab 中提取新更改来编排部署,而不是 GitLab 将更新推送到集群。无论您使用哪种 GitOps 方法,GitLab 都能满足您的需求。

请注意,这是代理的第一个版本。目前,GitLab Kubernetes Agent 具有配置驱动的设置,并支持通过代码进行部署管理。一些现有的 Kubernetes 集成功能,例如 Deploy Boards 和 GitLab Managed Apps,尚不受支持。 Our vision 将最终实现这些功能,并提供与代理的新的以安全和合规为中心的集成。

https://about.gitlab.com/images/13_4/gitops-header.png -- 介绍 GitLab Kubernetes 代理

请参阅 Documentation 和 Issue。


另见GitLab 13.5(2020 年 10 月)

使用 Omnibus GitLab 安装 GitLab Kubernetes 代理

上个月,我们为使用 Helm 安装的自我管理 GitLab 实例引入了 GitLab Kubernetes Agent。

此版本增加了对official Linux package 的支持。

在这个新的 Kubernetes 集成中,代理通过从 GitLab 中提取新更改来编排部署,而不是 GitLab 将更新推送到您的集群。

您可以了解更多关于 how the Kubernetes Agent works now 和 check out our vision 的信息,以了解即将推出的内容。

请参阅 Documentation 和 Issue。


GitLab 13.11(2021 年 4 月)证实了这一点:

GitLab Kubernetes 代理可在 GitLab.com 上获得

GitLab Kubernetes 代理终于在 GitLab.com 上可用。通过使用代理,您可以从快速、基于拉取的集群部署中受益,同时 GitLab.com 管理代理的必要服务器端组件。

GitLab Kubernetes 代理是 GitLab 的 Kubernetes 集成的核心构建块。 目前基于代理的集成支持基于拉取的部署和网络安全策略集成和警报,并且很快也将获得对基于推送的部署的支持。

与传统的基于证书的 Kubernetes 集成不同,GitLab Kubernetes 代理不需要向 GitLab 开放您的集群,并允许在集群内围绕 GitLab 的功能进行微调的 RBAC 控制。

参见Documentation 和issue。


见GitLab 14.5(2021 年 11 月)

GitLab Kubernetes 代理在 GitLab Free 中可用

将 Kubernetes 集群与 GitLab Kubernetes Agent 连接可简化集群应用程序的设置,并支持将 GitOps 安全部署到集群。

最初,GitLab Kubernetes Agent 仅适用于高级用户。

在我们对开源精神的承诺中,我们将 GitLab Kubernetes 代理和 CI/CD 隧道的核心功能移至 GitLab Free。 我们希望这些开源功能能够吸引许多没有专门的基础架构团队和对集群管理有严格要求的用户。 作为 GitLab Premium 产品的一部分,高级功能仍然可用。

参见Documentation 和Epic。

【讨论】:

非常感谢。如果成功了,我会调查并更新你☺️ @Chronograph3r GitLab 13.11 看起来很有希望。请参阅上面我编辑的答案。 非常感谢这位朋友,感激不尽

以上是关于如何为私有 GKE 集群启用 Gitlab CI/CD?的主要内容,如果未能解决你的问题,请参考以下文章

在创建 GKE 集群时启用自动扩缩

jinkens+gitlab针对k8s集群实现CI/CD

如何为 Gitlab 运行器启用通过 SSH 克隆?

Docker 构建失败 - 带有 GKE 的 Gitlab CI。无法通过 tcp://localhost:2375 连接到 Docker 守护程序。 docker 守护进程是不是正在运行?

使用 terraform 将公共 GKE 更改为私有 GKE 集群

如何建立从GAE(具有公共访问权限)到私有GKE集群的安全连接。