Harbor

    harbor是vmware开源的企业级registry,可以让你迅速的搭建自己的私有registry,harbor扩展的docker的registry,使harbor支持以下特性:

  • RBAC 基于角色的权限控制
  • 基于策略的镜像复制
  • 漏扫
  • LDAP/AD支持
  • 镜像删除和垃圾清理
  • Notary 镜像签名
  • 用户界面
  • 审计
  • RESTful api
  • 安装简单(基于compose)


组件

    今天只聊聊harbor的架构,harbor主要有6大模块,默认的每个harbor的组件都被封装成一个docker container,所以可以通过compose来部署harbor,总共分为8个容器运行,通过docker-compose ps来查看



    简易架构图

harbor进程有哪些 harbor架构_harbor进程有哪些

harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /usr/local/bin/docker-entr ...   Up (healthy)   3306/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-ui            /harbor/start.sh                 Up (healthy)                                                                   
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh serve /etc/ ...   Up (healthy)   5000/tcp
  1. harbor-adminserver:harbor系统管理接口,可以修改系统配置以及获取系统信息
  2. harbor-db:存储项目的元数据、用户、规则、复制策略等信息
  3. harbor-jobservice:harbor里面主要是为了镜像仓库之前同步使用的
  4. harbor-log:收集其他harbor的日志信息。rsyslogd
  5. harbor-ui:一个用户界面模块,用来管理registry。主要是前端的页面和后端CURD的接口
  6. nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。是个nginx。nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,它将流量分发到后端的ui和正在docker镜像存储的docker registry
  7. registry:存储docker images的服务,并且提供pull/push服务。harbor需要对image的访问进行访问控制,当client每次进行pull、push的时候,registry都需要client去token服务获取一个可用的token。
  8. redis:存储缓存信息
  9. webhook:当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
    token service:在docker client进行pull/push的时候今天token的发放。


harbor-login

harbor进程有哪些 harbor架构_harbor进程有哪些_02

a  nginx代理在80端口收到client发来的请求,然后把该请求转发到后端的registry。

b  registry收到请求,因为registry是配置的token-based的认证,所以会直接返回一个401状态码,然后返回一个url,通知client去哪里获取token,也就是token service

c  当docker client收到这个url后,会对这个url发起请求,需要在请求头中植入用户名和密码。

d  当请求到达nginx反向代理后,nginx会把该请求转发至ui服务上,因为ui符合token服务在一个容器里面,token服务会解码请求头中用户名和密码

e  拿到用户名和密码后会和db中的进行对比,如果验证无误,则返回成功,在返回的http请求中包含一个私有key

 



harbor-push

harbor进程有哪些 harbor架构_后端_03

省略了proxy转发这一步
当你登录harbor成功后,docker push就可以使用了。

a  docker client和registry交互,获取到token service的url
b  随后docker client和token service交互,告诉token需要进行push操作
c  token服务查看db,该用户是否有相关的权限来push image,如果有相关权限,则返回一个私有的key
d  docker client拿到token后,会对registry发起push请求,当registry收到请求后,会用自己的公钥解密token,如果验证token是合格的,则开始image传输过程 

 



附加



    clair

        是 coreos 开源的容器漏洞扫描工具,在容器逐渐普及的今天,容器镜像安全问题日益严重。clair 是目前少数的开源安全扫描工具,主要提供OS(centos,debian,ubuntu等)的软件包脆弱性扫描。clair的可以单机部署也可以部署到k8s上,可以与现有的registry集成。harbor 很好的整合了 clair ,通过简单的UI就可以对上传的镜像扫描,还可以通过每天的定时扫描对所有镜像进行统一扫描,架构如下:

harbor进程有哪些 harbor架构_ui_04

    Notary
        是一套docker镜像的签名工具, 用来保证镜像在pull,push和传输工程中的一致性和完整性。避免中间人攻击,避免非法的镜像更新和运行。