2016-06-21 7 views
3

Поддерживает ли Docker Swarm поддержку Docker Registry с самозаверяющим сертификатом?Docker Swarm и самозаверяющий регистратор докеров

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

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

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

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

ответ

3

Вам необходимо добавить свой собственный сертификат или личный CA в список доверенных сертификатов на хосте. По какой-то причине докер не использует сертификаты для демона для этой проверки подлинности. Вот команды для 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 увидел в latest documentation, вы также можете добавить сертификаты непосредственно на каждый двигатель докера, скопировав сертификат на /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt. Это позволяет избежать доверия к самозаверяющему ЦС на всей ОС.

+0

Поскольку я запускаю «рой» из контейнеров Docker, есть ли способ, чтобы я мог обновить его с помощью необходимых сертификатов? – luka5z

+0

Вы пытались обновить сертификаты на каждом из хостов? – BMitch

+0

Отлично! Похоже, что требуется «загружать» самозаверяющие сертификаты на каждый узел, который является частью кластера рой. Я по существу выполнил шаги, описанные в официальной документации (https://docs.docker.com/registry/insecure/), «... путем копирования файла domain.crt в /etc/docker/certs.d/ myregistrydomain.com:5000/ca.crt «. , @BMitch, если вы обновите свой ответ, включив свой последний намек, я приму его. – luka5z

0

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

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

Но я сумел обойти:

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

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

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

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

на каждом Docker хозяина и тянуть необходимые изображения.

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

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

PS: Я также должен добавить эти параметры для каждого Docker демона:

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

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

2

есть способ, которым я мог бы обновить его с необходимыми сертификатами?

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

[email protected]:~# 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 

Here is a demo.

Смежные вопросы