如何将 Azure AKS Kubernetes 集群自签名 CA 添加到 GitLab CI/CD Kubernetes 集成?
How to add an Azure AKS Kubernetes Cluster self-signed CA to GitLab CI/CD Kubernetes integration?
我正在尝试将我的 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 字符串,none成功了。
- 我从
.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
从昨天开始,我就在努力让它发挥作用,google 找了很多,但什么也没找到。
我认为问题出在第 3 个字段,即 CA 证书,也许还有一些其他方法可以从命令行 az
或 kubectl
.
获取此内容
这里有人已经从 GitLab 到 Azure AKS 的 Kubernetes 集成工作了吗?
后来我发现我正在将.kube/config
文件的certificate-authority-data
中的base64字符串的内容复制到GitLab "Add Kubernetes cluster"表单的CA Certificate
字段中,是PEM格式,但是是base64编码的。
PEM 格式已经是证书位的 base64 编码表示,但中间有一些换行符。整个内容在进入 .kube/config
之前再次进行 base64 编码,因此它变成了一个大的 base64 单行字符串。
我只需要对这个大的单行字符串进行 base64 解码(我在 Chrome 的控制台 window 中使用了 javascript atob("....")
),是什么给了我是这样的:
-----BEGIN CERTIFICATE-----
MIIEyDCCArCgAwIBAgIRAOL3N8oMIwWIxcFTZhTkfgMwDQYJKoZIhvcNAQELBQAw
...
...
...
5gP7yoL1peZ+AWjCgcUVZYiItqrBLpWYDgY9g8btYDUIiWlqkmC0+kBaPfwCtckx
cUp3vlwRITrv0mzrxiQjTLTUpEy7EcD+U6IecA==
-----END CERTIFICATE-----
然后我将此内容复制到 GitLab "CA Certificate" 字段中,它起作用了。
我正在尝试将我的 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 字符串,none成功了。 - 我从
.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
从昨天开始,我就在努力让它发挥作用,google 找了很多,但什么也没找到。
我认为问题出在第 3 个字段,即 CA 证书,也许还有一些其他方法可以从命令行 az
或 kubectl
.
这里有人已经从 GitLab 到 Azure AKS 的 Kubernetes 集成工作了吗?
后来我发现我正在将.kube/config
文件的certificate-authority-data
中的base64字符串的内容复制到GitLab "Add Kubernetes cluster"表单的CA Certificate
字段中,是PEM格式,但是是base64编码的。
PEM 格式已经是证书位的 base64 编码表示,但中间有一些换行符。整个内容在进入 .kube/config
之前再次进行 base64 编码,因此它变成了一个大的 base64 单行字符串。
我只需要对这个大的单行字符串进行 base64 解码(我在 Chrome 的控制台 window 中使用了 javascript atob("....")
),是什么给了我是这样的:
-----BEGIN CERTIFICATE-----
MIIEyDCCArCgAwIBAgIRAOL3N8oMIwWIxcFTZhTkfgMwDQYJKoZIhvcNAQELBQAw
...
...
...
5gP7yoL1peZ+AWjCgcUVZYiItqrBLpWYDgY9g8btYDUIiWlqkmC0+kBaPfwCtckx
cUp3vlwRITrv0mzrxiQjTLTUpEy7EcD+U6IecA==
-----END CERTIFICATE-----
然后我将此内容复制到 GitLab "CA Certificate" 字段中,它起作用了。