Docker私有仓库Harbor部署https

私有仓库harbor配置HTTPS部署

1.环境装备:

Portus,Portus和harbor都是开源的Registry服务器 ,Portusv可以参考:docker-Portusv2.1镜像仓库快速部署使用http://www.linuxea.com/1547.html
当然,还有gitlab8.8.0提供的docker Registry,也是非常好用的,可参考https://about.gitlab.com/2016/05/23/gitlab-container-registry/
centos7.2.1511,python2.7以上版本,docker引擎1.10或者更高版本,docker compose需要1.6.0或者更高版本
harbor安装参考:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
harbor下载地址:https://github.com/vmware/harbor/releases
vmware安装参考:https://github.com/vmware/harbor/blob/master/docs/installation_guide_ova.md
安装包分为离线,网络,源码安装
网络安装包:https://github.com/vmware/harbor/releases/download/1.1.2/harbor-online-installer-1.1.2.tgz
离线安装包:https://github.com/vmware/harbor/releases/download/1.1.2/harbor-offline-installer-1.1.2.tgz
源代码;https://github.com/vmware/harbor/archive/1.1.2.tar.gz
什么是harbor
简单的说,Harbor 是一个企业级的 Docker Registry,可以实现 images 的私有存储和日志统计权限控制等功能,并支持创建多项目(Harbor 提出的概念),基于官方 Registry V2 实现。

2.配置参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
在harbor.cfg中
修改hostname = 域名
配置参数位于文件harbor.cfg。参数说明如下-请注意,最起码,你需要改变主机属性。
主机:目标主机的主机名,这是用于访问用户界面和注册表服务。它应该是IP地址或目标计算机的完全限定域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名-注册表服务需要由外部客户端访问!
ui_url_protocol:(HTTP或HTTPS,默认为HTTP)用于访问用户界面和令牌/通知服务的协议。默认情况下,这是HTTP。要建立HTTPS协议,请参阅配置与港HTTPS访问。
电子邮件设置:需要对港这些参数,以便能够向用户发送一个“密码重设”电子邮件,以及是否需要该功能只是必要的。还有,千万注意,在默认情况下SSL连接是没有启用-如果你的SMTP服务器需要SSL,但不支持STARTTLS,那么你应该通过设置启用SSL email_ssl = TRUE。
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
EMAIL_FROM =管理员sample_admin@mydomain.com
email_ssl = false
harbor_admin_password:管理员的初始密码。此密码仅在港口首次发布时生效。之后,将忽略此设置,并且应在UI中设置管理员的密码。需要注意的是默认的用户名/密码管理/ Harbor12345。
auth_mode:用于身份验证的类型。缺省情况下,它是db_auth,即凭证存储在数据库中。对于LDAP身份验证,此设置了ldap_auth。
ldap_url:本LDAP端点URL(例如ldaps://ldap.mydomain.com)。 仅当使用auth_mode设为了ldap_auth。
ldap_searchdn:谁有权搜索LDAP / AD服务器(例如权限的用户的DN uid=admin,ou=people,dc=mydomain,dc=com)。
ldap_search_pwd:由指定的用户的密码ldap_searchdn。
LDAP_BASEDN:基本DN来查找用户,例如ou=people,dc=mydomain,dc=com。 仅当使用auth_mode设为了ldap_auth。
ldap_filter:用于查找用户,例如搜索筛选器(objectClass=person)。
LDAP_UID:用于一个LDAP搜索期间用户匹配的属性,也可以是流体,CN,电子邮件或其他属性。
ldap_scope:范围以搜索用户,1- LDAP_SCOPE_BASE,2- LDAP_SCOPE_ONELEVEL,3- LDAP_SCOPE_SUBTREE。默认值为3。
DB_PASSWORD:对于用于MySQL数据库的root密码db_auth。更改此密码以用于任何生产使用!
self_registration:(上或关闭,默认为上)启用/禁用用户注册自己的能力。禁用时,新用户只能由管理员用户创建,只有管理员用户才能在Harbor中创建新用户。 注:当auth_mode设为了ldap_auth,自注册功能总是禁用,这个标志将被忽略。
use_compressed_js:(上或关闭,默认为上),供生产使用,把这个标志上。在开发模式下,将其设置为关闭,这样的JS文件可以单独进行修改。
max_job_workers:(默认值为3)复制工人就业服务的最大数量。对于每个图像复制作业,工作程序将存储库的所有标记同步到远程目标。增加此数目允许系统中更多的并发复制作业。但是,由于每个工人消耗一定量的网络/ CPU / IO资源,请根据主机的硬件资源仔细选择此属性的值。
token_expiration:到期时间(分钟)通过令牌服务创建的令牌,默认为30分钟。
verify_remote_cert:(上或关闭,默认为上)该标志决定是否验证SSL / TLS证书时,港口,远程注册表实例通信。设置这个属性关绕过SSL / TLS验证,这是通常用在远程实例有自签名或不受信任的证书。
customize_crt:(上或关闭,默认为上),如果此属性上,在准备脚本创建注册表的令牌生成/验证私钥和根证书。以下属性:crt_country,crt_state,crt_location,crt_organization,crt_organizationalunit,crt_commonname,crt_email被用作用于产生密钥的参数。该属性设置为关闭时,密钥和根证书是由外部来源提供。请参阅自定义键和港令牌服务证书获取更多信息。

3.开始安装

1
2
3
4
5
6
7
[root@harbor ~]# yum install epel-release;
[root@harbor ~]# yum install openssl openssl-devel docker-io
[root@harbor ~]# mkdir -p /data/cert && cd /data/cert/
[root@harbor ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=London/O=Company Ltd/CN=nginx-docker"
[root@harbor ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.wolf7.org.key -out server.csr -subj "/C=CN/L=London/O=Company Ltd/CN=harbor.wolf7.org"
[root@harbor ~]# openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.wolf7.org.crt
[root@harbor ~]# cd ..

安装docker-compose

1
2
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose;
chmod +x /usr/local/bin/docker-compose;

Download Harbor 1.1.2
Harbor git地址:https://github.com/vmware/harbor/releases
下载 Harbor 离线安装包

1
2
cd /usr/local/src;wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz`
tar xvf harbor-offline-installer-v1.1.2.tgz

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@harbor ~]# cd harbor 
[root@harbor ~]# sed -i 's/ui_url_protocol = http/ui_url_protocol = https/' harbor.cfg
[root@harbor ~]# sed -i 's/hostname = reg.mydomain.com/hostname = harbor.wolf7.org/' harbor.cfg
[root@harbor ~]# sed -i 's@ssl_cert = /data/cert/server.crt@ssl_cert = /data/cert/harbor.wolf7.org.crt@g' harbor.cfg
[root@harbor ~]# sed -i 's@ssl_cert_key = /data/cert/server.key@ssl_cert_key = /data/cert/harbor.wolf7.org.key@g' harbor.cfg
[root@harbor ~]# ./prepare
loaded secret key
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/ui/env
Generated configuration file: ./common/config/ui/app.conf
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/app.conf
Generated configuration file: ./common/config/ui/private_key.pem
Generated configuration file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

执行.install 会运行docker-compose,其中会去dockerhub拉取镜像,如果链接dockerhub较卡,可使用离线安装包

1
2
3
4
5
6
7
8
[root@harbor ~]#  ./install.sh 

[Step 0]: checking installation environment ...

Note: docker version: 1.12.3

Note: docker-compose version: 1.8.0.....
略过

3.1 web登陆和创建项目

url:域名
admin / Harbor12345

4.push

1
2
[root@harbor ~]# docker login -u admin -p Harbor12345 harbor.wolf7.org
Error response from daemon: Get https://harbor.wolf7.org/v1/users/: x509: certificate signed by unknown authority

509: certificate signed by unknown authority解决如下:

1
2
3
4
5
[root@harbor ~]# mkdir -p /etc/docker/certs.d/harbor.wolf7.org
[root@harbor ~]# cp /data/cert/ca.crt /etc/docker/certs.d/harbor.wolf7.org
[root@harbor ~]# docker login -u admin -p Harbor12345 harbor.wolf7.org
Login Succeeded
[root@harbor ~]#

打包上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1.使用docker images 获取image id
[root@harbor ~]# docker tag 05a60462f8ba harbor.wolf7.org/test/nginx:1.11.5
[root@harbor ~]# docker push harbor.wolf7.org/test/nginx:1.11.5
The push refers to a repository [harbor.wolf7.org/test/nginx]
3f117c44afbb: Pushed
c4a8b7411af4: Pushed
fe4c16cbf7a4: Pushed
1.11.5: digest: sha256:e5c82328a509aeb7c18c1d7fb36633dc638fcf433f651bdcda59c1cc04d3ee55 size: 948
2.也可以使用完整仓库路径 tag images:tag images:tag
[root@harbor ~]# docker tag vmware/harbor-notary-db:mariadb-10.1.10 harbor.wolf7.org/test/mariadb:10.1.10
[root@harbor ~]# docker push harbor.wolf7.org/test/mariadb:10.1.10
The push refers to a repository [harbor.wolf7.org/test/mariadb]
c2385ae7d6e5: Pushed
5f70bf18a086: Pushed
978a35efaa8c: Pushed
c3014bbccb0b: Pushed
8aa2c772121c: Pushed
eaa3924b054e: Pushed
d8f2cde2eef8: Pushed
574ab36807f2: Pushed
8deec01122be: Pushed
78dbfa5b7cbc: Pushed
10.1.10: digest: sha256:0f561ad96b9d86edca4010569ce3eb501c2aa8bf1596af88b2ca82d05d57e974 size: 3642
[root@harbor ~]#

查看:

5.pull

换一台机器pull
1,首先需要harbor的ca信任,创建路径后,在harbor将ca传递过来

1
[root@test01 ~]# mkdir -p /etc/docker/certs.d/harbor.wolf7.org

2,在harbor上把ca复制到pull的机器上

1
2
3
4
5
6
7
8
[root@harbor cert]# scp -r /data/cert/ca.crt  root@test01.wolf7.org:/etc/docker/certs.d/harbor.wolf7.org
The authenticity of host 'test01.wolf7.org (192.168.77.201)' can't be established.
ECDSA key fingerprint is 1f:b8:e0:19:ac:78:87:a7:79:50:ba:89:12:8f:20:d5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test01.wolf7.org,192.168.77.201' (ECDSA) to the list of known hosts.
root@test01.wolf7.org's password:
ca.crt 100% 1935 1.9KB/s 00:00
[root@harbor cert]#

3,非公开项目需要登陆,公开项目不需要登陆

1
2
3
[root@LinuxEA-COM /data/harbor/cert]# docker login -u admin -p Harbor12345 harbor.wolf7.org
WARNING: Error loading config file:/root/.docker/config.json - EOF
Login Succeeded

4,开始pull

1
2
3
4
5
6
7
8
9
[root@test01 harbor.wolf7.org]# mkdir /data
[root@test01 harbor.wolf7.org]# cd /data/
[root@test01 data]# docker pull harbor.wolf7.org/test/nginx:1.11.5
Trying to pull repository harbor.wolf7.org/test/nginx ...
1.11.5: Pulling from harbor.wolf7.org/test/nginx
1fad42e8a0d9: Pull complete
c600959992d4: Pull complete
52894f103317: Pull complete
Digest: sha256:e5c82328a509aeb7c18c1d7fb36633dc638fcf433f651bdcda59c1cc04d3ee55

5,查看

1
2
3
4
[root@test01 data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harbor.wolf7.org/test/nginx 1.11.5 05a60462f8ba 7 months ago 181.4 MB
[root@test01 data]#

出现unauthorized: authentication required解决办法,一般在web中创建了项目是不会出现的
则可以在/data/harborcommon/config/nginx/nginx.conf中添加proxy_set_header X-Forwarded-Proto https;