Openshift:使用证书从远程安全docker注册表中提取图像时出错

时间:2017-01-27 09:44:48

标签: openshift kubernetes docker-registry openshift-origin

我使用Openshift起源的一体化VM。 我正在尝试使用图像流从私有的安全注册表中提取图像。这是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                                                             

我已将证书复制到vagrant机器并重新启动了docker守护程序,但问题仍然存在。我没有找到任何关于如何正确添加证书的文档,所以我只是将它们放在通常的docker文件夹中。

使这项工作适当的方法是什么?

更新以回复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.crtvar/lib/origin/openshift.local.config/master/ca-bundle.crt,但这并未改变任何内容。 但请注意,我不需要在/etc/docker/certs.d / ...中拥有此根证书,以便直接使用docker login my.registry.net

登录

我已附加

2 个答案:

答案 0 :(得分:1)

我无法发表评论,因为我会写一个与rezie几乎相同的答案。

错误:

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

来自OpenShift,而不是来自docker,因此将其添加到/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服务

答案 1 :(得分:0)

尝试将您的CA(与您在my.registry.net目录中使用过的那个相同的一个)附加到Openshift的ca包中(例如/etc/origin/master/ca-bundle.crt。然后重新启动该服务并重新尝试{ {1}}(确保您不包含import-image标志)。

作为参考,请查看Origin项目中的this issue。正如您所提到的,目前无法提供证书以及dockercfg机密,该问题的建议是将CA作为受信任的根CA添加到所有主机上。