如何将Kubernetes与Gitlab集成

Kar*_*kde 5 gitlab gitlab-ci kubernetes rancher

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

  • Kubernetes集群是通过Rancher 1.6创建的
  • kubectl get all从kubernetes shell 运行给出
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
Run Code Online (Sandbox Code Playgroud)
  • 在Gitlab CI / CD> Kubernetes页面上,我们需要输入3个字段:
    1. API URL
    2. CA证书
    3. 代币

API URL

  • 如果我没有错,我们可以从Kubernetes API网址Rancher Dashboard> Kubernetes> CLI> Generate Config并复制server下网址cluster
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"
Run Code Online (Sandbox Code Playgroud)

CA证书和令牌?

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

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

Something went wrong while installing Helm Tiller

Can't start installation process
Run Code Online (Sandbox Code Playgroud)

这是我的秘密页面的样子 在此输入图像描述

小智 14

我也和kubernetes以及GitLab一起消失了.我已经创建了几个用于测试的单节点"集群",一个用于minikube另一个用户kubeadm.

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

API URL

根据官方文档,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
Run Code Online (Sandbox Code Playgroud)

获取服务令牌

$ kubectl -o json get secret k8s-dashboard-sa-token-XXXXX | jq -r '.data.token' | base64 -d
eyJhbGci    ... sjcuNA8w
Run Code Online (Sandbox Code Playgroud)

获取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-----
Run Code Online (Sandbox Code Playgroud)

验证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
Run Code Online (Sandbox Code Playgroud)