GitLab Runner无法克隆,无法获得颁发者证书

时间:2019-02-21 08:37:39

标签: kubernetes gitlab gitlab-ci gitlab-ci-runner kubernetes-helm

我有一个由GKE掌舵的gitlab运行程序,我已经注册了该运行程序。

当我触发管道时,流道运行失败并出现此错误

shouldComponentUpdate

我看到许多解决方案都说我可以将ssl_verify设置为false。 但是我的跑步者是由舵手安装的,我没有触摸跑步者的config.toml。 我不知道该怎么解决。请帮助我。

我还为跑步者添加了证书 enter image description here enter image description here

3 个答案:

答案 0 :(得分:1)

您需要使用gitlab-runner的名称空间中的证书内容创建一个Kubernetes Secret。该秘密将用于填充gitlab-runner中的/ etc / gitlab-runner / certs目录。

在那之后,您需要refer在values.yaml掌舵图中的秘密名称:

## Set the certsSecretName in order to pass custom certficates for GitLab Runner to use
## Provide resource name for a Kubernetes Secret Object in the same namespace,
## this is used to populate the /etc/gitlab-runner/certs directory
## ref: https://docs.gitlab.com/runner/configuration/tls-self-signed.html#supported-options-for-self-signed-certificates
##
 certsSecretName: <name_of_your_secret>

gitlab文档中的更多信息。

答案 1 :(得分:0)

由于未修复bug #3968,因此从未使用所提供的ca证书。

一种解决方法是,在用于执行HELM图表的ca.crt中明确引用运行容器的config.tomlvalues.yaml用户空间路径:

envVars:
  - name: CI_SERVER_TLS_CA_FILE
    value: /home/gitlab-runner/.gitlab-runner/certs/ca.crt
  - name: CONFIG_FILE
    value: /home/gitlab-runner/.gitlab-runner/config.toml

答案 2 :(得分:0)

我遇到了同样的问题,就我而言,事实证明我构造的证书链错误。这些是验证您正在使用正确的证书文件的步骤。

首先,创建具有完整证书链(服务器证书,中间CA和根CA)的串联PEM文件。最好的方法是为每个证书有一个单独的文件,以便您可以在串联之前用openssl verify验证链是否正确:

openssl verify -CAfile USERTrustRSACA.crt -untrusted SectigoRSAOrganizationValidationSecureServerCA.crt server.crt
server.crt: OK 

如果您收到诸如error 20 at 1 depth lookup:unable to get local issuer certificate之类的错误消息,则意味着您没有正确的证书集。如果您像我一样尝试使用证书中的CA Issuers - URI:http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt字段自己下载CA证书,则可能会发生这种情况。

一旦您能够使用openssl在本地验证证书链,就可以将所有内容合并到一个文件中

cat server.crt SectigoRSAOrganizationValidationSecureServerCA.crt USERTrustRSACA.crt > gitlab.my.domain.com.crt

文件必须与服务器的FQDN相匹配。

现在您可以在GitLab服务器上安装此证书:

  • gitlab.my.domain.com.crt复制到您的GitLab服务器/etc/gitlab/ssl(证书专用密钥也必须存在)
  • sudo gitlab-ctl reconfigure
  • sudo gitlab-ctl hup nginx

然后使用

验证更改是否到位
openssl s_client -connect gitlab.my.domain.com:443 # look for "Certificate chain"

然后,您可以按照Providing a custom certificate for accessing GitLab中的步骤进行操作:

kubectl -n gitlabrunner delete secret gitlab-my-domain-com-cert
kubectl -n gitlabrunner create secret generic gitlab-my-domain-com-cert --from-file=gitlab.my.domain.com.crt
helm install --namespace gitlabrunner --set gitlabUrl=https://gitlab.my.domain.com --set runnerRegistrationToken=xxxxxxxxx --set logLevel=debug --set certsSecretName=gitlab-my-domain-com-cert gitlab-runner gitlab/gitlab-runner