Я получаю сообщение об ошибке проверки сертификата SSL от сборки Cit gitlab, которая использует docker в docker в архитектуре Python 3.x.Все образы сборки CI основаны на альпийском Linux.
Я настроил тестовое задание CI Python 3.x, которое использует Pytest.Pytest порождает процесс docker-compose в некоторых тестах.Образ архитектуры можно найти в сообщении на форуме gitlab-ci
В тестовом задании gitlab-CI я экспортирую переменные окружения REQUESTS_CA_BUNDLE и SSL_CERT_FILE для ссылки на пользовательский корневой каталог.файл.Я должен установить обе переменные, поскольку tus-py-client использует обе библиотеки request и http.client для запросов http.
Сервис docker-compose, запущенный из pytest, инкапсулирует пользовательский корневой сертификат.Это сервер.
Пользовательский корневой сертификат также включен в образ, используемый заданием сборки CI gitlab, которое запускает pytest.Это клиент.
Я также пытался инкапсулировать корневой сертификат ca в пользовательский образ докера: dind image.Во всех случаях update-ca-Certificates запускался при построении образов.Из того, что я понимаю, я думаю, что контейнерные службы docker-compose будут запускаться из экземпляра docker-in-docker (dind).
Ниже приведен краткий обзор файла .gitlab-ci.yml .
image: <custom devops image encapulating root ca>
stages:
- test
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
SHARED_PATH: ${CI_PROJECT_DIR}/fileserver
POSTGRES_DB: ${PG_DB}
POSTGRES_PASSWORD: ${PG_PASSWORD}
POSTGRES_USER: ${PG_USER}
DATABASE_URL: "postgres://${PG_USER}:${PG_PASSWORD}@postgres:5432/${PG_DB}"
services:
- name: <custom docker:dind image encapsulating ca root cert>
alias: docker
- name: <custom postgres image>
alias: postgres
before_script:
- <setup ssh key for cloning dependent repositories>
- <login to docker registry at registry.gitlab.com>
test:
stage: test
script:
- <clone and generate configuration for docker-compose project>
- pip install -r requirements.txt
- export REQUESTS_CA_BUNDLE=<ca root crt file>
- export SSL_CERT_FILE=<ca root crt file>
- pytest --cov=api --cov-report term-missing --cov-report html:coverage
Насколько я понимаю, корневой сертификат ca должен бытьустанавливается в хранилище сертификатов как клиента, так и сервера.В этом конкретном случае клиент - это тестовое задание CI, а сервер - контейнер nginx.Это вызвано процессом создания докера, порожденным изнутри pytest.
Образ архитектуры доступен на моей публикации на форуме gitlab-ci.
Я получаю исключение ошибки проверки сертификата SSL, ssl.SSLError: Ошибка сертификата [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 847)?Клиент подключается к серверу в экземпляре docker: dind , и процесс рукопожатия завершается с ошибкой.Есть идеи?
Обновление Если я выдаю openssl s_client -connect docker:1081 -CApath /etc/ssl/certs
в тестовом задании сборки CI, чтобы попытаться проверить сертификат, я получаю ошибку проверки: num = 21: невозможно проверитьпервый сертификат и ошибка проверки: num = 20: невозможно получить сертификат локального эмитента.
Я попытался запустить сервисы docker-compose в отдельном экземпляре Ubuntu 16.04 bare metal с корневым сертификатом, установленным с помощью update-CA-сертификаты.Затем я выдал openssl s_client -connect docker:1081 -CApath /etc/ssl/certs
, который успешно подтвердился после добавления * docker 127.0.0.1 в / etc / hosts.Таким образом, сертификат сервера и root ca выглядят нормально.
Почему я получаю сообщения об ошибках 20 и 21 при подключении к определенной службе docker-compose, работающей в docker: dind ?
Обновление 21/12/2018 Исправлено.В образе для тестового задания CI я поместил пользовательский сертификат ca в / usr / local / share / ca-сертификаты .Ранее я помещал сертификат в / usr / local / share / ca-Certificates / подпапку , и он не добавлялся в / etc / ssl / certs / ca-сертификаты.crt после запуска update-ca-сертификаты.После этого я вернулся к фактическому докеру: dind image в .gitlab-ci.yml, и сертификаты все еще были успешно проверены.Так что нет необходимости устанавливать ca root cert в docker: dind.
Сделал чистый клон git в среде разработки.Я исправил некоторые проблемы с require.txt для установки pip и успешно протестирован в среде сборки.Создайте среду, теперь правильно соответствующую среде разработчика!