共计 4027 个字符,预计需要花费 11 分钟才能阅读完成。
本篇内容主要讲解“私有安全 docker registry 授权访问实验分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“私有安全 docker registry 授权访问实验分析”吧!
实验环境
服务器端:使用 registry v2.1 启动容器。
客户端:安装了 Docker 的机器,准备 pull/push 操作
实验条件:
registry 端生成私钥以及证书:
1
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
并启动:
2
1
3
4
5
6
docker run -d -p 5000:5000 --restart=always \
--name registry -v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-v /images/:/var/lib/registry \
registry:2.
1
实验一
测试不安全的访问:
docker 端不存放证书。直接下载镜像
1
docker pull registry.test.com:5000/test-busybox:v1
提示错误:
Error response from daemon: unable to ping registry endpoint https://registry.test.com:5000/v0/
v2 ping attempt failed with error: Get https://registry.test.com:5000/v2/: x509: certificate signed by unknown authority
v1 ping attempt failed with error: Get https://registry.test.com:5000/v1/_ping: x509: certificate signed by unknown authority
表示访问的是安全仓库,但是禁止访问。同样如果 docker push 的话也会提示:
The push refers to a repository [registry.test.com:5000/test-busybox] (len: 1)
unable to ping registry endpoint https://registry.test.com:5000/v0/
v2 ping attempt failed with error: Get https://registry.test.com:5000/v2/: x509: certificate signed by unknown authority
v1 ping attempt failed with error: Get https://registry.test.com:5000/v1/_ping: x509: certificate signed by unknown authority
这个时候可以开启 docker daemon 的不安全访问,即在 /etc/defaults/docker 文件里,找到 DOCKER_OPT 参数,在后面追加–insecure-registry registry.test.com:5000。并重启 docker daemon。
再次测试 docker push 和 docker pull。成功。
此时测试:
1
curl -XGET https://registry.test.com:5000/v2/_catalog
提示禁止访问:
curl: (60) SSL certificate problem: self signed certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a bundle
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn t adequate, you can specify an alternate file using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you d like to turn off curl s verification of the certificate, use
the -k (or --insecure) option.
如果使用 -k 或者 –insecure 参数的话可以访问到 registry 的相应内容。
实验二
测试安全访问,证书存放在 /etc/docker/certs.d/registry.test.com:5000/ 下面。
实验条件,首先使用 scp 命令将 registry 端前面生成的 domain.crt 拷贝到 docker 端。然后创建路径:/etc/docker/certs.d/registry.test.com:5000/,并将 domain.crt 复制过去。
测试 docker pull / docker push。可成功。说明此证书是即刻生效的。
如果将 domain.crt 从该路径移走,docker pull / docker push 失败。
对于 curl 的测试:
curl -XGET 方式提示禁止访问
curl –insecure 方式可访问
而使用证书的访问:
1
curl --cacert /etc/docker/certs.d/registry.test.com\:5000/domain.crt -XGET https://registry.test.com:5000/v2/_catalog
是成功的。
实验三
测试安全访问,证书放在 /usr/local/share/ca-certificate/domain.crt。
实验条件,首先使用 scp 命令将 registry 端前面生成的 domain.crt 拷贝到 docker 端,然后再移动到路径:/usr/local/share/ca-certificate/ 下。
此时进行 docker push / docker pull 是失败的。需要更新证书。
使用命令更新证书:
1
update-ca-certificate
现在再 docker push / docker pull 仍失败。还需要重启 docker daemon。
重启之后的 docker push / docker pull 是成功的。
测试 curl,如果不带证书的访问,同样可以正常访问。
同样,再移除了 /usr/local/share/ca-certificate/domain.crt 之后,更新 update-ca-certificate 之后,docker pull / docker push 仍成功。
在重启了 docker daemon 之后,docker push / docker pull 失败。
实验结论
对于使用了 SSL 方式进行授权访问的私有 docker registry。对于它的访问,有 3 种方式:
1. 修改 docker daemon 的配置,添加 --insecure-registry ... 的形式访问。2. 将证书拷贝到 docker 的 certs.d 路径下,证书只对 docker daemon 生效,立即生效
3. 将证书拷贝到 /usr/local/share/ca-certificate/.... 的路径里,证书在更新 update-ca-certificate 之后全局生效,docker daemon 需重启
小问题
通过将拥有证书的一方视为可信的一方来授权访问是没有问题的。在这种形式里,双方都认为对方是可信的。
但前面也提示了可以加–insecure 参数进行不安全访问,这表示 docker 端不在意 registry 是否可信,而 registry 端也并不阻拦 docker 端的访问。这样安全性就降低了很多。
关于 update-ca-certificates
通过 update-ca-certificates 的 man page 可以了解到,
它会更新 /etc/ssl/certs,并读取 /etc/ca-certificates.conf,这个文件中每行都是在 /usr/share/ca-certificates 的文件都是可信的。
而在 /usr/local/share/ca-certificates 下的.crt 文件也视作可信
一般 ca-certificate 路径有:
/etc/ca-certificates
/usr/share/ca-certificates
/usr/share/doc/ca-certificates
/usr/local/share/ca-certificates
到此,相信大家对“私有安全 docker registry 授权访问实验分析”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!