Openshift: ошибка извлечения образа из удаленного защищенного реестра докеров с использованием сертификатов

Я использую универсальную VM производства Openshift. Я пытаюсь извлечь изображения из частного безопасного реестра с помощью потока изображений. Это определение ImageStream:

apiVersion: v1                                                                          
kind: ImageStream                                                                       
metadata:                                                                               
  name: my-image-stream                                                                    
  annotations:                                                                          
    description: Keeps track of changes in the application image                        
  name: my-image                                                              
spec:                                                                                   
  dockerImageRepository: "my.registry.net/myproject/my-image"

Репозиторий защищен сертификатом. На моем локальном компьютере они находятся в /etc/docker/certs.d/my.registry.net, и я могу войти в систему с помощью docker login my.registry.net.

Однако, когда я запускаю oc import-image, я получаю следующую ошибку:

The import completed with errors.                                                    

Name:                       my-image                                                    
Namespace:          myproject                                                           
Created:            About an hour ago                                                   
Labels:                     <none>                                                      
Description:                Keeps track of changes in the application image             
Annotations:                openshift.io/image.dockerRepositoryCheck=2017-01-27T08:09:49Z
Docker Pull Spec:   172.30.53.244:5000/myproject/my-image                               
Unique Images:              0                                                           
Tags:                       1                                                           

latest                                                                                  
  tagged from my.registry.net/myproject/my-image                                        

    ! error: Import failed (InternalError): Internal error occurred: Get https://my.registry.net/v2/: remote error: handshake failure
          About an hour ago                                                             

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

Каков правильный способ сделать эту работу?

Обновление в ответ на rezie's ответ:

На моем бродячем ящике нет файла etc/origin/master/ca-bundle.crt. Я нашел следующие файлы ca-bundle.crt:

$ find / -iname ca-bundle.crt
/etc/pki/tls/certs/ca-bundle.crt
##multiple lines like
/var/lib/docker/devicemapper/mnt/something-hash-like/rootfs/etc/pki/tls/certs/ca-bundle.crt
/var/lib/origin/openshift.local.config/master/ca-bundle.crt

Я добавил корневой сертификат к /etc/pki/tls/certs/ca-bundle.crt и к var/lib/origin/openshift.local.config/master/ca-bundle.crt, но это ничего не изменило. Обратите внимание, однако, что мне не нужно иметь этот корневой сертификат в /etc/docker/certs.d/..., чтобы войти в систему напрямую, используя docker login my.registry.net

я добавил


person feob    schedule 27.01.2017    source источник


Ответы (2)


Я не могу комментировать из-за кармы, поэтому я напишу ответ, в котором будет почти то же самое, что и в rezie.

Ошибка:

! error: Import failed (InternalError): Internal error occurred: Get https://my.registry.net/v2/: remote error: handshake failure
      About an hour ago                                                             

Приходит из OpenShift, а не из докера, поэтому добавление его в /etc/docker/certs.d/my.registry.net не предотвращает возникновение ошибки.

Вы должны добавить сертификат CA на уровне ОС, я предполагаю, что шаги по какой-то причине не увенчались успехом, поэтому сделайте это следующим образом:

openssl s_client -connect my.registry.net:443 </dev/null |
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
> /etc/pki/ca-trust/source/anchors/my.registry.net.crt &&
update-ca-trust check && update-ca-trust extract

Наконец проверьте, работает ли он

curl https://my.registry.net/v2

Если это не выдает ошибку сертификата и вы по-прежнему не можете выполнить импорт oc, ​​перезапустите службу atomic-openshift-master-api.

person Juan Luis de Sousa Valadas    schedule 08.02.2017

Попробуйте добавить свой ЦС (тот самый, который, по вашим словам, использовался в каталоге my.registry.net) в пакет ЦС Openshift (например, /etc/origin/master/ca-bundle.crt. Затем перезапустите службу и повторите попытку import-image (убедившись, что вы не включаете флаг --insecure).

Для справки, проверьте эту проблему из проекта Origin. Как вы упомянули, в настоящее время нет возможности предоставлять сертификаты вместе с секретом dockercfg, и в этой проблеме предлагается добавить ЦС в качестве доверенного корневого ЦС на всех хостах.

person rezie    schedule 28.01.2017
comment
Спасибо - к сожалению, это не помогло. Я обновил свой вопрос соответственно - person feob; 29.01.2017
comment
В RHEL другой вариант, который мы попытались, состоял в том, чтобы добавить сертификат в /etc/pki/ca-trust/sources/anchors, запустить update-ca-trust, а затем снова перезапустить мастер(ы). Я не уверен, будет ли это подходящим случаем для варианта VM, но, возможно, стоит попробовать. - person rezie; 31.01.2017