Docker 仓库之Harbor

简介

本文档介绍Harbor的安装。

Harbor简单介绍

Harbor 关键组件

组件名 组件版本
Postgresql 9.6.10-1.ph2
Redis 4.0.10-1.ph2
Clair 2.0.8
Beego 1.9.0
Chartmuseum 0.9.0
Docker/distribution 2.7.1
Docker/notary 0.6.1
Helm 2.9.1
Swagger-ui 3.22.1

安装

前提条件

下载安装包

 * 下载地址:http://harbor.orientsoft.cn/  下载后的名称为:harbor-offline-installer-v1.5.0.tgz, 大概在:850M左右
 * 2.0.1下载地址:https://github.com/goharbor/harbor/releases/download/v2.0.1/harbor-offline-installer-v2.0.1.tgz

  放入/app目录下

  # cd /app
  # tar -zxvf harbor-offline-installer-v1.5.0.tgz

  #tar xvf harbor-offline-installer-v2.0.1.tgz

生成证书

 # openssl genrsa -out ca.key 4096
 # 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

 备注:yourdomain.com 修改为自己的域名,其它字段根据实际情况修改
 * 生成私钥
 # openssl genrsa -out yourdomain.com.key 4096

 备注:yourdomain.com 修改为自己的域名

* 生成签名请求
# 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


备注:yourdomain.com 修改为自己的域名,其它字段根据实际情况修改
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

备注: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

备注:yourdomain.com 修改为自己的域名

为Harbor和Docker提供证书

# cp yourdomain.com.crt /data/cert/
# cp yourdomain.com.key /data/cert/

备注:yourdomain.com 修改为自己的域名
# openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

备注:yourdomain.com 修改为自己的域名,docker daemon 会认为crt是ca证书,cert是client端证书
# 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
      yourdomain.com 修改为自己的域名,如果文件夹不存在,手工创建

 systemctl restart docker
/etc/docker/certs.d/
    └── yourdomain.com:port
       ├── yourdomain.com.cert  <-- Server certificate signed by CA
       ├── yourdomain.com.key   <-- Server key signed by CA
       └── ca.crt               <-- Certificate authority that signed the registry certificate
  * 配置文件名称:/app/harbor/harbor.cfg

  hostname = 192.168.44.131

配置Harbor的YML文件


* Harbor可选配置项
参数|子参数|描述和其它参数
---|---|---
external_url|None|启用此参数,hostname不再使用
storage_service||默认Harbor的后端存储为本地文件系统,可以设置为其它类型的后端存储
|ca_bundle|客户自定义CA证书路径
|filesystem|默认:fliesystem,可以设置为:azure,gcs,s3,swift,oss,参见:配置存储后端 章节
|redirect|将disable设置为:true,禁用registry前转
external_database||配置外部数据库设置,当前,Harbor只支持PostgreSQL数据库。
|harbor|配置一个外部数据库。host:harbor数据库的主机名;port:端口;db_name:数据库名;username:用户名;password:密码;ssl_mode:启用ssl模式;max_idle_conns:idle时,保持的最大连接数;max_open_conns:数据库最大连接数,默认值0,0:表示不限制;
|clair|为clair配置外部数据库。host:数据库的主机名;port:端口;db_name:数据库名;username:用户名;password:密码;ssl_mode:启用ssl模式
|notary_signer|为notary配置外部数据库。host:数据库的主机名;port:端口;db_name:数据库名;username:用户名;password:密码;ssl_mode:启用ssl模式
|notary_server|为notary server配置外部数据库。host:数据库的主机名;port:端口;db_name:数据库名;username:用户名;password:密码;ssl_mode:启用ssl模式
external_redis||配置外部redis实例
|host|外部redis实例的主机名
|port|外部redis的端口
|password|连接外部redis的密码
|registry_db_index|Harbor 仓库在redis的数据库index
|jobservice_db_index|jobservice的数据库index
|chartmuseum_db_index|chart 的 museum在redis中的数据库index


* 配置存储后端,以swift为例

storage_service: ca_bundle: swift: username: admin password: ADMIN_PASS authurl: http://keystone_addr:35357/v3/auth tenant: admin domain: default region: regionOne container: docker_images" redirect: disable: false


### Harbor内部通信配置TLS
* 默认情况下,Harbor各个组件间的访问使用http,在生产环境中为了更加安全,配置使用HTTPS。
* 可以通过设置harbor.yml文件中的internal_tls参数实现tls
* 设置enabled为:true,设置dir值为:证书所在目录
* 可以使用如下的prepare工具生成证书

docker run -v /:/hostfs goharbor/prepare:v2.0 gencert -p /path/to/internal/tls/cert

* 配置证书要求
名字|使用|CN
---|---|---
harbor_internal_ca.key|ca’s key file for internal TLS|N/A
harbor_internal_ca.crt|ca’s certificate file for internal TLS|N/A
core.key|core’s key file|N/A
core.crt|core’s certificate file|core
job_service.key|job_service’s key file|N/A
job_service.crt|job_service’s certificate file|jobservice
proxy.key|proxy’s key file|N/A
proxy.crt|proxy’s certificate file|proxy
portal.key|portal’s key file|N/A
portal.crt|portal’s certificate file|portal
registry.key|registry’s key file|N/A
registry.crt|registry’s certificate file|registry
registryctl.key|registryctl’s key file|N/A
registryctl.crt|registryctl’s certificate file|registryctl
notary_server.key|notary_server’s key file|N/A
notary_server.crt|notary_server’s certificate file|notary-server
notary_signer.key|notary_signer’s key file|N/A
notary_signer.crt|notary_signer’s certificate file|notary-signer
trivy_adapter.key|trivy_adapter.‘s key file|N/A
trivy_adapter.crt|trivy_adapter.‘s certificate file|trivy-adapter
clair.key|clair’s key file|N/A
clair.crt|clair’s certificate file|clair
clair_adapter.key|clair_adapter’s key file|N/A
clair_adapter.crt|clair_adapter’s certificate file|clair-adapter
chartmuseum.key|chartmuseum’s key file|N/A
chartmuseum.crt|chartmuseum’s certificate file|chartmuseum

### 运行安装脚本

* 修改harbor.yml.tmpl 内容,复制为harbor.yml
* 执行install.sh脚本安装

sh install.sh


* 不是所有的组件都必须安装,可以采用如下组合方式安装Harbor
* 默认不安装Notary,Clair,chart仓库服务

* 安装后可以访问:http://reg.yourdomain.com(reg.yourdomain.com为在harbor.yml中配置的主机名)
* 默认的用户名/密码:admin/Harbor12345

* 注意

### 带Notary一起安装

sh install.sh --with-notary

* 备注

安装notary,必须配置docker使用HTTPS


### 带Clair一起安装

./install.sh --with-clair


### 带Chart仓库服务一起安装

./install.sh --with-chartmuseum



## 测试验证

* UI验证

浏览器访问:http://192.168.44.131


* 镜像上传及下载

在进行push和pull的docker客户端主机上进行如下配置: 在docker daemon中增加:--insecure-registry=192.168.44.131:5000 加载docker daemon并重启docker daemon

systemctl daemon-reload systemctl restart docker

docker login 192.168.44.131:5000

将镜像打标签为: docker tag 1344d5e50c9f 192.168.44.131:5000/sit/percona-mysql:5.7

docker push 192.168.44.131:5000/sit/percona-mysql:5.7

在其他客户端进行镜像拉取: docker pull 192.168.44.131:5000/sit/percona-mysql:5.7


## 常用命令

* 停止所有服务

# cd /app/harbor # docker-compose down -v


* 启动所有服务

cd /app/harbor

docker-compose up -d


* 启动容器

# docker-compose start # 容器不存在则无法启动


* 查看容器

# docker-compose ps



* 停止容器

# docker-compose stop # 停止容器


* 查看容器日志

# docker-compose logs


## 常用api

* 查看所有项目和镜像信息

curl -X GET -H "Content-Type" application/json" "http://192.168.250.3/api/search"

备注: 显示所有的项目信息和镜像信息


* 查看项目信息

curl -k -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://HostName/api/projects/{project_id}"

```

结语

回首页