设为首页 收藏本站
查看: 1177|回复: 0

[经验分享] DevOps之harbor

[复制链接]
YunVN网友  发表于 2019-4-17 14:48:28 |阅读模式


一、    Harbor仓库的基本介绍
    Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
  Harbor通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

1.   Harbor特性:
     基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
   镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
   图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
   AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
   审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
   RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
   部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

2.   Harbor核心组件介绍:
     Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
   Database:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
   UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
   jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
   Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
   Registry:镜像仓库,负责存储镜像文件。
   Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
   webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块
   token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。


  主要组件包括proxy,他是一个NGINX前端代理,主要是分发前端UI访问和镜像上传和下载流量,上图中通过深蓝色标识;UI提供了一个web管理界面,当然还包括一个前端和后端的API,底层使用MySQL数据库;registry是镜像仓库,负责存储镜像文件。当镜像上传完毕后通过took通知UI创建repository,上图通过红色线标识,当然registry的token认证也是通过UI组件完成的,adminserver是系统的配置管理中心附带检查存储用量。UI和jobserver启动的时候会需要加载adminserver的配置,通过灰色线标识;jobservice是负责镜像的复制工作,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log ,上图中通过紫色线标识,log是日志汇总组件,通过docker的log-diver把日志汇总到一起,通过浅蓝色线标识。

3.  Harbor和Registry的比较
  Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势:
   提供分层传输机制,优化网络传输:Docker镜像是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
   提供WEB界面,优化用户体验:只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
   支持水平扩展集群:当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
   良好的安全机制:企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
   Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

4.   Harbor的实现
  Harbor的每个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打开这个模板文件,发现Harbor是由7个容器组成的:

  nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
  harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之间同步使用的。
  harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口。
  registry:registry就是docker原生的仓库,负责保存镜像。
  harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。
  harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中。
  harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。

二、Harbor的安装和基本使用

1. Harbor的安装
  环境介绍:


#①安装docker:
yum install -y yum-utils  device-mapper-persistent-data  lvm2
#配置repository
yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  #安装docker,这里注意(docker的版本需要一致)比如,如果在拉去一个镜像之后并启动镜像时:[root@zy harbor]#docker run -it centos echo hello world:
如果出现如下错误:

或者:

可能是因为docker的版本不对:

#这里我们需要将centos中自带的docker删除:
[root@zy harbor]#yum remove docker-ce docker-ce-cli containerd.io
#查看docker的版本
yum list docker-ce --showduplicates | sort -r
#下载对应的版本:
[root@zy harbor]#yum remove docker-ce docker-ce-cli containerd.io
#启动docker
[root@zy harbor]#systemctl start docker
  此时在尝试,运行一个镜像,如果没问题,说明docker安装成功!!!

#②  安装docker-compose
[root@zy harbor]# yum install python-pip
[root@zy harbor]# pip install docker-compose
#测试
[root@zy harbor]# docker-compose –version
#卸载
#[root@zy harbor]#  pip uninstall docker-compose
#③安装harbor
这里我已经下载过了 ,使用离线安装。
下载地址:https://github.com/vmware/harbor/releases/download
也可以在线安装:
wget -P /usr/loca/src/ https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-online-installer-v1.1.1.tgz
#下载成功后:
[root@zy harbor]#  tar zxf harbor-offline-installer-v1.1.1.tgz
[root@zy harbor]# cd harbor
#修改配置文件:
·   hostname:目标主机的主机名,用于访问UI和注册服务。
·   ui_url_protocol:(http或https,默认为http)用于访问UI和令牌/通知服务的协议。
·   db_password:用于db_auth的MySQL数据库的root密码。
·   max_job_workers:(默认值为3)作业服务中的最大复制工作数。
·   customize_crt:(开启或关闭,默认为开启),如果此属性开启,在准备脚本创建注册表的令牌生成/验证私钥和根证书。
·   ssl_cert:SSL证书的路径,仅在协议设置为https时应用。
·   ssl_cert_key:SSL密钥的路径,仅在协议设置为https时应用。
·   log_rotate_count:日志文件在被删除之前会被轮询log_rotate_count次数。
·   log_rotate_size:仅当日志文件大于log_rotate_size字节时才会轮换日志文件。
·   harbor_admin_password:管理员的初始密码。默认用户名/密码为:admin/Harbor12345。
·   auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。
#④执行安装脚本:
[root@zy harbor]# ./install.sh

看到如下界面表示安装成功,此时可以根据你设置的hostname和port访问harbor的界面:

这里我们也可以看到harbor启动的docker容器:

注意:执行这条命令时,所在的目录中一定要有:docker-compose.yml文件。


#补充命令:
#启动Harbor  d
[root@zy harbor]#docker-compose start
#停止Harbor  
[root@zy harbor]#docker-comose stop
#重启Harbor
[root@zy harbor]#docker-compose restart
2. harbor上传和下载镜像的测试

1)上传操作

#1.创建/etc/docker/daemon.json文件,在文件中指定仓库地址
[root@zy harbor]#cat > /etc/docker/daemon.json

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-828226-1-1.html 上篇帖子: DevOps之nexus 下篇帖子: 如何成为一名Top DevOps Engineer
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表