Harbor Registry项目源代码结构解析
作者:尹文开
一、概览
容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的Registry是非常必要的。Harbor项目(https://github.com/vmware/harbor)是由VMware公司中国研发团队为企业用户设计的Registryserver开源项目,包括了权限管理(RBAC)、LDAP/AD集成、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,原生支持中文,并计划实现镜像复制(roadmap)等功能。
本文主要介绍Harbor项目的源码结构,帮助开发和运维人员理解其工作原理。
二、组件
Harbor系统由五个容器组成:Proxy、Core Services(包含UI, tokenservice和webhook)、Database、Registry和LogCollector。
Ø Proxy提供反向代理服务,用户的不同请求由Proxy分发到后端的UI或者Registry。Harbor中使用的是官方的nginx镜像。
Ø Core Services是Harbor项目的核心组件,主要提供权限管理、审计、管理界面UI、tokenservice以及可供其他系统调用的API等功能。
Ø Database提供数据持久化服务,采用了官方的mysql镜像。
Ø Registry是Docker官方的开源的Registry镜像,主要提供镜像的存储和分发功能。
Ø Log Collector负责收集其他容器的日志并进行日志轮转。
各个容器之间的关系如下图1所示:
图 1
三、源码结构
以下所述主要为Core Services组件的源码结构,通过根目录下的Dockerfile可以构建出CoreServices的镜像。另外Deploy目录下的db和log分别对应Database和LogCollector的Dockerfile镜像构建文件,而Nginx和Registry则都是采用的官方镜像。
| -- api (Harbor提供的可供外部调用的API)
| -- auth (认证模块,目前提供两种认证方式:数据库和LDAP)
| | -- db (数据库认证)
| | -- ldap (LDAP认证)
| -- controllers (控制器相关代码)
| -- dao (数据持久层)