.. _header-n35:
解决HTTPS访问docker registry
============================
.. seealso::
参考:\ `Verify repository client with
certificates `__
.. _header-n39:
证书颁发
--------
.. _header-n40:
使用自签名证书
~~~~~~~~~~~~~~
.. _header-n41:
创建CA证书
^^^^^^^^^^
.. code:: shell
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt
.. _header-n43:
为客户端创建证书
^^^^^^^^^^^^^^^^
生成私钥
.. code:: shell
openssl genrsa -out registry.cslab.renbin.com.key
通过私钥生成证书请求csr
.. code:: shell
openssl req -new -key registry.cslab.renbin.com.key -out registry.cslab.renbin.com.csr
使用本地CA为该请求颁发正式证书crt
.. code:: shell
openssl x509 -req -in registry.cslab.renbin.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out registry.cslab.renbin.com.crt -days 9999
.. _header-n50:
使用Let’s Encrypt证书
~~~~~~~~~~~~~~~~~~~~~
.. _header-n83:
使用certbot管理证书
^^^^^^^^^^^^^^^^^^^
.. code:: shell
git clone https://github.com/letsencrypt/letsencrypt.git
sudo ./certbot-auto certonly --standalone --email admin@example.com -d renbin.com -d registry.renbin.com
..
.. seealso::
参考\ `Let’s Encrypt `__
.. _header-n57:
创建registry
------------
创建docker registry指定cert目录
.. code:: shell
docker run -d \
-p 443:443 \
-v /root/registry-certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.cslab.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.cslab.key \
-v /usr/local/registry:/var/lib/registry \
--restart=always --name registry-https registry:2
创建证书目录并拷贝证书
.. code:: shell
mkdir -p /etc/docker/certs.d
cert内容
.. code:: shell
[root@renbin-new-4 ~]# tree /etc/docker/certs.d/
/etc/docker/certs.d/
`-- registry.cslab.renbin.com
|-- ca.crt
|-- client.cert
`-- client.key
push一个镜像测试
.. code:: shell
[root@renbin-new-4 ~]# docker push registry.cslab.renbin.com/alpine:latest
The push refers to repository [registry.cslab.renbin.com/alpine]
3e207b409db3: Pushed
latest: digest: sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01 size: 528
如果证书没有认证的话会出现下面错误
.. code:: shell
Get https://registry.cslab.renbin.com/v2/: x509: certificate signed by unknown authority