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

news2024/9/21 4:39:29

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.coloradmin.cn/o/1936916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(034)

目录 一、用法精讲 101、pandas.Series.__array__魔法方法 101-1、语法 101-2、参数 101-3、功能 101-4、返回值 101-5、说明 101-6、用法 101-6-1、数据准备 101-6-2、代码示例 101-6-3、结果输出 102、pandas.Series.get方法 102-1、语法 102-2、参数 102-3、…

ETL数据同步之DataX,附赠一套DataX通用模板

今天跟大家分享数据同步datax的模板,小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛? 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一,什么是DataX D…

linux远程主机和windows互传

一.winscp 最简单,但有时候会出现连不上 二 .MobaXterm 可以选择多种连接方式 二. 配置samba服务器 1. 新增samba用户 sudo pdbedit -L -v 查看当前samba用户 sudo smbpasswd -a guoziyi 添加samba用户 sudo smbpasswd -x guoziyi 删除samba用户 2. 编辑/etc…

LabVIEW多串口通信

随着现代工业控制对数据采集和处理效率的要求不断提升,传统的单串口通信已无法满足多通道数据传输与大规模数据存取的需求。开发一种基于LabVIEW的多串口通信及数据存储系统,以提升数据处理速度和存储效率,保障生产线的稳定运行显得尤为重要。…

常见排序算法总结

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

语音合成-TTS文字转语音(专业版)

语音合成-TTS文字转语音(专业版) 一、工具简介 *使用强大的智能AI语音库,合成独具特色接近真人语音的朗读音频。 *使用极具表现力和类似人类的声音,使文本阅读器和已启用语音的助理等方案栩栩如生。 *用途:这个语音工具,不仅可…

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(三)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上…

LeetCode岛屿的最大面积(深度搜索)/什么是深搜,简单案例回顾图用邻接表实现图的深度优先遍历。

看这道题不懂深度搜索的可以看看下面讲述 岛屿的最大面积 解题思路 代码 class Solution {int dfs(vector<vector<int>>& grid, int cur_i, int cur_j) {//确定边界if((cur_i >0 && cur_i < grid.size()) && (cur_j >0 &&…

【C语言】 作业11 链表+实现函数封装

递归实现链表数据互换&#xff0c;纯不会&#xff0c;明天再说 1、链表实现以下功能 链表&#xff0c;创建链表&#xff0c;申请节点&#xff0c;判空&#xff0c;头插&#xff0c;遍历输出&#xff0c;通过位置查找节点&#xff0c;任意位置插入&#xff0c;头删&#xff0c;…

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

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

通过角点进行水果的果梗检测一种新方法

一、前言 在前面的《数字图像处理与机器视觉》案例一&#xff08;库尔勒香梨果梗提取和测量&#xff09;中主要使用数学形态学的方法进行果梗提取&#xff0c;下面给出一种提取果梗的新思路。 众所周知&#xff0c;一般果梗和果实在边缘处角度有较大突变&#xff0c;可以通过合…

Kafka介绍及Go操作kafka详解

文章目录 Kafka介绍及Go操作kafka详解项目背景解决方案面临的问题业界方案ELKELK方案的问题日志收集系统架构设计架构设计组件介绍将学到的技能消息队列的通信模型点对点模式 queue发布/订阅 topicKafka介绍Kafka的架构图工作流程选择partition的原则ACK应答机制Topic和数据日志…

亚信安全终端一体化解决方案入选应用创新典型案例

近日&#xff0c;由工业和信息化部信息中心主办的2024信息技术应用创新发展大会暨解决方案应用推广大会成功落幕&#xff0c;会上集中发布了一系列技术水平先进、应用效果突出、产业带动性强的信息技术创新工作成果。其中&#xff0c;亚信安全“终端一体化安全运营解决方案”在…

Jolt路线图

1. 引言 a16z crypto团队2024年7月更新了其Jolt路线图&#xff1a; 主要分为3大维度&#xff1a; 1&#xff09;链上验证维度&#xff1a; 1.1&#xff09;Zeromorph&#xff1a;见Aztec Labs团队2023年论文 Zeromorph: Zero-Knowledge Multilinear-Evaluation Proofs from…

iOS——编译链接

编译连接的过程 预处理编译汇编链接 预处理 clang -E main.m -o main.i“#define"删除并展开对应宏定义。处理所有的条件预编译指令。如#if/#ifdef/#else/#endif。”#include/#import"包含的文件递归插入到此处。删除所有的注释"//或/**/"。添加行号和文…

python—爬虫的初步了解

Python 爬虫&#xff08;Web Scraping&#xff09;是一种自动化从网站上提取数据的技术。Python 由于其简洁的语法、丰富的库和强大的社区支持&#xff0c;成为了实现网络爬虫的首选语言之一。下面是一些Python爬虫的基本概念和步骤&#xff1a; 1. 爬虫的基本概念 请求&…

JavaEE:Spring Web简单小项目实践三(留言板实现)

学习目的&#xff1a; 1、理解前后端交互过程 2、学习接口传参&#xff0c;数据返回以及页面展示 目录 1、准备工作 2、约定前后端交互接口 1、获取全部留言 2、发表新留言 3、实现服务器端代码 4、调整前端页面代码 5、运行测试 1、准备工作 创建SpringBoot项目&#x…

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1&#xff1a;VScode安装 2.2&#xff1a;MobaXterm安装 3:WebRTC服务器环境搭建 3.1&#xff1a;安装openssh服务器 3.2&#xff1a;安装Node.js 3.3&#xff1a;coturn穿透和转发服务器 3.3.1&a…

构建高效Node.js中间层:探索请求合并转发的艺术

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【CSS盒模型&#xff1a;掌握网页布局的核心】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评论✍ 引言&#x…

阿里云 https证书部署

一.申请证书 二.查看状态 查看状态&#xff0c;已签发是完成了申请证书 三.部署 我在nginx服务器上部署 具体操作链接:阿里云文档 修改前 修改后 四.重启ngnix 五.验证是否成功 在浏览器输入域名查看