Docker Swarm и самоподписанный реестр Docker

Поддерживает ли Docker Swarm использование Реестр Docker с самозаверяющим сертификатом?

Я создал свой кластер на основе шагов из официальной документации Docker, он использует swarm master / узлы, работающие внутри контейнеров.

Он работает хорошо, но как только я пытаюсь войти в свой реестр Docker, я получаю сообщение об ошибке:

$ docker -H :4000 login https://...:443
...
Error response from daemon: Get https://.../v1/users/: x509: certificate signed by unknown authority

Есть ли дополнительная опция, которую нужно установить, например --insecure-registry? Или мне нужно как-то обновить контейнер Docker Swarm?


person luka5z    schedule 21.06.2016    source источник


Ответы (3)


Вам необходимо добавить свой самозаверяющий сертификат или личный ЦС в список доверенных сертификатов на хосте. По какой-то причине докер не использует сертификаты демона для этой аутентификации. Вот команды для хоста Debian:

sudo mkdir -p /usr/local/share/ca-certificates
sudo cp ca.pem /usr/local/share/ca-certificates/ca-local.crt
sudo update-ca-certificates
sudo systemctl restart docker

Перезагрузка докера в конце требуется, чтобы демон перезагрузил сертификаты ОС.

Как luka5z увидел в последней документации, вы также можете добавить сертификаты непосредственно в каждый механизм докеров, копирование сертификата в /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt. Это позволяет избежать доверия к самоподписанному ЦС для всей ОС.

person BMitch    schedule 21.06.2016
comment
Поскольку я запускаю swarm из контейнеров Docker, могу ли я обновить его с помощью требуемых сертификатов? - person luka5z; 21.06.2016
comment
Вы пытались обновить сертификаты на каждом из хостов? - person BMitch; 21.06.2016
comment
Большой! Похоже, что необходимо загрузить самозаверяющие сертификаты на каждый узел, который является частью кластера роя. По сути, я выполнил шаги, описанные в официальной документации, ... путем копирования домена. crt в /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt. . @BMitch, если вы обновите свой ответ, включив последнюю подсказку, я приму ее. - person luka5z; 21.06.2016

есть ли способ обновить его с помощью требуемых сертификатов?

Docker 17.06 принесет команду docker swarm ca (PR 48).
Значение docker swarm ca --rotate будет достаточно.

root@ubuntu:~# docker swarm ca --help

Usage:  docker swarm ca [OPTIONS]

Manage root CA

Options:
      --ca-cert pem-file          Path to the PEM-formatted root CA certificate to use for the new cluster
      --ca-key pem-file           Path to the PEM-formatted root CA key to use for the new cluster
      --cert-expiry duration      Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
  -d, --detach                    Exit immediately instead of waiting for the root rotation to converge
      --external-ca external-ca   Specifications of one or more certificate signing endpoints
      --help                      Print usage
  -q, --quiet                     Suppress progress output
      --rotate                    Rotate the swarm CA - if no certificate or key are provided, new ones will be generated

Вот демонстрация.

person VonC    schedule 21.06.2017

Я тоже столкнулся с твоей проблемой.

Мне не удалось определить основную причину этого или то, что устанавливает это ограничение.

Но мне удалось обходное решение:

если это небезопасно, убедитесь, что вы запускаете каждый демон докера соответственно на каждом хосте.

вы можете найти информацию о том, как изменить параметры демона: https://docs.docker.com/engine/admin/systemd/

например: из моей конф. --insecure-registry <private registry> после этого:

systemctl daemon-reload
systemctl restart docker
docker login <private registry>

на каждом хосте докеров и вытащите необходимые изображения.

после этого у вас есть все изображения, и он больше не будет пытаться их вытащить.

я знаю, что это не лучшее решение :(

PS: Мне также пришлось добавить эти параметры к каждому демону докеров:

--cluster-advertise=<host:ip> --cluster-store=consul://<consul ip:consul port>

без них я не мог запускать контейнеры на разных хостах. Все они работали на одном случайно выбранном хосте.

person Dimitrie Mititelu    schedule 21.06.2016