gpt4 book ai didi

docker - 为自己的 docker 注册表提供 dockerd 的 SSL 证书

转载 作者:行者123 更新时间:2023-12-03 14:29:58 24 4
gpt4 key购买 nike

如何在gitlab-ci管道中为自己的docker注册表提供自己的CA根证书和SSL客户端证书(证书+ key )给dockerd?

我有虚拟机(CentOS 7)并安装了 docker 和 gitlab-runner。运行者注册为 docker:dind 。设置工作正常,但我无法连接到我自己的 docker 注册表,该注册表具有我自己的 CA 的证书,但也在使用 客户端 SSL 证书 。当我将参数 dockerd 传递给 --insecure-registry=gitlab.mazel.tov:4567 时,它​​不会验证 CA,但我仍然不知道如何提供客户端 SSL 证书,并且 pipile 将因此错误而失败。

$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN https://gitlab.mazel.tov:4567
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://gitlab.mazel.tov:4567/v2/: error parsing HTTP 400 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>400 No required SSL certificate was sent</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>No required SSL certificate was sent</center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n"

我在 docker:dind 容器中也有我的证书的文件夹,但是这种方法不适用于 dockerd ?但在我的电脑或服务器上它工作正常。
$ ls -la /etc/docker/certs.d/gitlab.mazel.tov\:4567/
ca.crt
client.cert
client.key

我还探索了 dockerd --help 但有关证书的选项仅适用于 docker 套接字,而 i SSL 配置适用于 docker 注册表。

/etc/gitlab-runner/config.toml
[[runners]]
name = "My Docker Runner"
url = "https://gitlab.mazel.tov"
token = "ac17ab5cfff675fddd059d40a3"
tls-ca-file = "/etc/ssl/certs/myCA.pem"
tls-cert-file = "/etc/gitlab-runner/certs/mazel.tov.pem"
tls-key-file = "/etc/gitlab-runner/certs/mazel.tov.key"
executor = "docker"
[runners.docker]
image = "docker:dind"
privileged = true
disable_cache = false
volumes = ["/cache", "/etc/docker/certs.d:/etc/docker/certs.d"]
shm_size = 0
[runners.cache]

.gitlab-ci.yml
services:
- name: docker:dind
command: ["--insecure-registry=gitlab.mazel.tov:4567"]

variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375/

stages:
- build

before_script:
- ls -la /etc/docker/certs.d/gitlab.mazel.tov\:4567/
- docker info
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN https://gitlab.mazel.tov:4567

build-web:
stage: build
script:
- docker build ...
- docker push ...

我也不喜欢 --insecure-registry 选项。我的 gitlab 服务器在 Nginx 级别上配置了客户端证书。

/etc/gitlab/gitlab.rb
nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/myCA.crt"
nginx['ssl_verify_client'] = "on"

证书在我的机器和其他服务器上工作正常,我只是在用 gitlab-ci 管道实现它时遇到了麻烦......

当我在我的 Mac 上测试 docker:dind 并挂载证书时,它工作正常,所以问题只出在 gitlab-ci 管道中?也许在安装文件夹发生之前加载了 dockerd?
docker run -it --rm --privileged -v ~/.docker/certs.d/:/etc/docker/certs.d/ docker:dind sh
dockerd &
docker login https://gitlab.mazel.tov:4567
** it works **

最佳答案

在 [[runners]] 下尝试此配置

 environment = ["DOCKER_TLS_CERTDIR="]

关于docker - 为自己的 docker 注册表提供 dockerd 的 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com