harbor功能
vmware官方开源服务列表地址:https://vmware.github.io/harbor/cn/
harbor官方github地址:https://github.com/vmware/harbor
harbor官网:https://goharbor.io/
- 基于角色的访问控制:用户与docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制:镜像可以在多个registry(仓库)实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面:用户可以通过浏览器来浏览,检索当前docker镜像仓库,管理项目和命名空间。
- AD/LDAP支持:harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化:已有中文,英文,德文。日文和俄文的本地版本。
- RESTful API - RESTful API:提供给管理员对于harbor更多的操控,使得与其它管理软件集成变得更容易。
- 部署简单:提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备。
harbor组件
- nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。
- 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的发放。
自签证书
openssl genrsa -out /usr/local/harbor/certs/harbor-ca.key 2048
openssl req -x509 -new -nodes -key /usr/local/harbor/certs/harbor-ca.key -subj "/CN=harbor.timerovers.com" -days 7120 -out /usr/local/harbor/certs/harbor-ca.crt
harbor配置https处修改
https:
port: 443
certificate: /usr/local/harbor/certs/harbor-ca.crt
private_key: /usr/local/harbor/certs/harbor-ca.key
安装harbor1.10.1
下载地址:https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob//master/docs/installation_guide.md
habor1.7(包含1.7)之前的版本配置和harbor1.8之后的版本配置不一样
harbor1.10.1离线包安装
1. 下载
wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
2. 解压
tar -zxf harbor-offline-installer-v1.10.1.tgz
cd harbor
[root@localhost harbor]# ll
总用量 662120
drwxr-xr-x 3 root root 20 5月 20 22:08 common
-rw-r--r-- 1 root root 3398 2月 10 2020 common.sh
-rw-r--r-- 1 root root 677974489 2月 10 2020 harbor.v1.10.1.tar.gz
-rw-r--r-- 1 root root 5878 5月 20 21:17 harbor.yml
drwxr-xr-x 2 root root 24 5月 20 22:08 input
-rwxr-xr-x 1 root root 2284 2月 10 2020 install.sh
-rw-r--r-- 1 root root 11347 2月 10 2020 LICENSE
-rwxr-xr-x 1 root root 1749 2月 10 2020 prepare
3.修改配置文件
vim harbor.yml
hostname: images.harbor.com #修改hostname
http
port: 80
#https: #注释掉https
#port: 443
#certificate: /your/certificate/path
#private_key: /your/private/key/path
harbor_admin_password: admin #修改harbor web登录密码
database:
password: database #修改数据库密码
max_idle_conns: 50
max_open_conns: 100
#宿主机上的存储harbor数据的目录
data_volume: /data
clair:
updaters_interval: 12
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- clair
**4.安装docker-compose **
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
5.安装harbor
cd harbor
./install.sh
6.将私有仓库地址加入docker配置文件
#将仓库地址加入docker配置文件,用于提交镜像,只拉取不提交镜像不需要配置。
[root@localhost images]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
"insecure-registries":["192.168.8.10:5000"]
}
systemctl restart docker
部署harbor1.7.6高可用
介绍
harbor支持基于策略的Docker镜像复制功能,这类似于mysql的主从同步,其实可以实现不同的数据中心、不同的运行环境之间的同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用很多互联网公司使用harbor搭建内外docker仓库的案例,并且还有实现了双向复制的案例。
环境: 需要python2,docker,docker-compose
192.168.8.20 harbor01
192.168.8.30 harbor02
基于镜像复制高可用
1.安装docker-compose
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.解压
tar -zxf harbor-offline-installer-v1.7.6.tgz -C /usr/local/
cd /usr/local/harbor/
[root@localhost harbor]# ll
总用量 587732
drwxr-xr-x 3 root root 23 5月 21 21:02 common
-rw-r--r-- 1 root root 939 9月 12 2019 docker-compose.chartmuseum.yml
-rw-r--r-- 1 root root 975 9月 12 2019 docker-compose.clair.yml
-rw-r--r-- 1 root root 1434 9月 12 2019 docker-compose.notary.yml
-rw-r--r-- 1 root root 5608 9月 12 2019 docker-compose.yml
-rw-r--r-- 1 root root 8033 9月 12 2019 harbor.cfg
-rw-r--r-- 1 root root 600483180 9月 12 2019 harbor.v1.7.6.tar.gz
-rwxr-xr-x 1 root root 5739 9月 12 2019 install.sh
-rw-r--r-- 1 root root 11347 9月 12 2019 LICENSE
-rw-r--r-- 1 root root 1263409 9月 12 2019 open_source_license
-rwxr-xr-x 1 root root 36337 9月 12 2019 prepare
3.修改配置
harbor01配置
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 192.168.8.20 #修改IP域名都可以
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
max_job_workers = 10
customize_crt = on
#nginx cert与key文件的路径, 只有采用https协议是才有意义
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
# 邮件设置,发送重置密码邮件时使用
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = admin #修改登录密码
#用户认证模式,默认是db_auth,也可以使用ldap_auth验证
auth_mode = db_auth
# LDAP认证时配置项
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 2
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
# 是否开启自注册
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
#数据库根据实际使用时修改下
db_host = postgresql
db_password = root123
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password =
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = root123
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =
harbor02配置
hostname = 192.168.8.30 #修改IP
ui_url_protocol = http
max_job_workers = 10
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
harbor_admin_password = admin #修改登录密码
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 2
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
self_registration = on
token_expiration = 30
project_creation_restriction = everyone
db_host = postgresql
db_password = root123
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password =
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = root123
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =
5.启动停止
cd /usr/local/harbor
docker-compose start
docker-compose stop
6.页面配置镜像同步
以下是主主同步(项目名必须一致)
-harbor01配置
-
web访问192.168.8.20(harbor01)
-
创建名为:timerovers项目
-
创建同步目标
-
复制管理新建规则
-harbor02配置
和harbor01步骤一样
- web访问192.168.8.30(harbor02)
- 创建名为:timerovers项目
- 创建同步目标
- 复制管理新建规则
7.将私有仓库地址加入docker配置文件
#将仓库地址加入docker配置文件,用于提交镜像,只拉取不提交镜像不需要配置。
[root@localhost images]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
"insecure-registries":["192.168.8.10:5000"]
}
systemctl restart docker