13

我正在尝试将我的 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 表单中,我必须输入以下字段:

  1. Kubernetes 集群名称
  2. API 网址
  3. CA 证书 - 证书颁发机构捆绑包(PEM 格式)
  4. 令牌
  5. 项目命名空间(可选,唯一)

我尝试了这些值:

  1. 我将 my<kubernetes-cluster-name>与 azure 上的集群名称和.kube/config文件上的集群名称相匹配。
  2. 我把从文件中https://<resource-group-name+some-hexadecimal-chars>.hcp.westeurope.azmk8s.io:443复制的url 。.kube/config
  3. 我首先尝试certificate-authority-data.kube/config文件中的,但没有奏效,我已经尝试了.kube/config文件中的所有三个 base64 字符串,没有一个有效。
  4. 我从.kube/config文件中放入令牌。
  5. 将此留空,因为它是可选的。

在 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

从昨天开始,我一直在努力让它发挥作用,谷歌搜索了很多,但没有找到任何东西。

我认为问题出在第三个字段 CA 证书上,也许还有其他方法可以从命令行azkubectl.

这里是否有人已经将 Kubernetes 从 GitLab 集成到 Azure AKS 工作?

4

1 回答 1

17

后来我发现文件中的base64字符串certificate-authority-data.kube/config正在将其内容复制到CA CertificateGitLab“添加Kubernetes集群”表单的字段中,它是PEM格式,但是base64编码。

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

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

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

然后我只是将此内容复制到 GitLab“CA 证书”字段中,它就起作用了。

于 2018-06-09T20:10:17.223 回答