持续集成与持续交付——Harbor私有仓库的安装部署

一、Harbor简介

1、Harbor简介

  • Harbor是构建企业级私有docker镜像仓库的开源解决方案,它是Docker Registry的更高级封装。
  • 它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库
    注:helm就相当于k8s的yum。
  • 它还整合了两个开源的安全组件,一个是Notary,另一个是Clair。
    Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
    简单来说harbor就是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大。

2、Harbor功能

  • 基于角色的访问控制
    用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制
    镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面
    用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP
    Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理
    所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化
    已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API
    提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。

3、Harbor核心组件

  • Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
  • jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候会需要加载adminserver的配置。
  • Registry:镜像仓库,负责存储镜像文件。
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

4、Harbor和Registry的比较

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势:

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

docker registry的一些缺陷:

  • 缺少认证机制,任何人都可以随意拉取及上传镜像,安全性缺失
  • 缺乏镜像清理机制,镜像可以push却不能删除,日积月累,占用空间会越来越大
  • 缺乏相应的扩展机制来持英文和中文

二、安装部署harbor

  • 参考文档:
    https://goharbor.io/docs/1.10/
  • 部署harbor所需要的环境
    harbor支持k8s的helm安装和本地安装,我这次选择的安装方式是本地安装。
    1.需要安装docker并运行,harbor的运行依赖于docker服务
    2.需要安装docker-compose,他可以把多容器运行构建出一个整体服务。harbor就是多个容器一起运行结果
  • 软件下载:https://github.com/goharbor/harbor/releases
  • 安装
tar zxf harbor-offline-installer-v1.10.
cd harbor/
ls
common.sh  harbor.v1.10.1.tar.gz  harbor.yml  install.sh  LICENSE  prepare

在这里插入图片描述

  • 修改配置文件
    harbor.yml 就是harbor的配置文件,编辑harbor.yml,修改hostname、https证书路径、admin密码
    在这里插入图片描述
  • 添加解析
    在这里插入图片描述
  • 生成证书
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.yang.org.key -x509 -days 365 -out certs/reg.yang.org.crt

在这里插入图片描述
在这里插入图片描述

  • 每次修改完配置文件后都需要运行
[root@server3 harbor]# ./prepare 

在这里插入图片描述
运行 ./install.sh

[root@server3 harbor]# ./install.sh 

在这里插入图片描述

注意: 常用管理命令,一定要在harbor目录中运行

  • 停止服务: docker-compose stop
  • 开始服务: docker-compose start
  • 重启服务:docker-compose restart
  • 停止服务并删除容器:docker-compose down
  • 启动服务并运行容器:docker-compose up

启动成功后,443端口开启:
在这里插入图片描述

三、Harbor的使用

1、GUIl界面使用

浏览器访问172.25.254.53
在这里插入图片描述

2、远程主机上传拉取镜像

(1)上传

  • 把证书发给server2
    在这里插入图片描述
  • 上传镜像
    注意:要在server2上做解析
    在这里插入图片描述
    不登陆无法上传镜像,登陆后可以正常上传。
  • 刷新网页,可以看到上传的nginx
    在这里插入图片描述

(2)拉取

  • 配置daemon文件,并重新加载文件和重启docker
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

  • 拉取镜像:
    在这里插入图片描述
    在日志中可以看到相关记录:
    在这里插入图片描述

3、本地上传拉取镜像

  • 与远程主机上传拉取镜像类似:
    在这里插入图片描述
  • 本地上传的镜像可以在远程主机上进行拉取:
    在这里插入图片描述
  • 日志上也会对这一过程有记录,使用admin身份上传,使用匿名身份拉取:
    在这里插入图片描述

4、成员管理

新建一个项目yang来用于实验成员管理功能:
在这里插入图片描述
新建一个用户yll,并给他开发人员角色:
在这里插入图片描述
在这里插入图片描述
开发人员角色可以上传,不能进行删除等操作。

四、为Harbor添加内容扫描

  • 暂停之前的容器,并清理配置文件:
docker-compose stop
./prepare 
  • 加上内容信任,扫描器和helm仓库重新安装:
./install.sh --with-notary --with-clair --with-chartmuseum

在这里插入图片描述

  • 刷新网页端可以看到多了一些配置:
    在这里插入图片描述
  • 可以看到以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描:
    在这里插入图片描述
    扫描之后:
    在这里插入图片描述
  • 也可以配置镜像上传的时候自动扫描:
    在这里插入图片描述
    在这里插入图片描述

五、配置Harbor内容签名

1、配置签名

签名属于内容信任,没有签名的内容可以选择不部署,从上面图中可以看到刚上传的内容是没有签名的。

内容信任的服务端口是4443,接下来就进行harbor内容信任的配置:

  • 勾选相关选项:
    在这里插入图片描述
  • 将证书放在指定位置并打开内容信任功能:
    在这里插入图片描述
  • 测试上传
    注意:签名与tag中的v1绑定,上传时必须指定tag中版本,要不然会跳过签名。
    在这里插入图片描述
    刷新页面可以发现,新上传的镜像既进行了内容扫描又进行了内容签名:
    在这里插入图片描述
    之后上传时每次都需要输入根密钥和仓库密钥,当tag不同时仅需要输入仓库密钥。
    打开项目内容信任功能,则不允许没有签名的镜像上传下载。

2、删除签名镜像

  • 已签名的镜像是不能删除的,直接删除会报错:
    在这里插入图片描述
  • 如果需要删除则需要先删除签名:
##查看签名
docker trust inspect
##删除签名
docker trust revoke

在这里插入图片描述

  • 删除签名后,可以正常删除镜像:
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值