devops之harbor(代码片段)

author author     2022-12-04     382

关键词:

技术图片

一、 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的版本需要一致)比如,如果在拉去一个镜像之后并启动镜像时:[[email protected] harbor]#docker run -it centos echo hello world:
如果出现如下错误:
技术图片
或者:
技术图片
可能是因为docker的版本不对:

#这里我们需要将centos中自带的docker删除:
    [[email protected] harbor]#yum remove docker-ce docker-ce-cli containerd.io
#查看docker的版本
yum list docker-ce --showduplicates | sort -r
#下载对应的版本:
[[email protected] harbor]#yum remove docker-ce docker-ce-cli containerd.io
#启动docker
[[email protected] harbor]#systemctl start docker

此时在尝试,运行一个镜像,如果没问题,说明docker安装成功!!!

#②  安装docker-compose
[[email protected] harbor]# yum install python-pip 
[[email protected] harbor]# pip install docker-compose
#测试
[[email protected] harbor]# docker-compose –version
#卸载
#[[email protected] 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
#下载成功后:
[[email protected] harbor]#  tar zxf harbor-offline-installer-v1.1.1.tgz
[[email protected] 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。
#④执行安装脚本:
[[email protected] harbor]# ./install.sh

技术图片
看到如下界面表示安装成功,此时可以根据你设置的hostname和port访问harbor的界面:
技术图片
这里我们也可以看到harbor启动的docker容器:
技术图片
注意:执行这条命令时,所在的目录中一定要有:docker-compose.yml文件。

#补充命令:
#启动Harbor  d
[[email protected] harbor]#docker-compose start 
#停止Harbor  
[[email protected] harbor]#docker-comose stop 
#重启Harbor 
[[email protected] harbor]#docker-compose restart

2. harbor上传和下载镜像的测试

1)上传操作

#1.创建/etc/docker/daemon.json文件,在文件中指定仓库地址
[[email protected] harbor]#cat > /etc/docker/daemon.json << EOF  "insecure-registries":["hostname"]  EOF
#注意这里的hostname是harbor.cfg配置的那个。
#2.重启docker服务
[[email protected] harbor]# systemctl daemon-reload
[[email protected] harbor]# systemctl restart docker
#3.查看docker服务的本地registry
[[email protected] harbor]# systemctl info

技术图片

#4.下载镜像,上传至本地服务
[[email protected] harbor]# docker pull busybox    #下载
[[email protected] harbor]# docker tag busybox 192.168.130.101/library/busybox:0.1 #修改标签(ip/项目/名称)
[[email protected] harbor]# docker login 192.168.130.101 #登录自己的私有仓库
[[email protected] harbor]# docker push 192.168.130.101/library/busybox:0.1    #上传到私用仓库

技术图片

2)下载操作

[[email protected] harbor]# docker pull 192.168.130.101/library/busybox:0.1
#查看
[[email protected] harbor]# docker images

技术图片

3. 操作的常见问题

遇到的问题就是Harbor我配置的是http访问,但是docker客户端默认都是https访问Harbor,所以就会产生错误。
技术图片
遇到上面的问题表示docker默认访问仓库时都是使用的https协议,而我们的仓库配置的是http:

#解决方法一:
#在docker启动的配置仓库地址添加如下内容:
--insecure-registry rgs.unixfbi.com
[[email protected] harbor]#vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry rgs.unixfbi.com    #不推荐  ,反正 我使用这个连docker都起不来
#解决方法二:
#创建/etc/docker/daemon.json文件,在文件中指定仓库地址
 "insecure-registries":["私有仓库的地址"]  
#然后重启docker就可以了 
[[email protected] harbor]#systemctl restart docker

linux12devops-->10jenkins流水线容器化+harbor私有仓库(代码片段)

Jenkins流水线容器化+Harbor私有仓库将Jenkins的编译环境迁移至k8s中Jenkins中自动构建项目的类型Jenkins中自动构建项目的类型有很多,常用的有以下三种:自由风格软件项目(FreeStyleProject)Maven项目(MavenProject&#... 查看详情

harbor实践之初识harbor(代码片段)

1什么是Harbor  harbor是VMware公司开源的企业级Registry项目,其的目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。2什么是Registry  Registry是一个无状态的,高可扩展的服务器端应用程序,用于存储和分发DockerImage。3第一... 查看详情

devops实践之gitlab安装部署(代码片段)

AllGitLabpackagesarepostedtoour packageserver andcanbedownloaded.Wemaintainfiverepos:GitLabEE:forofficialEnterpriseEditionreleasesGitLabCE:forofficialCommunityEditionreleasesUnstable:forrele 查看详情

devops实践之持续集成jenkins(代码片段)

一、安装Jenkins(1)下载并安装配置JavaDevelopmentKit8[[email protected]~]#rpm-ivhjdk-8u161-linux-x64.rpmPreparing...###########################################[100%]1:jdk1.8################################### 查看详情

docker私有仓库之---harbor仓库的搭建及使用(代码片段)

一、什么是harborHarbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。Harbor以Docker公司开源的Registry为基础,提供了图形管理UI、基于角色的访问控制(RoleBasedAccessControl)、... 查看详情

docker搭建私有仓库之harbor(代码片段)

HarborHarbor是构建企业级私有docker镜像的仓库的开源解决方案,它是DockerRegistry的更高级封装,它除了提供友好的WebUI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载... 查看详情

devops之nexus(代码片段)

一、Nexus的介绍?1.私服的介绍??私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建.有了私服之后,当maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求... 查看详情

云原生时代的devops平台设计之道(代码片段)

令人“厌恶”的DevOps首先,我非常希望你能先看一看引言中提到的扯淡的DevOps,我们开发者根本不想做运维!这篇文章。这篇文章从亚马逊云科技社区参与负责人EmilyFreeman的一条推特入手,观察了很多留言后,得出了文章标题这... 查看详情

深入浅出devops:私有镜像仓库harbor

查看详情

深入浅出devops:jenkins基于harbor部署

查看详情

实现devops开源工具整合之环境准备(代码片段)

 序号分类姓名范围要求1Owner林志国 2作者林志国 3审核人  4审核人  5审核人  6批准人               目录文档OARP.文档修订记录 查看详情

gitlab+drone+harbor之ci自动化流程(代码片段)

流程结构提交代码至gitlab仓库,drone自动同步gitlab项目,使用gitlab中的.drone.yaml文件执行,使用gitlab中的dockerfile构建镜像,推送至仓库。服务器服务器电脑vmware安装的虚拟主机cpu:2核内存:4GIP:192.168.1... 查看详情

实现devops开源工具整合之gitlab-ce安装(代码片段)

 文档OARP序号分类姓名范围要求1Owner林志国 2作者林志国 3审核人  4审核人  5审核人  6批准人   文档修订记录序号版本号修订日期修订概述修订人审核人批准人备注1V1.02018.07.09创建林志... 查看详情

devops持续集成开发——jenkins流水线发布一个dockerharbor仓库版的后端maven项目(代码片段)

...件发布一个docker环境的后端maven项目,并使用docker的harbor仓库完成镜像的存储,通过拉取harbor仓库中的项目镜像,完成后端项目的发布,关于harbor仓库的搭建,可以参考往期博客内容。这里要特别注意的是࿰... 查看详情

devops持续集成开发——jenkins的全局工具配置之maven环境安装及配置(代码片段)

前言本节内容我们主要介绍jenkins中如何集成自定义的maven环境及流水化组件maven插件的安装,这样我们就可以发布流水化的maven项目工程。正文上传并安装maven①上传maven安装包②解压maven安装包unzipapache-maven-3.8.3-bin.zip③配置ma... 查看详情

devops持续集成开发——jenkins的全局工具配置之java环境配置(代码片段)

前言在新版本的jenkins中,默认使用的jdk最低版本是11,这样就导致jdk8的项目无法自动编译打包,本节内容我们主要介绍在全局工具配置中如何配置jdk8的编译环境,可根据实际需求安装配置合适的jdk编译环境。正... 查看详情

devops利器之docker入门篇(代码片段)

...为DockerInc.Docker项目已加入Linux基金会,并遵循Apache2.0协议,代码托管在Github:Docker源码地址各大操作系统现都支持Docker,并且最新的Linux发行版RedHat、CentOS、Ubuntu中均已默认带有Docker软件包.Docker的构想是要实现“Build,ShipandRunAnyApp,Anywhe... 查看详情

设计一个简单的devops系统(代码片段)

前言公司设计的RDMS挺好用的,我也照猫画虎简单的设计一个DevOps系统,与大家分享,不足之处欢迎拍砖,以免误人子弟前置条件gitlabgitlab-runnerk8s1.gitlab创建群组创建群组的好处是,对项目进行分组,群组内的资源可以共享,这里创建了一... 查看详情