技能目标:·掌握Harbor工作原理·掌握Harbor安装部署·掌握Harbor日常操作管理4.1案例分析4.1.1案例概述Docker官方镜像仓库是一个用于管理公共镜像的地方,大家可以在上面找到想要的镜像,也可以把自己的镜像推送上去。
但是,有时候服务器无法访问互联网,或者不希望将自己的镜像放到互联网上,那么就需要用到Dockerregistry私有仓库,它可以用来存储和管理自己的镜像。
最近BDQN公司将项目全部打包成镜像有部署私有仓库服务的需求,经过几轮商讨,最终选择DockerHarbor,DockerHarbor有可视化的Web管理界面可以方便管理Docker镜像操作也很方便简单,又提供了多个项目的镜像权限管理控制功能等。
4.1.2案例前置知识点1.什么是HarborHarbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。
它以Docker公司开源的Registry为基础,提供了管理UI。
基于角色的访问控制(RoleBasedAccessControl)、AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能。
通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源DockerDistribution。
作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,以提升用户使用Registry构建和运行环境传输镜像的效率。
2.Harbor的优势1)基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。
2)基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
适用于负载平衡、高可用性、多数据中心、混合和多云场景。
3)支持LDAP/AD:Harbor与现有的企业LDAP/ADA集成,用于用户认证和管理。
4)图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。
5)图形UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
6)审计:对存储库的所有操作都进行记录。
7)RESTfulAPI:用于大多数管理操作的RESTfulAPI,易于与外部系统集成。
3.Harbor在架构上主要由五个组件构成1)Proxy:Harbor的Registry、UI、token等服务。
通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
2)Registry:负责储存Docker镜像,并处理Dockerpush/pull命令。
由于要对用户进行访问控制,即不同用户对Dockerimage有不同的读写权限,Registry会指向一个token服务,强制用户的每次Dockerpull/push请求都要携带一个合法的token,Registry会通过公钥对token进行解密验证。
3)Coreservices这是Harbor的核心功能,主要提供以下服务:·UI(Harbor-ui):提供图形化界面,帮助用户管理Registry上的镜像(image),并对用户进行授权。
·Webhook:为了及时获取registry上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。
·Token服务:负责根据用户权限给每个Dockerpush/pull命令签发token.Docker客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
4)Database(Harbor-db):为coreservices提供数据库服务,负责储存用户权限、审计日志、Dockerimage分组信息等数据。
5)Logcollector(Harbor-log):为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析,如图4.1所示。
图4.1Harbor的每个组件都是以Docker容器的形式构建的,因此,使用DockerCompose来对它进行部署。
在源代码中(https://github.com/vmware/Harbor),用于部署Harbor的DockerCompose模板位于Harbor/make/docker-compose.tpl。
4.1.3案例环境1.本案例实验环境本案例环境如表4-1所示。
表4-1创建DockerCompose环境2.案例需求1)通过Harbor创建Docker私有仓库。
2)图形化管理Docker私有仓库镜像。
3.案例实现思路1)部署DockerCompose。
2)部署Harbor服务。
3)通过Harbor来管理上传的私有镜像。
4)维护Harbor。
4.2案例实施4.2.1部署Harbor所依赖的DockerCompose服务1.下载最新Docker-Compose[root@Harbor~]#curl-Lhttps://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname-s`-`uname-m`-o/usr/local/bin/docker-compose[root@Harbor~]#chmod+x/usr/local/bin/docker-compose2.查看Docker-Compose版本判断安装是否成功[root@Harbor~]#docker-compose-vdocker-composeversion1.21.1,build5a3f1a34.2.2部署Harbor服务Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux发行版上。
目标主机需要安装Python、Docker和DockerCompose。
1.下载Harbor安装程序[root@Harbor~]#wgethttp://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz[root@Harbor~]#tarxvfharbor-offline-installer-v1.2.2.tgz-C/usr/local/2.配置Harbor参数文件配置参数位于文件/usr/local/harbor/harbor.cfg中。
安装之前需要修改IP地址。
vim/usr/local/harbor/harbor.cfghostname=192.168.168.91关于Harbor.cfg配置文件中有两类参数,所需参数和可选参数。
1)所需参数:这些参数需要在配置文件Harbor.cfg中设置。
如果用户更新它们并运行install.sh脚本重新安装Harbour,参数将生效。
具体参数如下:·hostname:用于访问用户界面和register服务。
它应该是目标机器的IP地址或完全限定的域名(FQDN),例如192.168.168.91或hub.kgc.cn。
不要使用localhost或127.0.0.1为主机名。
·ui_url_protocol:(http或https,默认为http)用于访问UI和令牌/通知服务的协议。
如果公证处于启用状态,则此参数必须为https。
·max_job_workers:镜像复制作业线程。
·db_password:用于db_auth的MySQL数据库root用户的密码。
·customize_crt:打开或关闭,默认打开。
打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。
当由外部