HarborCDN技术分析

news2024/11/29 12:41:50

一、介绍

  1. 简要介绍

​​Harbor​​ 是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。

CDN的全称是Content Delivery Network,即​​内容分发网络​​。使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。

  1. 应用场景

harbor

  • 基于角色的访问控制(Role Based Access Control)
  • 基于策略的镜像复制(Policy based image replication)
  • 镜像的漏洞扫描(Vulnerability Scanning)
  • AD/LDAP集成(LDAP/AD support)
  • 镜像的删除和空间清理(Image deletion & garbage collection)
  • 友好的管理UI(Graphical user portal)
  • 审计日志(Audit logging)
  • RESTful API
  • 部署简单(Easy deployment)

CDN

  • 网页加速
  • 流媒体加速
  • 大文件加速
  • 应用协议加速

二、架构原理

组网图及架构说明

Harbor大致模块工作原理见下图:

Harbor依赖的外部组件
  • Nginx(即Proxy代理层): Nginx前端代理,主要用于分发前端页面ui访问和镜像上传和下载流量; Harbor的registry,UI,token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
  • Registry v2: 镜像仓库,负责存储镜像文件; Docker官方镜像仓库, 负责储存Docker镜像,并处理docker push/pull命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token进行解密验证。
  • Database(MySQL或Postgresql):为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
Harbor自有组件
  • Core services(Admin Server): 这是Harbor的核心功能,主要提供以下服务:
  • UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
  • webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
  • Auth服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
  • API: 提供Harbor RESTful API
  • Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能。
  • Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

核心组件

  • Proxy:一个nginx的前端代理,代理Harbor的registry,UI, token等服务。-通过深蓝色先标识
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
  • jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。通过紫色线标识
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。通过灰色线标识;
  • Registry:镜像仓库,负责存储镜像文件。当镜像上传完毕后通过hook通知ui创建repository,上图通过红色线标识,当然registry的token认证也是通过ui组件完成。通过红色线标识
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。过docker的log-driver把日志汇总到一起,通过浅蓝色线条标识

CDN(内容分发网络)

架构原理分析

工作原理就是ansible程序调用读取/etc/ansible/ansible.cfg配置文件获取主机列表清单 /etc/ansible/hosts文件,获取所要处理的主机列表,然后查看剧本任务,再根据剧本中一系列任务生成一个临时的脚本文件,然后将该脚本文件发送给所管理的主机,脚本文件在远程主机上执行完成后返回结果,然后删除本地临时文件。

ansible分为两种工作模式:

一是adhoc(点对点模式):此模式相当于对管理主机执行单个的shell命令

如当本地管理远端主机(IP:172.16.80.101)执行​ansible 172.16.80.101 -a "/sbin/reboot"​,就可以通过ssh传输命令,把172.16.80.101这台主机重启了。

二是playbook(剧本模式):该模式应用较多,该模式是指将一系列任务整合形成一个剧本,以此来达成某种功能(譬如部署某个服务,数据库备份等)的目的。有点像shell脚本。

ansible内部模块实现幂:

通过代码做检查来实现,以copy 模块为例:

如果文件已经存在,且md5一样,则不执行操作,即 changed = False;否则开始文件copy,copy成功后,changed = Ture。

三、使用指南

使用软硬环境

硬件要求

支持硬件

类型

要求

服务器

ARM/X86

【注:有其他特殊要求的请在列表下面添加行,如内存: 不小于16G】

实验硬件

类型

实验使用

服务器

ARM

【注:有其他特殊要求的请在列表下面添加行,如内存: 不小于16G】

软件要求

依赖软件列表

类型

要求版本

操作系统

Redhat系或ubuntu系的系统

python

不小于3.6

ansible

2.11.12

实验软件版本

类型

实验版本

操作系统

Kylin-Server-V10

python

3.7

ansible

2.11.12

安装部署

【若已有安装部署手册,可以见安装部署手册】

ansible安装比较简单,使用使用pip3一键安装即可,步骤如下:

pip3 install ansible==2.11.12

安装完后查看版本

使用步骤

ansible配置文件关键配置介绍

/etc/ansible/ansible.cfg 应用程序主配置文件:

inventory :管理的主机清单文件路径
library:ansible的模块存放的目录
remote_tmp:上述工作原理中提到的将脚本发送至对端的临时目录
local_tmp:上述工作原理中提到本地生成脚本存放的临时目录
forks:并发连接数,默认为5
sudo_user :命令执行用户
remote_port :定义了Ansible的通信端口,默认为22。
host_key_checking:设置是否检查SSH主机的密钥,默认为false
timeout :ssh连接被管理主机的超时时间
log_path:ansilbe日志文件路径

/etc/ansible/hosts配置文件(Host Inventory定义管控主机):

Ansible 可以同时操作一个组的多台主机。组和主机之间的关系通过inventory文件 配置。默认路径为/etc/ansible/hosts。

/etc/ansible/hosts 文件的格式与windows的ini配置文件类似

#基本定义
mail.example.com                            #直接指定某个主机

[webservers]                                #组名
foo.example.com                             #组成员
bar.example.com                             #组成员

[dbservers]                                 #组名
one.example.com:9527                        #指定非标准ssh端口
foo.example.com                             #同一台主机,可以属于多个组
172.16.80.100                               #直接用主机IP
#批量host简写
db-[a:f].example.com                        #简写字母范围   
db-[1:20].example.com                       #简写数字范围   
#主机和变量。在定义主机时,还可以把变量传递给主机,这些变量可以用在 playbooks中
[atlanta]
#http_port、maxRequestsPerChild是变量名
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
#组和变量。注意,要先定义组
[websuvs]
web1.example.com 
web2.example.com 

[websuvs:vars]
http_port=8080
https_port=443
ansible常用命令
#ansible-doc命令
#查看模块使用方法
Usage: ansible-doc [options] [module...]

Options:
  -a, --all             查看所有模块的文档
  -h, --help            查看帮助
  -l, --list            列出所有可用模块
  -M MODULE_PATH, --module-path=MODULE_PATH
                        列出模块路径
  -s, --snippet         获取指定模块的使用信息
  -v, --verbose         详细信息
  --version             查看程序版本
  
 #ansible命令 
 Usage: ansible <host-pattern> [-f forks] [-m module_name] [-a args]

<host-pattern>        指定被管控的主机,需要事先定义在inventory文件中,可以是IP、组,支持模式匹配;all表示所有inventory定义的主机。
[-f forks]            指定线程数,即同时处理的主机数,默认是5
[-m module_name]      指定使用的模块
[-a args]             指明模块的参数

#ansible-playbook
Usage: ansible-playbook playbook.yml
Options:
  -C, --check           干跑playbook.yml,不真正执行

四、常见问题

Q1:执行 ansible-playbook -C httpd_roles.yml 遇到以下问题:

分析:

python2依赖问题。

解决:

通过加上 -e ansible_python_interpreter=/usr/bin/python3 解决

五、资料出处

  1. ​​cloud.tencent.com​​
  2. ​​【Harbor学习笔记】-快速搭建Docker私有仓库​​

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

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

相关文章

NC269391 炸鸡块哥哥的粉丝题

题目描述 智乃作为炸鸡块哥哥的粉丝&#xff0c;做了一场炸鸡块哥哥的比赛后得出一个结论&#xff0c;那就是炸鸡块哥哥的话&#xff0c;最多只能信半句。 现在给你一个长度为N的字符串S&#xff0c;请输出前 个字符&#xff0c;表示只能相信半句话。 例如当炸鸡块哥哥说&…

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度&#xff0c;又有技术细节、数学原理的关于深度学习的书籍&#xff0c;供自己学习&#xff0c;也推荐给我的学生学习。虽浏览文献无数&#xff0c;但一直没有心仪的目标。两周前&#xff0c;刘升容女士将她的译作《深度学习计…

python安装删除以及pip的使用

目录 你无法想象新手到底会在什么地方出问题——十二个小时的血泪之言&#xff01; 问题引入 python modify setup 隐藏文件夹 环境变量的配置 彻底删除python 其他零碎发现 管理员终端 删不掉的windous应用商店apps 发现问题 总结 你无法想象新手到底会在什么地方…

(学习日记)2024.03.27:UCOSIII第二十四节:任务状态

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Java毕业设计 基于SSM新闻管理系统

Java毕业设计 基于SSM新闻管理系统 SSM jsp 新闻管理系统 功能介绍 用户&#xff1a;首页 图片轮播 查询 登录 注册 新闻正文 评论 广告 社会新闻 天下新闻 娱乐新闻 个人中心 个人收藏 管理员&#xff1a;登录 用户管理 新闻管理 新闻类型管理 角色&#xff1a;用户 管理员…

笔记本电脑上部署LLaMA-2中文模型

尝试在macbook上部署LLaMA-2的中文模型的详细过程。 &#xff08;1&#xff09;环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型&#xff0c;…

python实战之进阶篇(一)

定义类 1. 构造方法 2. 实例方法 3. 类方法 类似于Java中的静态方法, 使用方式: 类名.类方法 4. 私有变量 5. 私有方法 6. 使用属性set和get

stm32再实现感应开关盖垃圾桶

一、项目需求 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 按下按键时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 硬件清单 SG90 舵机&#xff0c;…

MySQL生产环境常见故障及解决方案汇总

MySQL生产环境常见故障及解决方案汇总 1. MySQL主从同步异常故障1.1. 情景说明1.2. 排查过程1.3. 数据同步2. MySQL慢查询故障1. MySQL主从同步异常故障 1.1. 情景说明 MySQL主库网卡需要更换IP地址,并将原IP地址配置为MySQL集群的VIP地址,上层应用程序其实不需要更改连接My…

牛客练习赛123 A~C

A.炸鸡块哥哥的粉丝题 输出字符串的前 ⌈ n 2 ⌉ \lceil \frac{n}{2} \rceil ⌈2n​⌉ 个字符 void solve() {int n;string s;cin >> n >> s;cout << s.substr(0, (n 1) / 2); }B.智乃想考一道鸽巢原理 当小球总个数为奇数时&#xff0c;贪心的留下 1 个…

(C++笔试题)选择题+编程题

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 选择题 第一道 下面对析构函数的正确描述是&#xff08;&#xff09; A. 系统不能提供默认的析构函数B. 析构函数必须由用户定义C. 析构函数没有参数D. 析构函数可以设置默认参数 解析&#xff1a; 正确描述析构函数的…

【独立开发前线】Vol.27 为什么独立开发者需要一个网站?

现在很多内容创造者都把主要平台放在了第三方平台上&#xff0c;包括像知乎、B站、头条等等&#xff0c;但即使在2024年&#xff0c;我依然建议你做一个完全属于你的网站。 为什么呢&#xff1f; 你有没有在微信或知乎看到过这种拦截页面&#xff1f; 你花了好大的精力写了一…

关于github提交失败的问题

问题描述 Username for https://github.com: LAL-Better Password for https://LAL-Bettergithub.com: remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/get-started/getting-started-with-git/abo…

线程的通信

1.需求(为什么需要线程通信) 当我们需要多个线程完成同一任务时&#xff0c;并且希望他们有规律的执行&#xff0c;那么多线程之间需要一些通信机制&#xff0c;并且可以协调他们的工作&#xff0c;以此实现多个线程共同操作共享数据. 例 : A做包子&#xff0c;B吃包子&#…

SAP Fiori开发中的JavaScript基础知识9 - 代码注释,严格模式,JSON

1 背景 本文将介绍JavaScript编程中的三个小知识点&#xff1a;也即代码注释&#xff0c;严格模式&#xff0c;JSON文件。 2 代码注释 JavaScript的代码注释方式如下&#xff1a; // Single line comment/* Multi line comment */3 严格模式 JavaScript的"strict mod…

vue3封装Element表格自适应

表格高度自适应 分页跟随表格之后 1. 满屏时出现滚动条 2. 不满屏时不显示滚动条 坑 表格设置maxHeight后不出现滚动条 解决方案 表格外层元素设置max-height el-table–fit 设置高度100% .table-box {max-height: calc(100% - 120px); } .el-table--fit {height: 100%; }示例代…

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…

[flask]http请求//获取请求头信息+客户端信息

在网站中查询请求头信息&#xff0c;可以通过以下操作进行 右键然后选择检查 进入改页面后选择文档&#xff0c;刷新一下页面就好了 获取所有的请求头信息 print(request.headers, type(request.headers)) 在flask模块中&#xff0c;使用上面的输出函数就可以查看到有关于请求…

鸿蒙OS开发实战:【Socket小试MQTT连接】

本篇分享一下 HarmonyOS 中的Socket使用方法 将从2个方面实践&#xff1a; HarmonyOS 手机应用连接PC端 SocketServerHarmonyOS 手机应用连接MQTT 服务端 通过循序渐进的方式&#xff0c;全面了解实践HarmonyOS中的Socket用法 学习本章前先熟悉文档开发知识更新库gitee.com…

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播&#xff1a;保证数据一致性崩溃恢复&#xff1a;保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…