前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在GitLab中集成Azure Kubernetes

在GitLab中集成Azure Kubernetes

作者头像
凝神长老
发布2021-03-26 15:03:31
8040
发布2021-03-26 15:03:31
举报

在GitLab中集成Azure Kubernetes

Self-Hosted 的 GitLab 中可以集成 Kubernetes,但是官方只提供了 Amazon AWS 和 Google Cloud 的一键部署按钮,没有提供 Microsoft Azure 的一键集成。

GitLab 的 Kubernetes

因为正好 Azure 还有一些额度,所以研究了一下怎么把 GitLab 连接到 Azure Kubernetes Serveice (AKS) 上。

首先登录 Azure 控制台,确保自己有一个有效的资源组,例如我这里创建了一个名字叫 gitlab-k8s 的资源组,这一步也可以在命令行完成,只不过因为我已经提前创建过了,所以这里补一张图。

在 Azure 创建资源组

接下来进入 Azure Cloud Shell。如果是在非网页版终端上的话就先用 az login 登录,你可能需要先安装 Azure Cloud Shell 的相关工具。

第一步要创建的是基于角色的访问控制(RBAC),启用这个选项可以使 GitLab 在启用 RBAC 的群集上安装应用程序,执行:

az ad sp create-for-rbac --skip-assignment

这个命令会创建一些配置,并允许访问 Azure 的资源。

然后创建 Kubernetes 集群,命令是:

az aks create --resource-group <资源组的名字> --name <集群的名字> --node-count <结点的数量> --generate-ssh-keys

这里资源组的名字换成刚才创建的资源组的名字,集群的名字自己取一个,结点的数量根据自己的情况(以及费用)决定。我把名字命名成 `gitlab-k8s 并决定使用 3 个结点,那么这个命令就是:

az aks create --resource-group gitlab-k8s --name gitlab-k8s --node-count 3 --generate-ssh-keys

这个命令很花时间,耐心等待。

然后执行下面这个命令,集群和资源组的名字同上。

az aks get-credentials -n <集群的名字> -g <资源组的名字>

这时候基本上已经完成了 Azure 上 Kubernetes 的配置了,要把这个服务集成到 GitLab 中。

首先在 GitLab 中填写集群名称,集群名称就是上面 <集群的名字>

环境范围默认是 *,可以根据自己需要修改。

GitLab 集群名称

通过 kubectl 查看 secret 是什么,运行:

kubectl get secrets

记下形如 default-token-<随机字符串> 的内容,然后运行:

kubectl get secrets default-token-<随机字符串> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

运行之后会输出一段 CA 证书,复制全部,保存到一边,后面会需要填写到 GitLab 的 CA 证书中,以便 GitLab 能够连接到 Kubernetes 集群。这段 CA 证书类似于:

-----BEGIN CERTIFICATE-----
MIIE6DCCAtCgAwIBAgIQLYDJG1C9ElHhMT43OppC/DANBgkqhkiG9w0BAQsFADAN
.......
.......
-----END CERTIFICATE-----

填写到 GitLab 配置中的这个位置:

GitLab CA

然后创建一个名为 gitlab-admin-service-account.yaml 的文件,内容是:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: gitlab-admin
    namespace: kube-system

以及一个 gitlab-admin-cluster-role-binding.yaml 的文件,内容是:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-admin
subjects:
  - kind: ServiceAccount
    name: gitlab-admin
    namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-managed-apps-admin
subjects:
  - kind: ServiceAccount
    name: default
    namespace: gitlab-managed-apps
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

运行这两个服务,以确保 GitLab 能够获得访问集群的权限。

kubectl apply -f ./gitlab-admin-service-account.yaml
kubectl apply -f ./gitlab-admin-cluster-role-binding.yaml

等待服务运行,然后为 GitLab 生成服务令牌:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')

Azure 生成的 GitLab 的服务令牌

复制 token: 后面这一段文本,即 eyJh 开头的那一段,填写到 GitLab 配置中的服务令牌处。

GitLab 服务令牌

最后,让我们测试一下集群,并从仪表盘访问这个集群。首先我们需要创建一个角色。

kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

然后可以在 Azure 控制台选择 Kubernetes 进入仪表盘进行一些测试,顺便复制 API 地址。

你可以在网页版登录 Azure 控制台选择 Kubernetes。

Azure 控制台

也可以在命令行输入下面这个命令,在完成身份校验后,控制台会输出一个访问地址,点击地址也可以访问仪表盘(你可能需要登录)。

az aks browse --resource-group <资源组的名字> --name <集群的名字>

获得仪表盘地址

进入仪表盘之后你可以检查一些设置项,然后记录下 API 地址,填写到 GitLab 的配置中。

API 服务器地址

配置 GitLab 的 API 服务器地址

其余选项保留默认就好,你可以根据自己的需要修改。我们需要打开 RBAC。

其余选项保留默认

这里还有一个大坑。

有时候 GitLab 会遇到权限问题 (Permission Errors),为了修复这些权限问题,在 Azure 控制台执行:

kubectl create clusterrolebinding permissive-binding \
 --clusterrole=cluster-admin \
 --user=admin \
 --user=kubelet \
 --group=system:serviceaccounts

大功告成,点击添加 Kubernetes 集群。

添加集群之后就可以在 GitLab 中管理。

GitLab 中管理集群

进入集群,选择“应用”选项卡,安装一些你需要的应用。

GitLab Kubernetes 集群应用

例如 Ingress 和 Cert-Manager 可以自动处理路由和 SSL 证书,推荐安装,但个人使用的话,不要也可以。

Prometheus 监控服务也可以装,不过 GitLab 私有化部署的实例默认有单机 Prometheus 来监控 GitLab 的运行情况,所以不安装问题也不大。

GitLab Runner 是铁定要安装的了,不然费这么大劲来玩 Kubernetes 是为了啥。

JupyterHub 也是一键安装的,像这里的 Jupyter Notebook 这些应用都是使用 GitLab 统一身份认证的。

统一身份认证

那么,使用愉快。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凝神长老和他的朋友们 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在GitLab中集成Azure Kubernetes
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档