Harbor

Harbor

一、Harbor 简介

1.1、简介

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
Harbor 以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml

1.2、Harbor 的特性

  • 1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  • 2、基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步)。
  • 3、支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  • 4、镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  • 5、图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  • 6、审计管理:所有针对镜 像仓库的操作都可以被记录追溯,用于审计管理。
  • 7、支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  • 8、Harbor 和 docker registry 的关系:Harbor 实质上是对 docker registry 做了封装,扩展了自己的业务模板。

1.3、Harbor的构成

Harbor 在架构上主要有 Proxy、RegistryCore servicesDatabase(Harbor-db)Log collector(Harbor-log)Job services 六个组件。

Docker Harbor 私有仓库操作的过程:
1、所有的请求或认为的操作都会首先交给 proxy(反向代理)。
2、proxy 会先将请求转发给后端Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)。
3、转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过 Core services 中的 token 令牌的身份验证服务才行。
4、每一次下载和上传都产生操作记录,生成日志,保存至 database 中。
5、database 记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作。
harbor-01.png

  • Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
  • Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。 Core services: Harbor的核心功能,
    • UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
    • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
    • Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。
  • Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
  • Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
  • Log collector(harbor-log): 负责收集其他组件的日志到一个地方。

二、部署Harbor

2.1、部署 Docker-Compose 服务

Docker-Compose 容器编排

2.2、部署 Harbor 服务

2.2.1下载或上传 Harbor 安装程序

# 下载harbor离线安装包
wget -c https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz
# 解压
tar -zxvf harbor-offline-installer-v2.8.1.tgz -C /opt/module

2.3、修改Habor配置文件 harbor.cfg

cp harbor.yml.tmpl harbor.yml
//修改配置文件中hostname内容
vim harbor.yml
....
hostname: 192.168.10.130    #修改为当前主机的IP或域名
# http related config
http:
  port: 80
#https:                 #注释掉https服务
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

# internal_tls:
#   enabled: true
#   dir: /etc/harbor/tls/internal
harbor_admin_password: Harbor12345    --指定密码

2.4、安装 Harbor

./install.sh

2.5、登录harbor的web平台

默认用户名:admin,默认密码:Harbor12345

2.6、登录成功界面

2.7、推送镜像至 Harbor

docker login -u admin -p Harbor12345 http://127.0.0.1
或者:
docker login 192.168.10.130
Username: admin
Password:
Error response from daemon: Get "https://192.168.10.130/v2/": dial tcp 192.168.2.50:443: connect: connection refused

解决登录失败方法如下:
默认访问 Docker 仓库使用 443 端口,要修改为 80 端口仓库地址。

# 重启harbor服务:
docker-compose stop && docker-compose start

下载镜像并修改 tag:

docker pull nginx
docker tag nginx:latest 192.168.10.130/library/nginx:v1

推送镜像到 library 项目:

docker push 192.168.10.130/library/nginx:v1

2.8、Harbor 启停

# 进入 Harbor 安装目录
cd harbor

# 关闭 Harbor
docker-compose down

# 开启 Harbor
docker-compose up -d

# 查看服务状态
docker-compose ps

# 重启 Harbor
docker-compose restart

# 查看服务日志
docker-compose logs

# 查看某个具体服务的日志,例如 nginx
docker-compose logs nginx

# 停止某个具体服务
docker-compose stop nginx

# 启动某个具体服务
docker-compose start nginx

评论

暂无

添加新评论