我的公司更改了证书颁发机构(以前只有一个 CA,现在我们有一个根 CA 和一个中间 CA)。我成功更改了 GitLab 实例中的配置,并移至运行器(位于 Ubuntu 18.04.5 LTS 上)。我尝试按照GitLab 文档没有成功。
我遵循了默认方法这里上面写着“默认 - 读取系统证书”,所以我将证书(CA 和中间证书)添加到 Ubuntu CA 列表中。一切似乎都正常,因为运行器出现在 GitLab 中。
我开始一份工作并得到:
Running with gitlab-runner 11.5.0 (3afdaba6)
on RUN01 12ccbb74
Using Docker executor with image node:latest ...
Pulling docker image node:latest ...
Using docker image sha256:ab773999a02271b25a9f3bce46018fc3ad46a7f922a5e3e8712b6d1c7087c415 for node:latest ...
Running on runner-12ccbb74-project-73-concurrent-0 via (...)...
00:02
Fetching changes...
00:01
HEAD is now at 60b6860 Update dependency mocha to v9
fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@(...).git/': SSL certificate problem: unable to get issuer certificate
ERROR: Job failed: exit code 1
然后,我在 GitLab 实例上将完整链添加到证书文件,错误变为SSL certificate problem: self signed certificate in certificate chain
。
我的逻辑*:它适用于 Ubuntu,但不适用于 Docker。所以我转向了信任 Docker 和 Kubernetes 执行程序的 TLS 证书部分。
我到目前为止尝试过但没有成功:
- 我将根 CA 证书添加到了
/etc/gitlab-runner/certs/ca.crt
。 - 我还尝试使用包含根 CA 和中间 CA 链的文件。
- 我将其添加
volumes = ["/cache", "/path/to-ca-cert-dir/ca.crt:/etc/gitlab-runner/certs/ca.crt:ro"]
到config.toml
文件中。但我几乎确定我应该/path/to-ca-cert-dir
用某些东西替换它。我只是不知道该用什么替换。
*更新:当我安装 GitLab Runner 时,我遵循使用 Debian/Ubuntu/CentOS/RedHat 的 GitLab 存储库进行安装,所以 Docker/K8s 指令没有意义。我发布了一个回答关于我如何解决这个问题。
答案1
我可以按照第三个选项让它工作针对 GitLab 服务器的自签名证书支持的选项, 说的是:
读取 PEM 证书:GitLab Runner 从预定义文件中读取 PEM 证书(不支持 DER 格式):
当 GitLab Runner 以 root 身份执行时,*nix 系统上为 /etc/gitlab-runner/certs/hostname.crt。
如果您的服务器地址是https://my.gitlab.server.com:8443/,在:/etc/gitlab-runner/certs/my.gitlab.server.com.crt创建证书文件。
因此,我只是将完整的链(GitLab 证书、中间、根)添加到文件名中/etc/gitlab-runner/certs/<gitlab-url>.crt
。使用重新启动服务gitlab-runner restart
,作业正在运行。