在Harbor中使用HTTPS需要一下几个步骤:
1. 生成CA证书。
2. 修改Harbor.cfg文件及创建Registry服务。
3. 配置客户端使用CA证书。
1、生成CA证书
创建一个文件夹,放置这些生成的证书.
这里假定Registry服务器的IP地址是:192.168.1.8,主要介绍通过IP地址生成证书方法。
1.1. 建立CA证书发行站点
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 7120 -out ca.crt
一直回车,直至出来commonName,输入你的主机ip(192.168.1.8)。
1.2. 创建CA证书生成请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.1.8.key -out 192.168.1.8.csr
一直回车,直至出来commonName,输入你的主机ip(192.168.1.8)。
1.3. 创建CA站点文件目录
demoCA是OpenSSL的证书存储依赖目录,建立在与上面的ca.crt的同级目录下。
mkdir demoCA
cd demoCA
touch index.txt
echo '01' > serial
cd ..
注意:如果sudo echo ‘01’> serial报错-bash: serial: 权限不够.使用下面命令代替
sudo sh -c 'echo '01' > serial'
建完的目录结构:
.
..
ca.crt
ca.key
demoCA
...
1.4. 生成CA客户端证书
echo subjectAltName = IP:192.168.1.8 > extfile.cnf
openssl ca -in 192.168.1.8.csr -out 192.168.1.8.crt -cert ca.crt -keyfile ca.key \
-extfile extfile.cnf -outdir .
若报错:
Check that the request matches thesignature
Signature ok
The mandatory stateOrProvinceName fieldwas missing
该错误的解决办法:
把/etc/pki/tls/openssl.cnf中大约86 87的行
请使用vi把如下内容
stateOrProvinceName= match
organizationName= match
改为:
stateOrProvinceName= optional
organizationName= optional
2、下载和安装
Harbor的运行时由多个Docker Container组成,包括:Nginx、MySQL、UI、Proxy、log、JobService六个主要组成部分。可以从源码构建安装,也可以下载*.tgz安装包进行安装。
2.1. 从源码安装
git clone https://github.com/vmware/harbor.git
下载源码后,修改./make/harbor.cfg(新版本需要将harbor.yml.tmpl改为harbor.yml)的内容,然后运行sudo make即可。
2.2 下载安装包
从https://github.com/vmware/harbor/releases下载预先构建好的安装包,然后解压缩到目录(tar -zxvf xxx.tgz -C /usr/local,修改./harbor/harbor.cfg的内容。
2.3 harbor.cfg修改
主要修改以下几个地方:
#配置Harbor服务的主机IP地址或主机名,注意要与CA证书的完全一致。
#hostname = reg.mydomain.com
hostname = 192.168.1.8
#配置Harbor使用https
#ui_url_protocol = http
ui_url_protocol = https
#改为上面生成的CA客户端证书,注意路径一致,可使用命令`pwd`获得。
#ssl_cert = /path/to/server.crt
ssl_cert = /usr/localr/harbor/192.168.1.8.crt
#ssl_cert_key = /path/to/server.key
ssl_cert_key = /usr/localr/harbor/192.168.1.8.key
运行./prepare 和./install.sh即可
3、客户端配置
如果不在客户端部署证书,docker pull会显示x509: certificate signed by unknown authority。原因在于docker engine对HTTP和未配置证书的https链接拒绝按照信任方式访问。
3.1. 使用非信任链接
如果不在客户端部署证书,docker pull会显示x509: certificate signed by unknown authority,在Docker启动时设置参数 "–insecure-registry IP"即可。客户端部署证书后,即可直接访问,不再报出错信息。
vim /etc/docker/daemon.json
添加 --insecure-registry IP(服务器主机的IP)
需要使用service docker restart重启服务,在Ubuntu 15.04以后版本,需要使用systemctl daemon-reload && systemctl restart docker重新载入服务参数并重启。
3.2. 在客户端部署证书
将ca.crt 复制到 docker 客户端的 /etc/docker/certs.d/yourdomain.com(registry服务器的IP)。例如:
#获取ca.crt文件,如果目录不存在,则需要预先手动创建之。 (在每个客户端上创建名称为192.168.1.8(服务器端ip)的目录)
sudo scp qyh@192.168.1.8:~/ca.crt /etc/docker/certs.d/192.168.1.8/
或者
sudo scp ./ca.crt qyh@192.168.1.9://etc/docker/certs.d/192.168.1.8/
** 注意:**
每一个客户端都需要复制上面的ca.crt到Docker相应目录,然后重启Docker。
浏览器需要添加“访问例外”,根据提示进行操作。
如果Harbor部署服务器变化,即便IP地址不变,也需要将访问端的浏览器和/etc/docker/certs.d目录下的证书清除、更新,然后还要重启Docker。否则,对于同一个证书,因为重新生成后内容不同,将会被认为造假,被拒绝访问。
如果将nginx 端口 443 设到了其它端口, 则需要创建目录 /etc/docker/certs.d/yourdomain.com: port(registry IP:port),加上端口号即可,如:192.168.1.8:446。
** Linux和MacOS系统需要对证书获得系统级的信任。可以参考:Adding trusted root certificates to the server**
Ubuntu系统使用下面的办法:
cp 192.168.1.8.crt /usr/local/share/ca-certificates/192.168.1.8.crt
update-ca-certificates
MacOS使用下面的办法:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
/root/docker/192.168.1.8.crt
也可以到浏览器中,管理和设置CA证书。对于自签名的根证书,可以选择ca.crt文件直接导入。**然后重启Docker服务。 **
MacOS上,在文件管理器中选中ca.crt文件,鼠标右键选择“加入”,然后打开“钥匙串”工具,即可看到被加入的证书。然后即可正常使用docker login登陆到Harbor。
4、使用Harbor
在使用https的情况下,进行了访问控制,需要账号登录进去才能使用。
** 对于向上推送Docker镜像的账号,需要到Harbor管理页面开启该账号的“管理员”权限。**
4.1. 创建账号
到浏览器打开链接 https://192.168.1.8/,登录进去(默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射)。初始账号是admin,密码Harbor12345。然后创建一个账户openthings。
4.2. login
docker login 192.168.1.8
#输入账号和设置的密码
4.3. tag
给镜像打tag【tag 修改 image 的名字. 格式为: userip/项目名/image名字:版本号】
docker tag gispark/openrock 192.168.1.8/gispark/openrock:2016.10
4.4. push
将本机镜像192.168.1.8/gispark/openrock推送到Registry中。
docker push 192.168.1.8/gispark/openrock:2016.10
4.5. pull
在其它机器上将镜像拉取下来(也需要预先登录)。
docker pull 192.168.1.8/gispark/openrock:2016.10
然后就可以使用"Docker run …"运行整个Docker镜像了。
默认Docker的镜像存储在/data目录下,如果根目录空间不够,需要移到其它磁盘,参考:
【Harbor的Docker镜像存储路径修改:】
5、Harbor的启动和停止
在 /usr/local/harbor目录下执行:
启动Harbor
docker-compose start
停止Harbor
docker-comose stop
重启Harbor
docker-compose restart
或者
docker-compose up -d
Harbor日志查看
cd /var/log/harbor
grep "ERROR" *