如何将 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
会得到
在GitlabNAME 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
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.crt
和 token
值,但在尝试安装 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 管道中的证书和服务令牌