Предоставить SSL-сертификат для dockerd для собственного реестра Docker - PullRequest
0 голосов
/ 24 августа 2018

как предоставить собственный корневой сертификат CA и сертификат SSL-клиента (cert + key) для dockerd в конвейере gitlab-ci для собственного реестра docker?

У меня есть виртуальная машина (CentOS 7) и установлены докер и gitlab-runner. Бегун регистрируется как docker:dind. Настройка работает нормально, но у меня проблемы с подключением к моему собственному реестру докера, который имеет сертификат от моего собственного центра сертификации, но также использует клиентский SSL-сертификат . Когда я передаю dockerd аргумент --insecure-registry=gitlab.mazel.tov:4567, он не проверяет ЦС, но я все еще не знаю, как предоставить клиентский 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, но опция о сертификатах предназначена только для сокетов док-станции, а настройки SSL - для реестра докеров.

/ и т.д. / gitlab-бегун / config.toml * ** 1022 тысяча двадцать один * [[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.

/ и т.д. / gitlab / gitlab.rb

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

Сертификаты работают нормально на моей машине и на другом сервере, у меня просто проблемы с его реализацией с помощью gitlab-ci pipe ...

Когда я тестирую docker: dind на моем mac и монтирую сертификаты, он работает нормально, так что проблема только в конвейере 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 **
...