说明:

版本2.6.0

一、安装要求

硬件

硬件类型最小要求建议CPU2 CPU4 CPU内存4 GB8GB硬盘40 GB160 GB

软件

软件名称版本Docker engine17.06.0-ce+或更高Docker Composedocker-compose(v1.18.0+)或者docker coompose v2(docker-compose-plugin)Openssl首选最新版本

网络端口

端口协议描述443httpsHarbor门户和核心API接受在此端口上的https请求,你可以在配置文件中改变这个端口4443https为了让Harbor连接到Docker Content Trust服务,只在启用Notary的时候需要,可以在配置文件中改变这个端口80httpHarbor门户和核心API接受在此端口上的http请求,你可以在配置文件中改变这个端口

二、下载安装工具

安装工具有以下两种:

在线安装工具

从Docker Hub下载镜像,因此,安装工具的体积特别小 离线安装工具

如果安装Harbor的主机没有连接网络可以选择这种方式。

以上这两种方式的安装过程大致相同

1. 根据你的情况去下载对应的安装工具

如下图:

2. 验证安装工具是正版(可选步骤,如果你从官网下载的,不验证也没关系)

*.asc文件是OpenPGP文件,可以验证你下载的工具是不是正版

①、首先通过以下命令获取公钥

gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C

②、验证安装工具包是正版 在线安装工具包gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-online-installer-version.tgz.asc

离线安装工具包gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-offline-installer-version.tgz.asc

3. 解压安装工具包

在线安装工具包

tar xzvf harbor-online-installer-version.tgz

离线安装工具包

tar xzvf harbor-offline-installer-version.tgz

三、配置https访问Harbor

如果启用了Content Trust with Notary去为镜像签名,那么,你必须使用https.

1. 生成一个CA证书

生成一个CA证书私钥 openssl genrsa -out ca.key 4096

生成CA证书 如果你使用FQDN((Fully Qualified Domain Name)全限定域名)去连接你的Habor主机,则必须配置-subj的CN选项,值为Habor的FQDN openssl req -x509 -new -nodes -sha512 -days 3650 \

-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \

-key ca.key \

-out ca.crt

2. 生成一个服务器证书

生成私钥 openssl genrsa -out yourdomain.com.key 4096

生成证书签名请求(CSR) 调整-subj的值以体现你公司的信息,如果你用FQDN((Fully Qualified Domain Name)全限定域名)去连接你的Habor主机,则必须配置-subj,并且CN选项值为FQDN,并且这个值也要用在key选项和CSR的文件名 openssl req -sha512 -new \

-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \

-key yourdomain.com.key \

-out yourdomain.com.csr

生成一个x509 v3扩展文件 不管你是使用FQDN还是IP连接你的Harbor主机,你必须创建这个文件,这样你才可以为Harbor主机生成符合Subject Alternative Name (SAN) 和 x509 v3扩展要求的证书 cat > v3.ext <<-EOF

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

[alt_names]

DNS.1=yourdomain.com

DNS.2=yourdomain

DNS.3=hostname

EOF

使用v3.ext文件去为你的Harbor主机生成证书 用你安装Harbor的主机名替换掉下面CRS和CRT文件名中的yourdomain.com openssl x509 -req -sha512 -days 3650 \

-extfile v3.ext \

-CA ca.crt -CAkey ca.key -CAcreateserial \

-in yourdomain.com.csr \

-out yourdomain.com.crt

3. 向Harbor和Docker提供证书

在生成ca.crt,yourdomain.com.crt和yourdomain.com.key文件后,你必须将他们提供给Harbor和Docker,用它们来重新配置Harbor.

在你的Harbor主机上复制服务器证书和key到证书文件夹 cp yourdomain.com.crt /data/cert/

cp yourdomain.com.key /data/cert/

将youdomain.com.crt转换成yourdomain.com.cert以供docker使用 Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户端证书。 openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

在Harbor主机上复制服务器证书,key和CA文件到Docker证书文件夹(可能需要你先创建这些文件夹) cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/

cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/

cp ca.crt /etc/docker/certs.d/yourdomain.com/

注意:如果你将nginx默认端口443映射到了一个不同的端口,创建以下文件夹: /etc/docker/certs.d/yourdomain.com:port或者/etc/docker/certs.d/harbor_IP:port

重启Docker Engine systemctl restart docker

四、配置Harbor的yml文件

在你下载的安装工具包中包含harbor.yml文件,这个就是配置文件,其中必要的参数都没有被#注释,可选的参数都被#注释,请注意,不要删除或注释必要的参数,这些参数可以不必修改,保持默认即可,以下两项必须修改:

hostname: https:

hostname的值必须改成你自己安装Harbor机器的域名 如果你配置了https,请修改此项 其他的一些配置项,请参阅

五、 配置内置的TLS 作为Harbor组件之间的交互(可选的,如果你实在不想用https)

在v2.0版本之前,Harbor组件(harbor-core,harbor-jobservice,proxy,harbor-portal,registry,registryctl,trivy_adapter,chartmuseum)之间使用http交互,2.0版本之后TLS可以用在内部网络,在生产环境中,最好还是使用https.

在harbor.yml中设置 internal_tls:

enable: true

dir: /etc/harbor/tls/internal #包含内部证书的文件夹

证书可以通过prepare工具自动生成 docker run -v /:/hostfs goharbor/prepare:v2.1.0 gencert -p /path/to/internal/tls/cert

也可以通过自己的CA去生成证书,只需要把证书和key放到内部tls证书目录并且命名为harbor_internal_ca.key、harbor_internal_ca.crt,所有的组件都可以。但是这种方式有以下约束:

所有的证书必须被单个唯一的CA签名内部证书的文件名和证书文件的CN属性必须遵循以下表格中的约定因为没有SAN的自签名证书在Golang 1.5中已被弃用,所以您必须在自己生成证书时将SAN扩展添加到您的证书文件中,否则Harbor实例将无法正常启动。SAN扩展中的DNS名称应与下表中的CN字段相同

nameusageCNharbor_internal_ca.keyca’s key file for internal TLSN/Aharbor_internal_ca.crtca’s certificate file for internal TLSN/Acore.keycore’s key fileN/Acore.crtcore’s certificate filecorejob_service.keyjob_service’s key fileN/Ajob_service.crtjob_service’s certificate filejobserviceproxy.keyproxy’s key fileN/Aproxy.crtproxy’s certificate fileproxyportal.keyportal’s key fileN/Aportal.crtportal’s certificate fileportalregistry.keyregistry’s key fileN/Aregistry.crtregistry’s certificate fileregistryregistryctl.keyregistryctl’s key fileN/Aregistryctl.crtregistryctl’s certificate fileregistryctlnotary_server.keynotary_server’s key fileN/Anotary_server.crtnotary_server’s certificate filenotary-servernotary_signer.keynotary_signer’s key fileN/Anotary_signer.crtnotary_signer’s certificate filenotary-signertrivy_adapter.keytrivy_adapter.’s key fileN/Atrivy_adapter.crttrivy_adapter.’s certificate filetrivy-adapterchartmuseum.keychartmuseum’s key fileN/Achartmuseum.crtchartmuseum’s certificate filechartmuseum

六、运行安装脚本

1. 安装

可以安装Harbor使用不同的配置

默认安装,仅Harbor,不包含Notary、Trivy、Chart Repository Service包含Noatary包含Trivy包含Chart Repository Service包含两个或者所有的服务

①. 默认安装,不包含Notary、Trivy、Chart Repository Service

sudo ./install.sh

成功之后,打开你在harbor中配置的hostname就可以访问,默认的用户名密码是admin和Harbor12345 然后就可以使用docker去使用了,例如:

docker login reg.yourdomain.com

docker push reg.yourdomain.com/myproject/myrepo:mytag

②. 包含Notary

此时,你必须配置https

sudo ./install.sh --with-notary

③. 包含Trivy

sudo ./install.sh --with-trivy

关于Trivy的更多信息,可以参考Trivy官方文档

④. 包含Chart Repository Service

sudo ./install.sh --with-chartmuseum

⑤. 包含多个

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum

2. 通过Http连接到Harbor

如果你使用http而不是https,请注意要在docer daemon的配置文件(/etc/docker/daemon.json)中进行配置

{

"insecure-registries" : ["myregistrydomain.com:5000", "0.0.0.0"]

}

编辑完记得重启docker

#重启docker

systemctl restart docker

#停止Harbor

docker-compose down -v

#重启启动Harbor

docker-compose up -d

七、重新配置Harbor

运行安装工具包中的prepare

bash ./prepare

停止和启动Harbor

docker-compose down -v

docker-compose up -d

查看原文