Harbor仓库的原理和架构

839 阅读3分钟

1、软件资源介绍

Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为github.com/vmware/harb… Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。Harbor的每个组件都是以Docker容器的形式构建的,使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 /Deployer/docker-compose.yml,由5个容器组成,这几个容器通过Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露 proxy ( 即
Nginx)的服务端口
harbor-job
Nginx
Proxy:由Nginx 服务器构成的反向代理。 //docker ps -a 就会看到这几个进程
Registry:由Docker官方的开源 registry 镜像构成的容器实例。
UI:即架构中的 core services, 构成此容器的代码是 Harbor项目的主体。
MySQL:由官方 MySQL镜像构成的数据库容器。
Log:运行着 rsyslogd的容器,通过 log-driver的形式收集其他容器的日志 \

2、Harbor特性

a、基于角色控制:用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限
b、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制
c、支持LDAP:Harbor的用户授权可以使用已经存在LDAP用户
d、镜像删除 &垃圾回收:Image可以被删除并且回收Image占用的空间,绝大部分的用户操作API, 方便
用户对系统进行扩展
e、用户UI:用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理
f、轻松的部署功能:Harbor提供了online、offline安装,除此之外还提供了virtualappliance安装
g、Harbor和 docker registry 关系:Harbor实质上是对 docker registry 做了封装,扩展了自己的业务模块

image.png

3、Harbor认证过程

a、dockerdaemon从docker registry拉取镜像。
b、如果dockerregistry需要进行授权时,registry将会返回401 Unauthorized响应,同时在响应中包含了docker client如何进行认证的信息。
c、dockerclient根据registry返回的信息,向auth server发送请求获取认证token。
d、auth server则根据自己的业务实现去验证提交的用户信息是否存符合业务要求。
e、用户数据仓库返回用户的相关信息。
f、auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具有的相关权限信息.上述就是 完整的授权过程.当用户完成上述过程以后便可以执行相关的pull/push操作。认证信息会每次都带在请求头中 \

image.png

4、Harbor认证流程

a、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器。
b、 如果认证服务器配置了权限认证,则会返回401。通知dockerclient在特定的请求中需要带上一个合法的 token。而认证的逻辑地址则指向架构图中的core services。
c、 当docker client接受到错误code。client就会发送认证请求(带有用户名和密码)到coreservices进行basic auth认证。
d、 当C的请求发送给ngnix以后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core serivces。
e、 coreservices获取用户名和密码以后对用户信息进行认证(自己的数据库或者介入LDAP都可以)。成功以 后,返回认证成功的信息

image.png