VMware Harbor组件原理分析

本文深入解析了Harbor的架构及工作原理,Harbor是VMware开源的企业级Registry,支持多种特性如RBAC权限控制、镜像复制、漏洞扫描等。文章详细介绍了Harbor的六大模块及其如何通过Docker容器实现快速部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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-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

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

省略了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就可以对上传的镜像扫描,还可以通过每天的定时扫描对所有镜像进行统一扫描,架构如下:

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

 

转载于:https://my.oschina.net/guol/blog/1840973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值