前戏

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及 审计日志等,足以满足基本企业需求。

官方:https://goharbor.io/

Github:https://github.com/goharbor/harbor

Harbor的各个组件作用

组件名

作用

nginx

harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。

harbor-adminserver

harbor系统管理接口,可以修改系统配置以及获取系统信息

harbor-db

存储项目的元数据、用户、规则、复制策略等信息

harbor-jobservice

harbor里面主要是为了镜像仓库之前同步使用的

harbor-log

收集其他harbor的日志信息

harbor-ui

一个用户界面模块,用来管理registry

registry

存储docker images的服务,并且提供pull/push服务

redis

存储缓存信息

webhook

当registry中的image状态发生变化的时候去记录更新日志、复制等操作

token service

在docker client进行pull/push的时候负责token的发放

Harbor安装的先决条件

​Docker安装(linux)_51CTO博客_linux 安装 docker​

1、服务器硬件配置:

Resource

Minimum

Recommended

CPU

2 CPU

4 CPU

Mem

4 GB

8 GB

Disk

40 GB

160 GB

2、软件

Software

Version

Description

Docker engine

Version 17.06.0-ce+ or higher

For installation instructions, see ​​Docker Engine documentation​

Docker Compose

Version 1.18.0 or higher

For installation instructions, see ​​Docker Compose documentation​

Openssl

Latest is preferred

Used to generate certificate and keys for Harbor

3、端口

Port

Protocol

Description

443

HTTPS

Harbor portal and core API accept HTTPS requests on this port. You can change this port in the configuration file.

4443

HTTPS

Connections to the Docker Content Trust service for Harbor. Only required if Notary is enabled. You can change this port in the configuration file.

80

HTTP

Harbor portal and core API accept HTTP requests on this port. You can change this port in the configuration file.

Harbor安装有2种方式:

• 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小

• 离线安装:安装包包含部署的相关镜像,因此安装包比较大

部署步骤
1.解压安装包
wget https://github.com/goharbor/harbor/releases/download/v2.2.3/harbor-offline-installer-v2.2.3.tgz
tar zxvf harbor-offline-installer-v2.2.3.tgz
cd harbor
2.根据模板文件创建harbor配置文件
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
3.执行命令下载
# ./prepare
# ./install.s

Harbor 容器仓库_redis

4.访问harbor

Harbor 容器仓库_数据库_02

使用默认用户密码登录

Harbor 容器仓库_docker_03

Harbor基本使用

1、配置http镜像仓库可信任

# vi /etc/docker/daemon.json

{"insecure-registries":["​​reg.ctnrs.com​​"]}

# systemctl restart docker

2、打标签

# docker tag centos:7 ​​reg.ctnrs.com/library/centos:7​

3、上传

# docker push ​​reg.ctnrs.com/library/centos:7​

4、下载

docker pull ​​reg.ctnrs.com/library/centos:7​

harbor配置文件详情**

使用vi/vim打开刚才创建的配置文件harbor.yml查看配置文件详细情况。

服务访问地址

访问管理UI和注册表服务的IP地址或主机名。不能使用localhost或127.0.0.1,因为Harbor需要由外部客户端访问。值填写Harbor服务的主机IP或主机名(域名访问方式)。

hostname: reg.mydomain.com

Harbor 容器仓库_redis_04

服务访问方式(端口)

http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80

# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /your/certificate/path
private_key: /your/private/key/path

http的端口,默认为80。如果启用https,此端口将重定向到https端口。模板文件模式禁用https安全访问方式(适合初学者或测试环境的配置)。生产环境需要将https部分取消注释,以增加Harbor的安全性。

是否启用Harbor组件之间的tls通信

# internal_tls:   # 是否启用所有Harbor组件之间的tls通信
# enabled: true # 将enabled设置为true表示内部tls已启用
# dir: /etc/harbor/tls/internal #证书和密钥文件的存放目录

是否启用外部代理

​​如果启用,那么主机名将不再使用,默认禁用,值为外部代理的地址。

# external_url: https://reg.mydomain.com:8433

配置管理员密码

​管理员admin的初始密码,默认为Harbor12345,只在第一次安装harbor时起作用,安装时不需要修改,登录Harbor UI管理界面后,为保证密码的安全性,强烈建议修改。管理员admin的初始密码,默认为Harbor12345,只在第一次安装harbor时起作用,安装时不需要修改,登录Harbor UI管理界面后,为保证密码的安全性,强烈建议修改。

harbor_admin_password: Harbor12345

Harbor 容器仓库_数据库_05

数据库配置

​harbor数据库配置部分,harbor使用postgresql作为数据库。

database:
password: root123
max_idle_conns: 100
max_open_conns: 900
data_volume: /app/harbor/data

​password:  harbor数据库root用户的密码,生产环境建议修改;

max_idle_conns:   空闲连接池中的最大连接数。如果小于等于0,则不保留空闲连接。

max_open_conns:  打开到数据库的最大连接数。如果小于等于0,则对打开的连接数没有限制。

data_volume:   数据存储目录,harbor中的每个组件的数据都存储在该指定路径下的子目录中。​

Harbor 容器仓库_数据库_06

是否启用外部存储

​ 如果需要使用外部存储,则将该部分的注释去掉,生产环境建议使用外部存储,

storage_service:
# ca_bundle
# filesystem:
# maxthreads: 100 # 最大线程数
# redirect: # 是否启用重定向
# disabled: false

Harbor 容器仓库_redis_07

ca_bundle:   自定义根ca证书的路径,该证书将被注入信任库。

filesystem:   存储后端,默认为文件系统,选项包括文件系统、azure、gcs、s3、swift、NFS和oss存储。本专栏后面会出后端存储的文章。

扫描器配置

是否启用Trivy扫描器来扫描镜像的漏洞,默认未启用。

trivy:
ignore_unfixed: true # 是否显示已修复的漏洞
skip_update: false # 是否启用从github上下载的Trivy数据
insecure: false # 是否跳过证书验证
# github_token: xxx # github的token值

Harbor 容器仓库_docker_08

job服务的最大数量

jobservice:
max_job_workers: 10

Harbor 容器仓库_数据库_09

webhook配置

默认启用,默认的值为10.

notification:
webhook_job_max_retry: 10 # webhook job的最大重试次数

Harbor 容器仓库_redis_10

Chart配置

harbor不仅可以存储镜像,还可以存Chart,当helm服务器使用。

chart:
absolute_url: disabled # 是否启用

Harbor 容器仓库_docker_11

日志配置

配置harbor的日志信息

log:
level: info # 日志级别
local: # 配置本地存储中的日志
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor

rotate_count:日志文件在被删除之前旋转的次数,如果为0,旧版本将被删除而不是旋转。

rotate_size:只有当日志文件的大小大于该值字节时,才会对其进行旋转。如果size后跟k,则假定大小以KB为单位。如果使用M,则大小以兆字节为单位,如果使用G,则大小以千兆字节为单位。那么100、100k、100M和100G。

location: 主机上存储日志的目录

Harbor 容器仓库_docker_12

Harbor版本号

​因为配置文件是使用模板文件创建的,需要将版本号修改为安装包一样的版本,否则按照会失败。

Harbor 容器仓库_docker_13

是否启用外部数据库

​如果要使用外部数据库,请取消注释该部分来启用。注意与前面的外部数据区分目前Harbor仅支持PostgraSQL数据库,需要手动在外部的PostgreSQL上创建harbor、notary_signer、notary_servers三个数据库,Harbor启动时会自动在对应数据库下生成表。配置如下:

# external_database:
# harbor:
# host: harbor_db_host # 数据库主机地址
# port: harbor_db_port # 数据库端口
# db_name: harbor_db_name # 数据库名称
# username: harbor_db_username # 连接该数据库的用户名
# password: harbor_db_password # 连接数据库的密码
# ssl_mode: disable # 启用SSL模式
# max_idle_conns: 2 # 最大空闲连接数
# max_open_conns: 0
# notary_signer:
# host: notary_signer_db_host
# port: notary_signer_db_port
# db_name: notary_signer_db_name
# username: notary_signer_db_username
# password: notary_signer_db_password
# ssl_mode: disable
# notary_server:
# host: notary_server_db_host
# port: notary_server_db_port
# db_name: notary_server_db_name
# username: notary_server_db_username
# password: notary_server_db_password
# ssl_mode: disable

Harbor 容器仓库_数据库_14

是否启用外部redis缓存服务器

# external_redis:  #  配置外部 Redis 实例。
# host: redis:6379 # redis的地址:端口
# password: # 连接外部redis服务的密码
# #sentinel_master_set:
# registry_db_index: 1
# jobservice_db_index: 2
# chartmuseum_db_index: 3
# trivy_db_index: 5 # Trivy扫描器的数据库索引
# idle_timeout_seconds: 30

host: redis:  redis的地址:端口;

sentinel_master_set:  必须设置为支持redis+sentinel,仅在使用 Sentinel 模式时设置;

registry_db_index: 注册表的数据库索引;

jobservice_db_index:  job服务的数据库索引;

Harbor 容器仓库_数据库_15

UAA身份验证

​是否通过自签名证书托管的uaa实例证书的信任,2.4.0开始不支持该配置。

Harbor 容器仓库_redis_16

全局代理

为组件配置http代理,组件不需要通过http代理相互连接。如果要禁用代理,请从“components”中删除组件,如果要使用代理进行复制,必须启用代理。如果要禁用代理,请将域添加到“no_proxy”字段后面,

proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy

Harbor 容器仓库_数据库_17

启用指标采集组件

是否启用指标采集组件来收集Harbor相关的指标,默认未启用,该部分配置主要用来监控Harbor

metric:
enabled: true
port: 9090
path: /metrics