连接GitLab和Kubernetes集群

介绍了在GitLab 10.1中。

通过几个步骤将您的项目连接到谷歌Kubernetes Engine (GKE)或现有的Kubernetes集群。

概述

通过与项目关联的Kubernetes集群,您可以使用回顾应用程序,部署你的应用程序,运行你的管道,以及更多,以一种简单的方式。

在向项目中添加新集群时,有两个选项;或者将您的帐户与谷歌Kubernetes Engine (GKE)关联,以便您可以创建新集群从GitLab内部,或提供凭证给现有的Kubernetes集群

通过GitLab添加并创建一个新的GKE集群

注意:注意:你需要主人权限及以上,以进入Kubernetes页面。

在进行操作前,请确保满足以下要求:

  • 谷歌认证集成必须在GitLab实例级启用。如果不是这样,请让您的GitLab管理员启用它。
  • 您关联的谷歌帐户必须具有GKE上管理集群的权限。这就意味着a计费帐户必须设置,您必须有权限访问它。
  • 你必须有师父权限为了能够访问Kubernetes页面。
  • 你一定有云计费API启用
  • 你一定有资源管理器API

如果以上所有要求都得到满足,您可以继续创建并添加一个新的Kubernetes集群,该集群将托管在GKE上到您的项目:

  1. 导航到您的项目CI/CD > Kubernetes页面。
  2. 点击添加Kubernetes集群
  3. 点击与GKE一起创建
  4. 连接您的谷歌帐户,如果您还没有这样做,请单击用谷歌登录按钮。
  5. 填写所请求的值:
    • 集群名称(必选)-您希望给予集群的名称。
    • GCP项目ID(必需)-您在GCP控制台中创建的项目的ID,该项目将承载Kubernetes集群。这必须与项目名称混淆。了解更多谷歌云平台项目
    • - - -集群将在该目录下创建。
    • 节点数量—您希望集群拥有的节点数量。
    • 机器类型- - -机器类型集群将基于的虚拟机实例。
    • 环境范围- - -相关的环境到这个集群。
  6. 最后,点击创建Kubernetes集群按钮。

过了一会儿,应该创建了集群。如果出了问题,你会收到通知。

现在可以继续安装一些预定义的应用程序,然后启用集群集成。

添加已存在的Kubernetes集群

注意:注意:你需要主人权限及以上,以进入Kubernetes页面。

向项目中添加一个现有的Kubernetes集群:

  1. 导航到您的项目CI/CD > Kubernetes页面。
  2. 点击添加Kubernetes集群
  3. 点击添加已有的Kubernetes集群并填写细节:
    • Kubernetes集群名称(必选)-您希望给予集群的名称。
    • 环境范围(要求)相关的环境到这个集群。
    • API的URL(必需)-这是GitLab用来访问Kubernetes API的URL。Kubernetes公开了几个api,我们想要的“基础”URL对所有api都是通用的,例如,https://kubernetes.example.com而不是https://kubernetes.example.com/api/v1
    • CA证书(可选)-如果API使用自签名TLS证书,还需要包含ca.crt内容在这里。
    • 令牌- GitLab使用服务令牌对Kubernetes进行身份验证,这些令牌的作用域是特定的名称空间.如果您还没有服务令牌,可以使用Kubernetes文档创造一个。中查看或创建服务令牌Kubernetes仪表板(在配置>秘密).
    • 项目名称空间(可选)-以下适用:
      • 默认情况下你不需要填写;如果将其留空,GitLab将为您创建一个。
      • 每个项目都应该有一个唯一的名称空间。
      • 项目名称空间不一定是秘密的名称空间,如果您使用的是具有更广泛权限的秘密,比如来自的秘密默认的
      • 你应该使用默认的作为项目名称空间。
      • 如果您或其他人专门为项目创建了一个秘密,通常具有有限的权限,秘密的名称空间和项目名称空间可能是相同的。
  4. 最后,点击创建Kubernetes集群按钮。

过了一会儿,应该创建了集群。如果出了问题,你会收到通知。

现在可以继续安装一些预定义的应用程序,然后启用Kubernetes集群集成。

安全影响

警告:重要的是:整个集群的安全性是基于一个模型开发人员都是可信的,所以应该只允许受信任的用户控制您的集群

默认集群配置授予对成功构建和部署容器化应用程序所需的广泛功能的访问。记住,集群上运行的所有应用程序都使用相同的凭据。

当GitLab创建集群时,它启用并使用遗留的集群基于属性的访问控制.更新的RBAC中支持授权将来的版本

GitLab运行程序的安全性

GitLab跑步者有特权模式默认启用,允许他们执行特殊命令和在Docker中运行Docker。需要此功能来运行一些汽车DevOps就业机会。这意味着容器正在特权模式下运行,因此,您应该了解一些重要的细节。

特权标志将所有功能赋予正在运行的容器,而容器又可以执行主机所能执行的几乎所有操作。了解与执行相关的固有安全风险码头工人运行对任意图像的操作,因为它们实际上具有根访问权限。

如果不想在特权模式下使用GitLab Runner,首先确保没有通过应用程序安装它,然后使用跑步者头盔图手动安装。

安装应用程序

GitLab为各种应用程序提供了一键式安装,这些应用程序将直接添加到您配置的集群中。这些应用程序是需要的回顾应用程序而且部署

应用程序 GitLab版本 描述
舵舵柄 10.2 + Helm是Kubernetes的包管理器,需要安装所有其他应用程序。当你试图安装一个不同的应用程序时,它会作为一个依赖项自动安装。它被安装在集群中自己的pod中,可以运行安全环境下的CLI命令。
入口 10.2 + Ingress可以提供负载平衡、SSL终止和基于名称的虚拟主机。它可以作为应用程序的web代理,如果你想使用它,它是很有用的汽车DevOps或者部署你自己的网络应用。
普罗米修斯 10.4 + Prometheus是一个开源的监控和警报系统,用于监控已部署的应用程序
GitLab跑步 10.6 + GitLab Runner是一个开源项目,用于运行作业并将结果发送回GitLab。它与…结合使用GitLab CI / CDGitLab提供的开源持续集成服务可以协调这些作业。当通过应用程序安装GitLab Runner时,它将运行特权模式默认情况下。确保你读了安全影响在这样做之前。

获取外部IP地址

注意:注意:您需要在集群中安装负载均衡器,以便通过以下步骤获取外部IP地址。可以使用入口应用程序

为了发布web应用程序,首先需要找到与负载均衡器相关联的外部IP地址。

让GitLab获取IP地址

介绍了在GitLab 10.6中。

如果你安装了Ingress通过应用程序,您应该会在几分钟内在同一页面上看到Ingress IP地址。如果您没有看到这个,那么GitLab可能无法确定入口应用程序的IP地址,在这种情况下,您应该手动确定它。

手动确定IP地址

如果集群在GKE上,则单击谷歌Kubernetes引擎链接到高级设置,或直接前往谷歌Kubernetes引擎仪表盘并选择适当的项目和集群。然后点击连接并执行gcloud命令,或使用云壳

如果集群不在GKE上,请按照Kubernetes提供商的特定说明进行配置kubectl有合适的资历。

如果你安装了Ingress通过应用程序,执行以下命令:

库贝特尔得到SVC——名称空间gitlab-managed-apps ingress-nginx-ingress-controller- ojsonpath”{.status.loadBalancer.ingress[0]。ip}’

否则,可以列出所有负载均衡器的IP地址:

库贝特尔得到SVC——所有名称空间- ojsonpath{range.items [? (@.status.loadBalancer.ingress)]} {.status.loadBalancer.ingress[*]。ip}’

输出为集群的外部IP地址。然后可以使用此信息设置DNS条目和转发规则,以允许外部访问已部署的应用程序。

使用静态IP

默认情况下,集群的负载均衡器会关联一个临时外部IP地址。如果你将临时IP与你的DNS和IP变化相关联,你的应用程序将无法被访问,你必须再次更改DNS记录。为了避免这种情况,您应该将其更改为静态保留IP。

阅读如何在GKE中提升临时外部IP地址。

将DNS指向集群IP

设置静态IP后,应该将其关联到通配符DNS记录,以便能够访问您的应用程序。这在很大程度上取决于你的域名提供商,但如果你不确定,只需创建一个A记录与通配符主机,如* .example.com。

设置环境范围

注意:注意:这只适用于GitLab溢价你可以添加多个Kubernetes集群。

当向项目中添加多个Kubernetes集群时,需要使用环境范围对它们进行区分。环境范围关联集群和环境在1:1的关系中类似于特定于环境的变量工作。

默认环境范围为,这意味着所有作业(无论其环境如何)都将使用该集群。每个范围只能由项目中的单个集群使用,否则将出现验证错误。此外,没有环境关键字集的作业将无法访问任何集群。


例如,假设一个项目中存在以下Kubernetes集群:

集群 环境范围
发展
暂存 分期/ *
生产 生产/ *

并设置以下环境.gitlab-ci.yml

阶段-测验-部署测验阶段测验脚本sh测试部署到登台阶段部署脚本使部署环境名字分期/ $ CI_COMMIT_REF_NAMEurlhttps://staging.example.com/部署到生产环境阶段部署脚本使部署环境名字生产/ $ CI_COMMIT_REF_NAMEurlhttps://example.com/

结果将是:

  • 开发集群将用于“测试”作业。
  • 登台集群将用于“部署到登台”作业。
  • 生产集群将用于“部署到生产”作业。

多个Kubernetes集群

介绍了GitLab溢价10.3.

使用GitLab Premium,您可以将多个Kubernetes集群关联到您的项目。这样你就可以为不同的环境拥有不同的集群,比如开发、登台、生产等。

只需添加另一个集群,就像您第一次所做的那样,并确保设置环境范围这将使新集群与其他集群区别开来。

部署变量

Kubernetes集群集成公开了以下内容部署变量在GitLab CI/CD构建环境中。

变量 描述
KUBE_URL 等于API URL。
KUBE_TOKEN Kubernetes令牌。
KUBE_NAMESPACE 如果没有指定Kubernetes名称空间,则会自动生成。默认值为< project_name > - < project_id >.如果需要,您可以覆盖它以使用不同的KUBE_NAMESPACE变量将接收默认值。
KUBE_CA_PEM_FILE 仅在指定自定义CA包时才显示。包含PEM数据的文件路径。
KUBE_CA_PEM 弃用)仅当指定了自定义CA包时。PEM原始数据。
KUBECONFIG 包含的文件的路径kubeconfig对于这个部署。如果指定,将嵌入CA包。

启用或禁用Kubernetes集群集成

成功添加集群信息后,您可以启用Kubernetes集群集成:

  1. 单击“启用/禁用”开关
  2. 打击保存以便更改生效

现在可以开始使用Kubernetes集群进行部署了。

要禁用Kubernetes集群集成,请遵循相同的步骤。

移除Kubernetes集群集成

注意:注意:你需要主人权限和以上,以删除Kubernetes集群集成。

注意:注意:当您删除一个集群时,您只是删除了它与GitLab的关系,而不是集群本身。要删除集群,可以访问GKE仪表板或使用kubectl

要从项目中删除Kubernetes集群集成,只需单击删除集成按钮。然后,您将能够按照步骤再次添加Kubernetes集群。

你可以从Kubernetes集成中得到什么

以下是如果您启用了Kubernetes集成,您可以使用GitLab做的事情。

部署董事会

可以在GitLab溢价

GitLab的部署板提供了每个CI的当前运行状况和状态的统一视图环境运行在Kubernetes上,显示部署中的pods的状态。开发人员和其他队友可以在他们已经使用的工作流中逐个荚地查看推出的进度和状态,而不需要访问Kubernetes。

>详细信息部署单板

金丝雀的部署

可以在GitLab溢价

利用Kubernetes的Canary部署在部署板中可视化您的金丝雀部署,而不需要离开GitLab。

>阅读更多关于金丝雀部署

Kubernetes监控

自动检测和监控Kubernetes指标。自动监控NGINX入口也支持。

>阅读更多关于Kubernetes监控

汽车DevOps

自动DevOps自动检测、构建、测试、部署和监视应用程序。

为了充分利用自动DevOps(自动部署、自动审查应用程序和自动监控),你需要启用Kubernetes项目集成。

>阅读更多关于自动DevOps

网络终端

注意:注意:在GitLab 8.15中引入。您必须是项目所有者终端的使用权限。支持仅限于环境的第一个pod中的第一个容器。

启用后,Kubernetes服务会添加网络终端支持你的环境.这是基于执行在Docker和Kubernetes中发现的功能,所以你在现有的容器中获得一个新的shell会话。要使用此集成,您应该使用上面的部署变量部署到Kubernetes,确保您创建的任何pod都带有标签应用= $ CI_ENVIRONMENT_SLUG.GitLab将完成其余的工作!

Baidu
map