如何将 Kubernetes 与 Gitlab 集成

Posted

技术标签:

【中文标题】如何将 Kubernetes 与 Gitlab 集成【英文标题】:How to integrate Kubernetes with Gitlab 【发布时间】:2018-10-27 07:21:49 【问题描述】:

我正在尝试将 Kubernetes 集群与 Gitlab 集成以使用 Gitlab Review Apps 功能。

Kubernetes 集群是通过 Rancher 1.6 创建的 从 kubernetes shell 运行 kubectl get all 会得到
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
svc/my-service   LoadBalancer   x.x.144.67     x.x.13.89   80:32701/TCP      30d
svc/kubernetes   ClusterIP      10.43.0.1      <none>         443/TCP        30d
在Gitlab CI / CD > Kubernetes页面,我们主要需要输入3个字段:
    API 网址 CA 证书 令牌

API 网址

如果我没记错的话,我们可以从Rancher Dashboard > Kubernetes > CLI > Generate Config 获取Kubernetes API URL,并复制cluster下的server url
apiVersion: v1
kind: Config
clusters:
- cluster:
    api-version: v1
    insecure-skip-tls-verify: true
    server: "https://x.x.122.197:8080/r/projects/1a7/kubernetes:6443"

CA 证书和令牌?

现在的问题是,从哪里获得 CA 证书(pem 格式)和令牌?

我尝试了 Kubernetes 仪表板中所有命名空间中的所有 ca.crttoken 值,但在尝试安装 Helm Tiller 应用程序时,我在 Gitlab 上收到此错误:

Something went wrong while installing Helm Tiller

Can't start installation process

这是我的秘密页面的样子

【问题讨论】:

【参考方案1】:

我也被 kubernetes 和 GitLab 淘汰了。我创建了几个用于测试的单节点“集群”,一个使用minikube,另一个使用kubeadm

我在GitLab forum 上回答了这个问题,但我在下面发布了我的解决方案:

API 网址

根据official documentation,API URL 只有https://hostname:port,没有尾部斜杠

列出秘密

首先,我照常列出秘密:

$ kubectl get secrets
NAME                           TYPE                                  DATA      AGE
default-token-tpvsd            kubernetes.io/service-account-token   3         2d
k8s-dashboard-sa-token-XXXXX   kubernetes.io/service-account-token   3         1d

获取服务令牌

$ kubectl -o json get secret k8s-dashboard-sa-token-XXXXX | jq -r '.data.token' | base64 -d
eyJhbGci    ... sjcuNA8w

获取 CA 证书

然后我使用自定义选择器通过 jq 直接从 JSON 输出获取 CA 证书:

$ kubectl -o json get secret k8s-dashboard-sa-token-XXXXX | jq -r '.data."ca.crt"' | base64 -d - | tee ca.crt
-----BEGIN CERTIFICATE-----
MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
...        ...        ...        ...        ...        ...      
FT55iMtPtFqAOnoYBCiLH6oT6Z1ACxduxPZA/EeQmTUoRJG8joczI0V1cnY=
-----END CERTIFICATE-----

验证 CA 证书

有了手头的 CA 证书,您可以像往常一样verify

$ openssl x509 -in ca.crt -noout -subject -issuer
subject= /CN=kubernetes
issuer= /CN=kubernetes

$ openssl s_client -showcerts -connect 192.168.100.20:6443 < /dev/null &> apiserver.crt

$ openssl verify -verbose -CAfile ca.crt apiserver.crt
apiserver.crt: OK

【讨论】:

我的验证了,但我仍然收到“安装 Helm Tiller 时出现问题” 我的没有验证。确定问题的一些原因或技术是什么?

以上是关于如何将 Kubernetes 与 Gitlab 集成的主要内容,如果未能解决你的问题,请参考以下文章

如何使用证书将 gitlab 连接到现有的 kubernetes 集群

如何将 gitlab ci/cd 变量传递给 kubernetes(AKS) deployment.yaml

如何将 Azure AKS Kubernetes 集群自签名 CA 添加到 GitLab CI/CD Kubernetes 集成?

用于 kubernetes 服务的 gitlab 管道中的证书和服务令牌

如何找到用于 gitlab 集成的 gcloud Kubernetes api url

如何检索 GitLab 托管的 Kubernetes 代理 ClusterAgentID 以删除代理?