首页 文章

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

提问于
浏览
10

我正在尝试将我的Azure AKS Kubernetes集群添加到我的GitLab CI / CD Kubernetes集成中 .

运行此命令后,我可以从我的电脑上执行集群上的 kubectl 命令:

az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>

它创建了一个 .kube/config 文件,其内容如下:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <some long base64 string here>
    server: https://<resource-group-name+some-hexadecimal-chars>.hcp.westeurope.azmk8s.io:443
  name: <kubernetes-cluster-name>
contexts:
- context:
    cluster: <kubernetes-cluster-name>
    user: clusterUser_<resource-group-name>_<kubernetes-cluster-name>
  name: <kubernetes-cluster-name>
current-context: <kubernetes-cluster-name>
kind: Config
preferences: {}
users:
- name: clusterUser_<resource-group-name>_<kubernetes-cluster-name>
  user:
    client-certificate-data: <some long base64 string here>
    client-key-data: <some long base64 string here>
    token: <some secret string of hexadecimal chars here>

在GitLab表单中,我必须输入以下字段:

  • Kubernetes群集名称

  • API URL

  • CA证书 - 证书颁发机构捆绑包(PEM格式)

  • 令牌

  • 项目命名空间(可选,唯一)

我试过这些值:

  • 我将 <kubernetes-cluster-name> 与azure上的群集名称和 .kube/config 文件上的群集名称相匹配 .

  • 我把url https://<resource-group-name+some-hexadecimal-chars>.hcp.westeurope.azmk8s.io:443.kube/config 文件中复制了 .

  • 我首先尝试了 .kube/config 文件中的 certificate-authority-data ,但是没有用,我已经尝试了 .kube/config 文件中的所有三个base64字符串,没有一个工作 .

  • 我把 .kube/config 文件中的令牌放了 .

  • 将其留空,因为它是可选的 .

在GitLab中,当我尝试按下按钮 Install 以安装Helm Tiller时,我收到此错误:

Something went wrong while installing Helm Tiller
Can't start installation process. nested asn1 error

有时我会得到这个错误:

Kubernetes error: SSL_connect returned=1 errno=0 state=error: certificate verify failed

我试图让它从昨天开始工作,谷歌很多,没有找到任何东西 .

我认为问题在于第3个字段,即CA证书,也许还有其他方法可以从命令行 azkubectl 获取此内容 .

这里有人从GitLab到Azure AKS的Kubernetes集成吗?

1 回答

  • 12

    我后来发现 .kube/config 文件的 certificate-authority-data 中的base64字符串我将其内容复制到GitLab "Add Kubernetes cluster"形式的 CA Certificate 字段中,它是PEM格式,但是base64编码 .

    PEM格式已经是证书位的base64编码表示,但它在中间有一些换行符 . 整个内容在进入 .kube/config 之前再次进行base64编码,因此它变成了一个很大的base64单行字符串 .

    我只需要对这个大的单行字符串进行base64解码(我在Chrome的控制台窗口中使用了javascript atob("....") ),这给了我这样的东西:

    -----BEGIN CERTIFICATE-----
    MIIEyDCCArCgAwIBAgIRAOL3N8oMIwWIxcFTZhTkfgMwDQYJKoZIhvcNAQELBQAw
    ...
    ...
    ...
    5gP7yoL1peZ+AWjCgcUVZYiItqrBLpWYDgY9g8btYDUIiWlqkmC0+kBaPfwCtckx
    cUp3vlwRITrv0mzrxiQjTLTUpEy7EcD+U6IecA==
    -----END CERTIFICATE-----
    

    然后我只是将这些内容复制到GitLab“CA证书”字段中并且它有效 .

相关问题