Docker系列(七):Harbor(二)
简介
Harbor并没有搭载任何的证书,所以默认只提供HTTP的服务。但,在生产环境中强烈建议使用HTTPS。 Harbor有一个Nginx实例给所有的服务做反向代理,你可以使用prepare
脚本去配置Nginx开启https。
获取一张证书
假设你的仓库的配置的hostname是reg.yourdomain.com, 并且它的DNS记录指向了运行Harbor的主机。 首先,需要有一张从CA签发的证书, 这张证书通常包含a.crt文件和a.key文件,例如: yourdomain.com.crt和yourdomain.com.key。
在一个测试或者开发环境中,你可能选择使用自签发的证书来替代从一个CA签发的证书。 下面的命令可以生成一张你自己的证书:
- 创建自己的CA证书:
|
|
- 生成一个证书签名请求:
如果你使用像reg.yourdomain.com这样的FQDN去访问你仓库,你就必须使用reg.yourdomain.com作为CN(Common Name)。 否则, 如果你使用IP去连接仓库的主机, CN可以任意填写,例如:你的名字等等:
$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
-out yourdomain.com.csr
- 生成你仓库的主机的证书:
如果你使用像reg.yourdomain.com这样的FQDN去访问你的仓库,运行下面的命令去生成你仓库的主机的证书:
$ openssl x509 -req -days 365 \
-in yourdomain.com.csr -CA ca.csr -CAKey ca.key -CAcreateserial \
-out yourdomain.com.crt
如果是使用IP地址(如:192.168.1.101)去访问你的仓库, 你需要使用下面的命令:
$ echo "subjectAltName = IP:192.168.1.101" > extfile.cnf
$ openssl x509 -req -days 365 \
-in yourdomain.com.csr -CA ca.crt -CAKey ca.key -CAcreateserial -extfile extfile.cn \
-out yourdomain.com.crt
配置并安装
得到yourdomain.com.crt和yourdoman.com.key文件后,你可以把他们放入指定的文件夹,如: /root/cert/
:
$ cp yourdomain.com.csr /root/cert/
$ cp yourdomain.com.key /root/cert/
接下来,编辑make/harbor.cfg
文件, 更新hostname
和protocol
, 并更新属性ssl_cert
和ssl_cert_key
:
#set hostname
hostname = reg.yourdomain.com
#set ui_url_protocol
ui_url_protocol = https
......
#The path of cert and key files for nginx, they are applied only the protocol is set to https
ssl_cert = /root/cert/yourdomain.com.crt
ssl_cert_key = /root/cert/yourdomain.com.key
生成Harbor的配置文件:
$ ./prepare
如果Harbor已经正在运行,先停止并移除所有存在的实例。 你的image数据会保留在文件系统中。
$ docker-compose down -v
最后,重启Harbor:
$ docker-compose up -d
在配置好Harbor HTTPS后,可以通过以下几步进行验证:
- 打开浏览器,并输入https://reg.yourdomain.com。 应该会显示Harbor的界面。
- 在安装了Docker的主机上,并确认没有配置”-insecure-registry”。 将以上步骤生成的ca.crt拷贝到这个Docker主机的
/etc/docker/certs.d/reg.yourdomain.com
(或者是你仓库主机的IP)目录, 如果这个目录不存在,需要手动创建一下。如果仓库的nginx监听端口(443)改为其它端口,需要更改这个目录的名字为/etc/docker/certs.d/reg.yourdomain.com:port
(或者仓库主机IP:port)。然后运行docker命令去进行验证:
|
|
如果你已经更改nginx的监听端口,需要在登录时将端口添加上,如下:
$ docker login reg.yourdomain.com:port