如何快速利用Harbor搭建自己的企业级registry server

Harbor是由VMware团队为企业用户设计的Registry Server开源项目,用户可以利用Harbor搭建自己的私有镜像仓库。即使你是harbor小白,也可以从本文快速从认识Harbor到利用Harbor搭建自己的企业级registry server。

Harbor特性

基于角色控制

用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限。

基于镜像的复制策略

镜像可以在多个Harbor实例之间进行复制。

支持LDAP

Harbor的用户授权可以使用已经存在LDAP用户。

镜像删除 & 垃圾回收

Image可以被删除并且回收Image占用的空间。

用户UI

用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理。

镜像删除 & 垃圾回收

绝大部分的用户操作API, 方便用户对系统进行扩展。

轻松的部署功能

Harbor提供了online、offline安装,除此之外还提供了virtual appliance安装。

Harbor和docker registry关系

Harbor实质上是对docker registry做了封装,扩展了自己的业务模块.下面展示一下docker registry和Harbor的架构图用以说明。

 

20161109211643

 

Harbor认证过程

1、docker daemon从docker registry拉取镜像。

2、如果docker registry需要进行授权时,registry将会返回401 Unauthorized响应,同时在响应中包含了docker client如何进行认证的信息。

3、docker client根据registry返回的信息,向auth server发送请求获取认证token。

4、auth server则根据自己的业务实现去验证提交的用户信息是否存符合业务要求。

5、用户数据仓库返回用户的相关信息。

6、auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具有的相关权限信息 。上述就是完整的授权过程.当用户完成上述过程以后便可以执行相关的pull push操作。认证信息会每次都带在请求头中。

Harbor整体架构

 

20161109211652

 

Harbor认证流程

 

20161109211659

 

A、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器。

B、 如果认证服务器配置了权限认证,则会返回401。通知docker client在特定的请求中需要带上一个合法的token。而认证的逻辑地址则指向架构图中的core services。

C、 当docker client接受到错误code。client就会发送认证请求(带有用户名和密码)到core services进行basic auth认证。

D、 当C的请求发送给ngnix以后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core serivces。

E、 core services获取用户名和密码以后对用户信息进行认证(自己的数据库或者介入LDAP都可以)。成功以后,返回认证成功的信息。

从上面的docker registry 和 Harbor的架构图、流程图可以看出Harbor的扩展部分为core services。这部分实现了用户的认证, 添加了UI模块已经webhook。

Harbor安装

Harbor安装有三种方式,这里以online的方式为例,另外两种有兴趣的童鞋可以参考Harbor的官方文档。

Harbor的安装

1、下载安装包
2、配置harbor.cfg文件
3、执行install.sh脚本安装并启动Harbor

用户可以到release页下载相关文件,解压tar xvf harbor-online-installer-.tgz。

Harbor配置

  • hostname 运行Harbor的主机地址(域名或者IP地址

不能是localhost or 127.0.0.1。

  • ui_url_protocol url协议(http或者htpps)

https配置可以参考 Configuring Harbor with HTTPS Access。

  • Email设定

配置的邮件可以用户Harbor进行密码重置处理。

e.g:
 email_server =smtp.mydomain.com
 email_server_port = 25
 email_username=ample_admin@mydomain.com
 email_password = abc
 email_from = admin sample_admin@mydomain.com
 email_ssl = false
  • harbor_admin_password

admin初始化密码。

  • auth_mode

认证方式,默认为db_auth。也可以使用ldap_auth 由于参数太多就不一一列举了。 Harbor安装手册讲的很清楚。

storage配置

默认情况下,Harbor是把镜像存储在本地文件系统中的。但是在生成环境中你可能会考虑到使用其他的存储方案来代替本地存储。比如S3、Openstack Swift、Ceph等等。那么这个时候你就需要更改templates/registry/config.yml中的存储配置部分。例如:

storage:
 swift:
 username: admin
 password: ADMIN_PASS
 authurl: http://keystone_addr:35357/v3/auth
 tenant: admin
 domain: default
 region: regionOne
 container: docker_images

详细配置可以参考Registry Configuration Reference

完成安装并启动

sudo ./install.sh

登录并创建自己的首个仓库试试(初始用户名/密码 admin/Harbor12345)

$docker login reg.yourdomain.com
 $dockerpushreg.yourdomain.com/myproject/myrepo:mytag

Harbor的生命周期管理 你可以使用docker-compose来管理Harbor的生命周期,下面列举一些有用的常用的命令。

Stop Harbor:

$ sudo docker-compose stop
 Stopping harbor_proxy_1 ... done
 Stopping harbor_ui_1 ... done
 Stopping harbor_registry_1 ... done
 Stopping harbor_mysql_1 ... done
 Stopping harbor_log_1 ... done
 Stopping harbor_jobservice_1 ... done

Restart Harbor after stopping:

$ sudo docker-compose start
 Starting harbor_log_1
 Starting harbor_mysql_1
 Starting harbor_registry_1
 Starting harbor_ui_1
 Starting harbor_proxy_1
 Starting harbor_jobservice_1

移除docker container 但是保留相关镜像文件

sudo docker-compose rm
 Going to remove harbor_proxy_1, harbor_ui_1, harbor_registry_1, harbor_mysql_1, harbor_log_1, harbor_jobservice_1
 Are you sure? [yN] y
 Removing harbor_proxy_1 ... done
 Removing harbor_ui_1 ... done
 Removing harbor_registry_1 ... done
 Removing harbor_mysql_1 ... done
 Removing harbor_log_1 ... done
 Removing harbor_jobservice_1 ... done
  • 持久化data和日志文件 默认情况下data是被存储在Harbor host机的/data目录.不管harbor container是删除还是重新创建这里的数据都是一致存在的。另外harbor的日志文件默认情况下是存在/var/log/harbor/目录下的。
  • 自定义ngnix监听端口 修改docker-compose.yml文件。

1、替换80端口为任意存在未被占用的端口 e.g 8899

proxy:
 image: library/nginx:1.11.5
 restart: always
 volumes:
 - ./config/nginx:/etc/nginx
 ports:
 - 8899:80
 - 443:443
 depends_on:
 - mysql
 - registry
 - ui
 - log
 logging:
 driver: "syslog"
 options:
 syslog-address: "tcp://127.0.0.1:1514"
 tag: "proxy"

2、修改templates/registry/config.yml文件

auth:
 token:
 issuer: registry-token-issuer
 realm: $ui_url:8899/service/token
 rootcertbundle: /etc/registry/root.crt
 service: token-service

3、运行install.sh来更新并启动Harbor

$ sudo docker-compose down
 $ sudo install.sh

HTTPS 协议的修改和自定义监听端口修改一样的操作

分享到:更多 ()