之前以http搭建了一个harbor作为测试玩乐,这次正式使用harbor作为生产环境,将之前的harbor更改为https。
一、修改配置文件
- 执行以下命令停止Harbor
sudo docker-compose down -v
- 修改配置文件
sudo vim harbor.cfg
- 将hostname更改为xxxxxx.com,ui_url_protocol更改为https方式。
- 将ssl_cert以及ssl_cert_key的名字更改为你要生成证书的名字。
二、生成证书
按照官方文档Harbor生成证书。
- 生成CA证书
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out ca.crt
- 生成证书签名
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
-out yourdomain.com.csr
- FQDN方式生成注册表主机的证书
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt
以上yourdomain.com替换为要使用的FQDN必须和harbor中的hostname以及ssl_cert配置相同。
三、证书配置以及安装
- 获取yourdomain.com.crt和yourdomain.com.key文件后,可以将它们放入如下目录/root/cert/(我将放在/data/cert目录下):
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
- 为Harbor生成配置文件:
sudo ./prepare
- 最后重启Harbor:
docker-compose up -d
四、总结
重启之后发现报错:
原因:由于原来采用http方式连接因此在docker.service文件中加入了允许不安全连接,将其去掉。
#vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.6.113
#去掉--insecure-registry这个参数即可。
#重启docker:
#systemctl daemon-reload
#systemctl restart docker.service
再次启动登录测试
docker login xxx.com
通过将证书复制到docker自有的目录下并重启Harbor和docker即可登录
` sudo cp xxx.crt /etc/docker/cert.d/xxxx(你的注册地址如不存在创建即可)/
- 将证书加入系统级别信任
在 Red Hat (CentOS etc) 上, 命令如下:
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt
update-ca-trust
在加入了根证书后用浏览器访问出现证书错误,于是用脚本再次生成新的证书并导入依旧证书错误,终于在harbor.cfg中找到了原因(没有仔细查看配置说明,走了好多弯路),配置文件中标注了如果使用自签名将核实远程证书设为off
这里默认为on,我用的是自签证书应该为off,到此浏览器可以正常访问了
签名证书也可使用脚本生成这里搬运了github上的脚本 openssl签名生生脚本