Harbor 部署、操作使用指南
1. 概述
Harbor是VMware公司开源的企业级Docker Registry 项目,其目标是帮助用户迅速搭建一个 企业级的Docker Registry 服务。虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署企业自己的私有镜像仓库也是非常必要的。
Harbor以docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成,以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker容器的形式构建的,使用docker-compose来对它进行部署;用于部署Harbor的docker-compose模板位于/usr/local/bin/harbor/docker-compose.yml(自定义);Docker harbor有可视化的web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能。
1.1 harbor的优势:
(1)基于角色控制:有管理员与普通用户,可赋权普通用户,比如只能上传和下载,可根据项目来进行操作和管理。
(2)基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
(3)支持LDAP/AD:Harbor 可以集成企业内部有的AD/LDAP (类似数据库的一-张表),用于对已经存在的用户认证和管理。
(4)镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
(5)图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
(6)审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
(7)支持RESTful API:RESTful API提供给管理员对于Harbor 更多的操控,使得与其它管理软件集成变得更容易。
(8)Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。
1.2 harbor的核心组件:
Harbor在架构上主要有Proxy、 Registry、 Core services、 Database ( Harbor-db)、Log collector ( Harbor-log)、Job services六个组件。
(1)Proxy:这是一个反向代理组件;Harbor 的Registry、UI、Token 服务等组件,都处在nginx 反向代理后边。该代理将来自浏览器、docker clients .的请求转发到后端不同的服务上。
(2)Registry:负责储存Docker 镜像,并处理Docker push/pull 命令;由于要对用户进行访问控制,即不同用户对Docker镜像有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,Registry会通过公钥对Token 进行解密验证。
(3)Core services: Harbor的核心功能,主要提供以下3个服务:
- UI (harbor-ui) :提供图形化界面,帮助用户管理Registry. 上的镜像(image) ,并对用户进行授权。
- WebHook:网站的一些服务功能,为了及时获取Registry.上 image状态变化的情况,在Registry上配置Webhook, 把状态变化传递给UI模块。
- Token 服务:令牌,提供身份验证服务,负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token, 会被重定向到Token 服务,获得Token 后再重新向Registry 进行请求。
(4)Database (harbor-db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。
(5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
(6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。
Harbor的每个组件都是以Docker 容器的形式构建的,因此,使用Docker Compose 来对它进行部署。通过在docker- compose . yml所在目录中执行docker-compose ps命令来查看。
1.3 harbor主要功能及优势
- 基于角色的访问控制
用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 基于镜像的复制策略
镜像可以在多个Registry实例中复制(可以将仓库中的镜像同步到远程的Harbor,类似于MySQL主从同步功能),尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面
用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- 支持 AD/LDAP
Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 镜像删除和垃圾回收
Harbor支持在Web删除镜像,回收无用的镜像,释放磁盘空间。image可以被删除并且回收image占用的空间。
- 审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- RESTful API
RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单
提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
1.4 harbor的简易架构:
如图所示:
所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。
2. 部署环境搭建(使用云服务器部署)
2.1 卸载服务器中的旧版本docker及其安装时自动安装的所有包
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
#删除docker其他没有卸载
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P #删除无用的相关的配置文件
sudo apt-get autoremove docker-ce-*
#删除docker的相关配置&目录
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker
#查看确定docker卸载完毕
docker --version
2.2 安装最新版的docker及docker-compose
①安装必要的系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common gnupg-agent
②安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
③写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
④安装Docker及其组件
sudo apt-get -y update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo apt install -y python3-pip
sudo pip3 install docker-compose
2.3 创建证书(如不使用域名访问可忽略跳过此步骤)
a. 创建一个保存证书的目录
mkdir -p /data/cert/
b. 生成证书颁发机构证书(使用server.yin123.com登录)
#生成 CA 证书私钥
sudo openssl genrsa -out ca.key 4096
#生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.yin123.com" \
-key ca.key \
-out ca.crt
c. 生成服务器证书
#生成 CA 证书私钥
sudo openssl genrsa -out server.yin123.com.key 4096
#生成证书签名请求 (CSR)
sudo openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.yin123.com" \
-key server.yin123.com.key \
-out server.yin123.com.csr
#生成 x509 v3 扩展文件
sudo vim v3.ext
v3.ext内容如下
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=server.yin123.com
DNS.2=yin123.com
DNS.3=server
#使用该v3.ext文件Harbor 主机生成证书
sudo openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.yin123.com.csr \
-out server.yin123.com.crt
d. 向 Harbor 和 Docker 提供证书
#将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中
cp server.yin123.com.crt /data/cert/
cp server.yin123.com.key /data/cert/
#转换crt为cert 供 Docker 使用
#Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书
openssl x509 -inform PEM -in server.yin123.com.crt -out server.yin123.com.cert
#将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。必须先创建文件夹
mkdir -d /etc/docker/certs.d/server.yin123.com/
cp server.yin123.com.cert /etc/docker/certs.d/server.yin123.com/
cp server.yin123.com.key /etc/docker/certs.d/server.yin123.com/
cp ca.crt /etc/docker/certs.d/server.yin123.com/
#重启docker
systemctl restart docker
3. 下载、安装 harbor
Harbor 提供了多种安装方式:
- 在线安装:通过在线安装包安装 Harbor,在安装过程中需要从 Docker Hub 获取预置的 Harbor 官方组件镜像。
- 离线安装:通过离线安装包安装 Harbor,从离线安装包中装载所需要的 Harbor组件镜像。
- 源码安装:通过编译源码到本地安装 Harbor。
- 基于 Helm Chart 的安装:通过 Helm 安装 Harbor Helm Chart 到 Kubernetes 集群。
这里采用离线安装,去官网下载想要的版本,这里以2.4.2版本为例。
a. 将下载下来的压缩包传到服务器中,并解压
tar xvf harbor-offline-installer-v2.4.2.tgz
b. 复制修改配置文件
新版本的harbor配置文件已经改为用harbor.yml而不是harbor.cfg
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改相应参数,参考下图,根据实际情况
c. 执行安装脚本
sudo ./install.sh
sudo ./install.sh --with-notary --with-notary --with-trivy --with-chartmuseum
同时安装插件Notary、Trivy 和Chart 存储库服务(可选)。
d. 查看组件的启动情况
docker ps
cd 到 docker-compose.yml的目录下docker-compose ps
e.web访问,进行初始化
此处没有域名,所以使用 ip 登录
输入之前设置的用户名和密码就可以登录了!
4. 卸载
卸载harbor步骤:(针对脚本一键安装)
docker-compose down #停止 docker-compose
rm -rf /data * #删除挂载的harbor持久化数据的目录内容
rm -rf /opt/harbor #删除harbor目录
docker-compose up -d #重启
5. 基础操作使用
参考:Harbor docs | Harbor Administration
5.1 命令行登录、拉取、上传等基础操作
命令行登录
新建一个项目
进入项目,可以看到不同的推送命令
命令行拉取镜像
# 登陆
docker login -u admin -p Harbor12345 http://47.97.177.130
# 下载镜像进行测试
docker pull busybox
# 镜像打标签 busybox:镜像名 hjj_test:仓库名
docker tag busybox 47.97.177.130/hjj_test/busybox:v1
# 推送镜像到Harbor
docker push 47.97.177.130/hjj_test/busybox:v1
# 从仓库拉取镜像
docker pull https://47.97.177.130/hjj_test/busybox:v1
# 查看镜像
docker images
5.2 配置数据库身份验证
如果在数据库中创建用户,Harbor 会被锁定在数据库模式,将无法更改为其他身份验证模式。
Harbor有2种认证方式:auth_mode 使用的身份验证类型
db_auth——默认,凭据存储在数据库中
ldap——对于LDAP身份验证,需将其设置为ldap_auth
5.3 项目创建权限及仓库只读设置
在只读模式下,Harbor 允许docker pull 但阻止docker push和删除存储库和标签。
- 受限访客:受限访客没有项目的完全读取权限。他们可以拉取镜像但不能推送,而且他们看不到日志或项目的其他成员。例如,管理员可以为来自不同组织的共享项目访问权限的用户创建受限访客。
- 来宾:来宾对指定项目具有只读权限。他们可以拉取和重新标记镜像,但不能推送。
- 开发者:开发者拥有项目的读写权限。维护者:维护者拥有超越“开发者”的权限,包括扫描镜像、查看复制作业以及删除镜像和掌舵图的能力。
- ProjectAdmin:创建新项目时,可以分配给项目的“ProjectAdmin”角色。“ProjectAdmin”除了读写权限外,还有一些管理权限,如添加和删除成员、启动漏洞扫描等。
- Harbor 系统管理员:“Harbor 系统管理员”拥有最多的权限。除了上述权限外,“Harbor 系统管理员”还可以列出所有项目、设置普通用户为管理员、删除用户以及为所有镜像设置漏洞扫描策略。公共项目“库”也归管理员所有。
- 匿名:当用户未登录时,该用户被视为“匿名”用户。匿名用户无权访问私有项目,而对公共项目具有只读访问权限。
5.4 配置项目配额
要对资源使用进行控制,可以为项目设置配额,限制项目可以使用的存储容量,默认情况下,所有项目都有无限的存储使用配额。
5.5 配置复制
复制允许用户以拉取或推送模式在 Harbor 和非 Harbor 注册表之间复制资源。
管理注册表:Registries下可以列出、添加、编辑和删除注册表,只能删除未被任何规则引用的注册表。
创建复制规则参考:Harbor docs | Creating a Replication Rule
5.6 漏洞扫描
Harbor 通过开源项目 Trivy 提供对图像漏洞的静态分析,必须在安装 Harbor 实例时启用 Trivy(通过附加安装选项--with-trivy)。
5.7 创建系统机器人帐户
Harbor v2.2 引入了管理员创建系统机器人帐户的功能,可以使用这些帐户在 Harbor 实例中运行自动化操作。
更多推荐
所有评论(0)