我使用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.crt
和var/lib/origin/openshift.local.config/master/ca-bundle.crt
,但这并未改变任何内容。
但请注意,我不需要在/etc/docker/certs.d / ...中拥有此根证书,以便直接使用docker login my.registry.net
我已附加
答案 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添加到所有主机上。