Harbor系列之1:介绍、架构及工作流程说明

Harbor介绍、架构及工作流程说明

Harbor 是一个用于存储、签名和扫描内容的企业级容器镜像注册表项目。由 VMware 开发并于 2016 年开源。Harbor 提供了一些关键特性,使其成为企业使用的理想选择。

1. Harbor 介绍

1.1 什么是 Harbor

Harbor 是一个开源的云原生容器镜像仓库项目,旨在为企业级用户提供安全、可扩展、灵活的容器镜像管理解决方案。Harbor 提供了对镜像的管理、访问控制、镜像签名、安全扫描等功能,并且支持多种身份验证方式,可以与企业的 LDAP/AD 集成。

1.2 Harbor 的主要功能

  1. 基于角色的访问控制:通过基于角色的访问控制(RBAC)机制,可以对用户进行精细化的权限管理,确保镜像安全。
  2. 镜像复制:支持多种注册表之间的镜像复制,可以在多个 Harbor 实例或者其他 Docker 注册表之间复制镜像。
  3. 镜像签名和安全扫描:集成了 Notary 项目,可以对镜像进行签名,并通过 Clair 项目进行镜像漏洞扫描,确保镜像安全。
  4. 多租户支持:通过项目机制支持多租户,便于组织内部分不同团队独立管理自己的镜像仓库。
  5. 用户认证:支持多种用户认证方式,包括 LDAP、OIDC 等,可以与企业的用户认证系统集成。
  6. 审计日志:提供详细的操作日志,便于管理员审计和追踪用户操作。

2. Harbor 架构

从2.0 版本开始,Harbor 已经演变为一个完全符合 OCI 标准的云原生制品注册表。

符合 OCI 标准的云原生制品注册表意味着它现在支持 OCI 镜像和 OCI 镜像索引(https://github.com/opencontainers/image-spec/blob/master/image-index.md)。OCI 镜像索引是一种更高级别的清单,指向一个镜像清单列表,适用于一个或多个平台。例如,Docker 清单列表就是 OCI 镜像索引的一个流行实现。这也意味着 Harbor 现在完全支持多架构镜像。

通过 Harbor V2.0,用户可以管理符合 OCI 镜像规范的镜像、清单列表、Helm charts、CNABs、OPAs 等等。它还允许拉取、推送、删除、标记、复制和扫描这些类型的制品。现在也可以对镜像和清单列表进行签名。

下图展示了Harbor的架构总览:

arcitecture
如上图所示,Harbor 包含以下组件,并分布在三个层级中:

2.1 数据访问层

  1. K-V 存储:由 Redis 组成,提供数据缓存功能,并支持为作业服务临时持久化作业元数据。

  2. 数据存储:支持多种存储方式作为注册表(registry)和 ChartMuseum 的后端存储,实现数据持久化。有关详细信息,请参阅 Docker 网站上的驱动列表文档和 ChartMuseum 的 GitHub 仓库。

  3. 数据库:存储 Harbor 模型的相关元数据,如项目、用户、角色、复制策略、标签保留策略、扫描器、chart 和镜像。Harbor 采用 PostgreSQL 作为数据库。

2.2 基础服务

2.2.1 Proxy(代理)

由 Nginx 服务器组成的反向代理,提供 API 路由功能。Harbor 的组件(如核心服务、注册表、Web 门户和令牌服务等)都位于此反向代理之后。代理将来自浏览器和 Docker 客户端的请求转发到各种后端服务。

2.2.2 核心服务

Harbor 的核心服务,主要提供以下功能:

  1. API 服务器:一个接受 REST API 请求的 HTTP 服务器,依赖于其子模块(如“认证与授权”、“中间件”和“API 处理程序”)响应这些请求。

    • 认证与授权

      • 请求由认证服务保护,认证服务可以由本地数据库、AD/LDAP 或 OIDC 提供。
      • 启用 RBAC 机制,对相关操作执行授权,例如:拉取/推送镜像。
      • 令牌服务旨在根据用户在项目中的角色,为每个 Docker 推送/拉取命令颁发令牌。如果从 Docker 客户端发送的请求中没有令牌,注册表将把请求重定向到令牌服务。
    • 中间件:预处理某些请求,以确定它们是否符合要求并可以传递给后端组件进行进一步处理。某些功能作为中间件实现,如“配额管理”、“签名检查”、“漏洞严重性检查”和“机器人账户解析”等。

    • API 处理程序:处理相应的 REST API 请求,主要关注解析和验证请求参数,在相关 API 控制器上完成业务逻辑,并写回生成的响应。

  2. 配置管理器:涵盖所有系统配置的管理,如认证类型设置、邮件设置和证书等。

  3. 项目管理:管理项目的基础数据和相应的元数据,用于隔离管理的制品。

  4. 配额管理器:管理项目的配额设置,并在发生新的推送时执行配额验证。

  5. Chart 控制器:将与 Chart 相关的请求代理到后端的 ChartMuseum,并提供若干扩展以改善 Chart 管理体验。

  6. 保留管理器:管理标签保留策略,执行并监控标签保留过程。

  7. 内容信任:在后端 Notary 提供的信任功能上添加扩展,以支持平滑的内容信任过程。目前仅支持容器镜像签名。

  8. 复制控制器:管理复制策略和注册表适配器,触发并监控并发复制过程。许多注册表适配器已经实现:

    • Distribution (Docker 注册表)
    • Docker Hub
    • 华为 SWR
    • 亚马逊 ECR
    • 谷歌 GCR
    • Azure ACR
    • 阿里 ACR
    • Helm Hub
    • Quay
    • Artifactory
    • GitLab Registry
  9. 扫描管理器:管理由不同提供商适配的多个配置扫描器,还提供指定制品的扫描摘要和报告。目前支持的扫描器包括:

    • Aqua Security 提供的 Trivy 扫描器;Anchore 提供的 Anchore Engine 扫描器;由 CentOS (Redhat) 赞助的 Clair 扫描器;DoSec 提供的 DoSec 扫描器

    • 目前,仅支持对基于镜像的容器镜像或 bundle(如清单列表/OCI 索引或 CNAB bundle)进行扫描。

  10. 通知管理器(Webhook):Harbor 中配置的一种机制,可以将 Harbor 中制品(artifact)状态的变化传播到在 Harbor 中配置的 Webhook 端点。第三方可以通过监听相关的 Webhook 事件来触发一些后续操作。目前支持两种方式:

    • HTTP Post 请求
    • Slack 频道
  11. OCI 制品管理器:管理整个 Harbor 注册表中所有 OCI 制品生命周期的核心组件。它提供了管理制品元数据及相关附加内容(如扫描报告、容器镜像的构建历史和 readme、helm charts 的 dependencies 和 value.yaml 等)的 CRUD 操作,还支持管理制品标签和其他有用的操作。

  12. 注册表驱动:实现为注册表客户端 SDK,与底层注册表(目前为 Docker Distribution)进行通信。“OCI 制品管理器”依赖此驱动从位于底层注册表的指定制品中获取附加信息(如清单甚至配置 JSON)。

2.2.3 作业服务

通用作业执行队列服务,允许其他组件/服务通过简单的 RESTful API 提交并发执行异步任务的请求。

2.2.4 日志收集器

日志收集器,负责将其他模块的日志收集到一个地方。

2.2.5 GC 控制器

管理在线垃圾回收(GC)计划设置,并启动和跟踪 GC 进度。

2.2.6 Chart Museum

第三方 Chart 仓库服务器,提供 Chart 管理和访问 API。了解更多详细信息,请点击 这里。

2.2.7 Docker Registry

第三方注册表服务器,负责存储 Docker 镜像并处理 Docker 推送/拉取命令。由于 Harbor 需要对镜像强制执行访问控制,注册表会将客户端重定向到令牌服务,以获取每个拉取或推送请求的有效令牌。

2.2.8 Notary

第三方内容信任服务器,负责安全发布和验证内容。了解更多详细信息,请点击 这里。

2.3 消费者

作为一个标准的云原生制品注册表(artifact registry),相关的客户端自然会得到支持,例如 Docker CLI、Notary 客户端、兼容 OCI 的客户端(如 Oras)和 Helm。除了这些客户端,Harbor 还提供了一个 Web 门户,便于管理员轻松管理和监控所有制品。

Web 门户:一个图形用户界面,帮助用户管理注册表中的镜像。

3. 工作流程

3.1 docker登录过程

假设 Harbor 部署在 IP 为 192.168.1.10 的主机上。用户运行以下 Docker 命令向 Harbor 发送登录请求:

docker login 192.168.1.10

用户输入所需的凭据后,Docker 客户端向地址“192.168.1.10/v2/”发送一个 HTTP GET 请求。Harbor 的不同容器将按照以下步骤处理该请求:

(a) 首先,代理容器(监听端口 80)接收到该请求。容器中的 Nginx 将请求转发到后端的 Registry 容器。

(b) Registry 容器已配置为基于令牌的认证,因此返回错误代码 401,通知 Docker 客户端从指定的 URL 获取有效的令牌。在 Harbor 中,该 URL 指向核心服务的令牌服务。

© 当 Docker 客户端接收到该错误代码后,它向令牌服务 URL 发送请求,将用户名和密码嵌入到请求头中,按照 HTTP 规范的基本认证进行操作。

(d) 该请求通过端口 80 发送到代理容器后,Nginx 根据预配置的规则再次将请求转发到 UI 容器。UI 容器中的令牌服务接收到请求,解码请求并获取用户名和密码。

(e) 获取到用户名和密码后,令牌服务检查数据库,并通过 MySQL 数据库中的数据进行用户认证。当令牌服务配置为 LDAP/AD 认证时,它会对外部 LDAP/AD 服务器进行认证。认证成功后,令牌服务返回一个表示成功的 HTTP 代码。HTTP 响应体中包含由私钥生成的令牌。

此时,一个 Docker 登录过程已完成。Docker 客户端将步骤 © 中的经过编码的用户名/密码保存到本地的一个隐藏文件中。

3.2 docker推送镜像过程

(我们省略了代理转发步骤。上图展示了 Docker 推送过程中文件各组件之间的通信。)

用户成功登录后,Docker 镜像通过 Docker Push 命令发送到 Harbor:

docker push 192.168.1.10/library/hello-world

(a) 首先,Docker 客户端通过向注册表(registry)发送请求,重复类似于登录的过程,然后获取令牌服务的 URL;

(b) 随后,当联系令牌服务时,Docker 客户端提供额外的信息以申请推送操作镜像(library/hello-world)的令牌;

(c) 在接收到 Nginx 转发的请求后,令牌服务查询数据库以查找用户的角色和推送镜像的权限。如果用户具有适当的权限,令牌服务会对推送操作的信息进行编码,并使用私钥对其签名,生成令牌返回给 Docker 客户端;

(d) Docker 客户端获取到令牌后,发送带有令牌的推送请求到注册表。注册表接收到请求后,使用公钥解码令牌并验证其内容。公钥与令牌服务的私钥相对应。如果注册表发现令牌对推送镜像有效,则开始镜像传输过程。

4. 参考资料

  • Harbor 官方文档
  • GitHub Harbor 项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/380307.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-Boot基础--yaml

目录 Spring-Boot配置文件 注意: YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件,但是spring-Boot中还是存在.prope…

基于GTX的64B66B编码的自定义接收模块(高速收发器二十二)

点击进入高速收发器系列文章导航界面 1、自定义PHY顶层模块 前文设计了64B66B自定义PHY的发送模块,本文完成自定义PHY剩余的模块的设计,整体设计框图如下所示。 其中phy_tx是自定义PHY的发送数据模块,scrambler是加扰模块,rx_slip…

多口适配器,给您的生活增添便利

随着科技的快速发展,我们的生活已离不开各种各样的电子设备,智能手机、平板电脑、智能手表、无线耳机……它们共同构建了我们丰富多彩的数字生活。然而,面对众多设备的充电需求,传统的单一充电口已难以满足现代人的使用习惯。在这…

使用JWT双令牌机制进行接口请求鉴权

在前后端分离的开发过程中,前端发起请求,调用后端接口,后端在接收请求时,首先需要对收到的请求鉴权,在这种情况先我们可以采用JWT机制来鉴权。 JWT有两种机制,单令牌机制和双令牌机制。 单令牌机制服务端…

IDEA的详细设置

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样

米哈游的《绝区零》最近在网上爆火呀,不过很多人都想知道mac电脑能不能玩《绝区零》,今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏,Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…

常见排序算法总结

文章目录 比较排序冒泡排序选择排序插入排序归并排序快速排序堆排序希尔排序 非比较排序(桶排序)计数排序基数排序 比较排序 冒泡排序 嵌套循环,每次内层循环执行时,数组的每两个元素交换,将一个最大/小的数排到数组…

技术成神之路:设计模式(八)责任链模式

介绍 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象依次处理请求,避免请求的发送者和接收者之间的显式耦合。该模式通过将多个可能处理请求的对象连接成一条链,并沿着这条链传递请求…

达梦数据库 DISQL连接数据库与执行SQL、脚本的方法

DISQL连接数据库与执行SQL、脚本的方法 1.DISQL介绍2.DISQL连接数据库的方法2.1 本地连接2.2 远程连接2.3 CONN连接 3.执行SQL、脚本的方法3.1 通过DISQL登录后在字符界面3.2 启动DISQL时运行脚本3.3 进入DISQL后,通过start命令运行脚本3.4 使用EDIT命令编辑脚本 1.…

ubuntu 24 PXE Server (bios+uefi) 批量部署系统

pxe server 前言 PXE(Preboot eXecution Environment,预启动执行环境)是一种网络启动协议,允许计算机通过网络启动而不是使用本地硬盘。PXE服务器是实现这一功能的服务器,它提供了启动镜像和引导加载程序,…

解决npm install(‘proxy‘ config is set properly. See: ‘npm help config‘)失败问题

摘要 重装电脑系统后,使用npm install初始化项目依赖失败了,错误提示:‘proxy’ config is set properly…,具体的错误提示如下图所示: 解决方案 经过报错信息查询解决办法,最终找到了两个比较好的方案&a…

git commit报错: pre-commit hook failed (add --no-verify to bypass)

原因: 在提交前做代码风格检查,若检查不通过,则提交失败 解决方案:进入项目的.git>hooks目录,找到pre-commit文件,删除即可

【银河麒麟服务器操作系统】java进程oom现象分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 现象描述 某服务器系统升级内核至4.19.90-25.22.v2101版本后仍会触发oom导致java进程被kill。 现象分析 oom现象分析 系统messages日志分析,故…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…

html+canvas 实现签名功能-手机触摸

手机上的效果图 需要注意&#xff0c;手机触摸和鼠标不是一个事件&#xff0c;不能通用&#xff0c;上一篇是关于使用鼠标的样例 相关代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewpo…

Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习&#xff08;Language Models and Representation Learning&#xff09; 1 语言模型 N-Gram模型 from collections import defaultdictsentences [The swift fox jumps over the lazy dog.,The swift river flows under the ancient bridge.,The swift br…

Java关于JDBC的理解

JDBC Java Database Connectivity&#xff1a;意为Java数据库连接。是Java提供的一组独立于任何数据库管理系统的API。Java提供接口规范&#xff0c;由各个数据库厂商提供接口的实现&#xff0c;厂商提供的实现类封装成jar文件&#xff0c;也就是我们俗称的数据库驱动jar包。我…

PyTorch张量数值计算

文章目录 1、张量基本运算2、阿达玛积3、点积运算4、指定运算设备⭐5、解决在GPU运行PyTorch的问题 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&am…

LDR6020:重塑iPad一体式有线键盘体验的创新力量

在移动办公与娱乐日益融合的时代&#xff0c;iPad凭借其强大的性能和便携性&#xff0c;成为了众多用户不可或缺的生产力工具。然而&#xff0c;为了进一步提升iPad的使用体验&#xff0c;一款高效、便捷的键盘成为了不可或缺的配件。今天&#xff0c;我们要介绍的&#xff0c;…

云计算复习--虚拟化技术

文章目录 虚拟化技术定义与原理虚拟机监视器&#xff08;VMM&#xff09;虚拟化技术服务器虚拟化存储虚拟化网络虚拟化应用虚拟化 关键技术新型虚拟化技术发展进展作业 虚拟化技术定义与原理 定义&#xff1a;虚拟化技术是一种将计算机物理实体&#xff08;如服务器、存储设备…