云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
1、Harbor的定义与核心作用
-
定义:
Harbor是由VMware开源的企业级容器镜像仓库系统,后捐赠给 CNCF (Cloud Native Computing Foundation)。它基于Docker Registry扩展了企业级功能,用于存储、分发和管理容器镜像(如Docker、OCI标准镜像)及其他制品(如Helm Chart、CNAB等)。 -
核心作用:
- 镜像管理:提供安全、高效的镜像存储与版本控制。
- 权限控制:支持细粒度的访问权限管理。
- 安全扫描:集成漏洞扫描工具(如Clair)确保镜像安全。
- 镜像复制:支持跨数据中心或云环境的镜像同步。
- 审计日志:记录用户操作,满足合规性要求。
2、Harbor的核心功能
(1)、企业级权限管理
- RBAC(基于角色的访问控制):
- 支持按项目分配用户权限(如Guest、Developer、Admin)。
- 可自定义角色,根据用户的角色来管理对项目和资源的访问权限,满足多团队协作需求。
- 集成身份认证:
- 支持对接LDAP/AD,与企业现有用户体系无缝集成。
(2)、镜像安全与扫描
- 漏洞扫描:
- 集成Clair等工具,自动扫描镜像中的已知漏洞。
- 可配置镜像推送时的自动扫描策略。
- 内容信任:
- 支持镜像签名(通过Notary),确保镜像来源可信。
扩展:Clair
Clair是一个开源项目,专注于为容器镜像提供漏洞静态分析的能力。它由CoreOS开发(后来CoreOS被Red Hat收购),旨在帮助用户识别并解决容器镜像中的安全问题。通过分析容器镜像的各个层,并将它们与已知的安全漏洞数据库进行比较,Clair能够检测出其中包含的软件包是否有任何公开的、已知的安全漏洞。
Clair工作流程:
- 用户提交需要扫描的容器镜像至Clair。
- Clair分析该镜像的各层,并提取出操作系统及软件包的信息。
- 将提取的信息与Clair的漏洞数据库进行对比。
- 根据对比结果生成漏洞报告,显示受影响的软件包、相关漏洞的描述以及建议的解决方案。
- 用户根据报告更新镜像,修补发现的漏洞。
(3)、镜像生命周期管理
- 镜像复制:
- 支持将镜像同步到远程Harbor实例(如灾备中心或多地部署)。
- 垃圾回收:
- 自动清理未使用的镜像层,释放存储空间。
- 版本控制:
- 支持保留或删除旧版本镜像,管理存储成本。
(4)、用户界面与扩展性
- Web界面:
- 提供图形化界面管理项目、用户、镜像及操作日志。
- 镜像删除回收站:提供安全地删除镜像以及从回收站恢复的功能。
- API集成:
- 提供RESTful API,支持与CI/CD工具(如Jenkins、GitLab)集成。
- 存储扩展:
- 支持将镜像存储在对象存储(如AWS S3、阿里云OSS)中,实现高可用与弹性扩展。
3、Harbor的架构
(1)、架构分层
- 代理层:
- Nginx反向代理:接收客户端请求(如浏览器、Docker CLI),并转发到后端服务。
- 功能层:
- Portal:Web前端界面,基于Angular开发。
- Core Service:核心业务逻辑组件,包括UI、token服务、API服务等,处理用户请求、权限验证等业务逻辑。
- Job Service:异步任务处理(如镜像复制、漏洞扫描)。
- Registry:基于Docker Registry的镜像存储引擎。核心组件,负责存储Docker镜像,并处理Docker客户端的push和pull请求。
- Clair(可选):漏洞扫描工具。
- Log collector:收集各个组件的日志信息,便于问题排查和审计。
- 数据层:
- PostgreSQL:存储元数据(如项目、用户、权限)。
- Redis:缓存及任务队列管理。
- 存储后端:本地文件系统或对象存储(如S3)。
(2)、核心组件
4、Harbor的安装与配置
(1)、环境要求
- 硬件:至少2核CPU、4G内存、40G存储。
- 软件:Docker 1.10+、Docker Compose 1.6+。
(2)、安装步骤(以v2.4.1为例)
1. 下载安装包:
bash示例:
wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-online-installer-v2.4.1.tgz
tar zxvf harbor-online-installer-v2.4.1.tgz
cd harbor
2. 配置harbor.yml:
- 修改hostname(如harbor.example.com)。
- 配置数据库密码、管理员密码等。
3. 启动Harbor:
bash示例:
./install.sh
4. HTTPS 配置(可选):
- 生成SSL证书(如Let’s Encrypt)。
- 修改harbor.yml中的HTTPS相关配置,重启服务。
5. 部署注意事项
- 内网环境:
- 需配置Docker客户端信任私有仓库
修改/etc/docker/daemon.json:
- 需配置Docker客户端信任私有仓库
{"insecure-registries": ["your-harbor-host:port"]
}
6.重启docker
systemctl restart docker
7.镜像推送测试
bash示例:
docker tag my-image your-harbor-host:port/project/image:tag
docker push your-harbor-host:port/project/image:tag
5、Harbor的典型应用场景
(1)、企业级私有镜像管理仓库
- 场景:
- 多团队协作开发,需隔离镜像仓库。
- 需要权限控制(如限制敏感镜像访问)。
bash示例:
# 创建项目并分配权限
harbor admin create-project --project-name my-team --public false
harbor admin add-user-to-project --user admin --project my-team --role Admin
(2)、安全合规与漏洞管理
- 场景:
- 需确保镜像无已知漏洞(如CVE)。
- 需审计镜像操作日志。
- 操作:
- 在Harbor Web界面启用漏洞扫描策略。
- 通过API或CLI导出审计日志。
(3)、跨数据中心镜像同步
利用其镜像复制功能,可以在不同的地理位置或数据中心之间同步镜像,保证服务的连续性和可靠性。
- 场景:
- 在多地部署Kubernetes集群,需同步镜像。
- 灾备场景下镜像备份到异地仓库。
- 配置:
- 在Harbor中配置“复制目标”(远程Harbor实例),设置定时任务。
6、Harbor的优势与特点
(1)、与Docker Registry的对比
(2)、核心优势
- 安全增强:漏洞扫描、镜像签名、细粒度权限控制。
- 易用性:图形化界面简化镜像和项目管理。
- 企业级扩展:支持高可用部署、多云存储、与 CI/CD 工具集成。
7、常见问题与解决方案
(1)、Harbor安装后无法访问Web界面?
- 原因:
- 防火墙未开放端口(默认80/443)。
- DNS解析问题(需确保hostname可解析)。
- 解决:
bash示例:
# 检查服务状态
docker ps -a | grep harbor
# 查看日志
docker logs harbor-core
(2)、镜像推送时提示权限不足?
- 原因:
- 用户未被分配项目权限。
- 未登录Harbor或密码错误。
- 解决:
bash示例:
docker logout your-harbor-host:port
docker login your-harbor-host:port -u admin -p your_password
(3)、如何启用漏洞扫描?
- 步骤:
- 在Harbor Web界面启用Clair组件。
- 进入项目设置,开启漏洞扫描策略。
- 推送镜像后,查看扫描结果。
8、总结
- Harbor是企业级容器镜像管理的首选解决方案,通过权限控制、安全扫描、镜像复制等功能,解决了Docker Registry的不足。
- 适用场景:
- 多团队协作开发。
- 需要严格的安全合规要求。
- 跨数据中心或云环境部署。
- 关键价值:
- 安全可控:漏洞扫描与权限隔离。
- 高效管理:图形化界面与自动化任务。
- 灵活扩展:支持多种存储后端与多云环境。
逆风前行,Dare To Be!!!
相关文章:
云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
1、Harbor的定义与核心作用 定义: Harbor是由VMware开源的企业级容器镜像仓库系统,后捐赠给 CNCF (Cloud Native Computing Foundation)。它基于Docker Registry扩展了企业级功能,用于存储、分发和管理容器镜像(如Docker、OCI标准…...
TypeScript 实用类型深度解析:Partial、Pick、Record 的妙用
需求背景:在后台系统的用户管理模块中,我们常遇到这样的场景:修改用户资料时只需要传部分字段,展示用户列表时要隐藏敏感信息,快速查找用户需要ID索引等等,这些业务需求都可以通过 TypeScript 的实用类型优…...
【Pandas】pandas DataFrame rmod
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
如何搭建spark yarn 模式的集群集群
以下是搭建Spark YARN模式集群的一般步骤: 准备工作 - 确保集群中各节点安装了Java环境,并配置好 JAVA_HOME 环境变量。 - 各节点间能通过SSH免密登录。 - 安装并配置好Hadoop集群,YARN作为Hadoop的资源管理器,Spark YARN模式需要…...
云原生--核心组件-容器篇-6-Docker核心之-镜像仓库(公共仓库,私有仓库,第三方仓库)
1、Docker仓库的定义与核心作用 定义: Docker仓库(Docker Registry)是用于存储、分发和管理Docker镜像的集中式存储库。它类似于代码仓库,但专门用于容器镜像的版本控制和共享。它允许开发人员和IT团队高效地管理、部署和分享容器…...
mysql8.0版本部署+日志清理+rsync备份策略
mysql安装:https://blog.csdn.net/qq_39399966/article/details/120205461 系统:centos7.9 数据库版本:mysql8.0.28 1.卸载旧的mysql,保证环境纯净 rpm -qa | grep mariadb mariadb-5.... rpm -e --nodeps 软件 rpm -e --nodeps mariadb-5.…...
搭建spark yarn 模式的集群集群
一.引言 在大数据处理领域,Apache Spark 是一个强大的分布式计算框架,而 YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理系统。将 Spark 运行在 YARN 模式下,可以充分利用 YARN 强大的资源管理和调度能力…...
在uni-app中使用Painter生成小程序海报
在uni-app中使用Painter生成小程序海报 安装Painter 从GitHub下载Painter组件:https://github.com/Kujiale-Mobile/Painter 将painter文件夹复制到uni-app项目的components目录下 配置页面 在需要使用海报的页面的pages.json中配置 {"path": "pag…...
Uni-app网络请求AES加密解密实现
Uni-app 网络请求封装与 AES 加密解密实现 下面我将为你提供一个完整的 Uni-app 网络请求封装方案,包含 POST 请求的统一处理、请求参数和响应数据的 AES 加密解密。 1. 创建加密解密工具类 首先创建一个 crypto.js 文件用于处理 AES 加密解密: // u…...
uniapp实现统一添加后端请求Header方法
uniapp把请求写完了,发现需要给接口请求添加头部,每个接口去添加又很麻烦,uniapp可以统一添加,并且还能给某些接口设置不添加头部。 一般用于添加token登录验证信息。 在 main.js 文件中配置。 代码如下: // 在…...
uniapp打包apk如何实现版本更新
我们做的比较简单,在后端设置版本号,并在uniapp的config.js中定义版本号,每次跟后端的进行对比,不一致的话就更新。 一、下载apk 主要代码(下载安装包,并进行安装,一般得手动同意安装…...
【Java开发日记】OpenFeign 的 9 个坑
目录 坑一:用对Http Client 1.1 feign中http client 1.2 ribbon中的Http Client 坑二:全局超时时间 坑三:单服务设置超时时间 坑四:熔断超时时间 4.1 使用feign超时 4.2 使用ribbon超时 4.3 使用自定义Options 坑五&…...
RocketMQ 存储核心:深入解析 CommitLog 设计原理
一、引言 在分布式消息队列系统中,消息存储的可靠性和高吞吐能力是衡量系统优劣的核心指标。Apache RocketMQ 作为一款高性能、高可用的分布式消息中间件,其独特的 CommitLog 存储机制在消息持久化过程中扮演了关键角色。本文将深入剖析 CommitLog 的设…...
【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本文围绕Qt中常用的显示类控件展开,重点讲解了 QLabel(文本/图片显示)、QLCDNumber(数字显示࿰…...
Docker和K8s面试题
1.Docker底层依托于linux怎么实现资源隔离的? 基于Namespace的视图隔离:Docker利用Linux命名空间(Namespace)来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID(进程)、网络、挂载…...
shell--数组、正则表达式RE
1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...
java 使用 POI 为 word 文档自动生成书签
poi 版本:4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...
redis+lua+固定窗口实现分布式限流
用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小(秒) -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...
什么是SQL92标准,有什么特点和影响?
一、SQL92简介 SQL92标准是1992年由美国国家标准协会(ANSI)和国际标准化组织(ISO)联合制定的数据库语言标准,正式名称为"SQL:1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统(R…...
Flink Checkpoint 与实时任务高可用保障机制实战
在实时数仓体系中,数据一致性和任务稳定性是核心保障。本文围绕 Flink Checkpoint 机制,深入讲解高可用保障的最佳实践和工程实现。 一、业务背景与痛点 在金融风控、营销实时推荐、智能监控等场景中,实时数仓的每一条数据都至关重要。常见的业务痛点包括: 断点恢复困难:…...
WebRtc08:WebRtc信令服务器实现
如何使用socket.io发送消息 发送消息 // 给本次连接发送消息 socket.emit()// 给某个房间内所有人发送消息 io.in(room).emit()// 除了自己以外,给某个房间的所有人发消息 socket.to(room).emit();// 除本连接外,给所有人发消息 socket.broadcast.emit…...
基于 SpringBoot 与 Redis 的缓存预热案例
文章目录 “缓存预热” 是什么?项目环境搭建创建数据访问层预热数据到 Redis 中创建缓存服务类测试缓存预热 “缓存预热” 是什么? 缓存预热是一种优化策略,在系统启动或者流量高峰来临之前,将一些经常访问的数据提前加载到缓存中…...
Python对比两张CAD图并标记差异的解决方案
以下是使用Python对比两张CAD图并标记差异的解决方案,结合图像处理和CAD结构分析: 一、环境准备与库选择 图像处理库:使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库:若为DXF格式,使用ezdxf解析实体…...
LINUX427 冒险位 粘滞位 chmod 权限
为什么不同用户能查看的文件夹不同 思索 是因为不同文件夹的权限不同吗?感觉不是 权限不就是只有rwx权限吗? o 对对对 和0GU有关 O 组内的其他用户应该 O是其他用户 不是组内用户 文件创建应该设置了r权限 但是root为什么看到的好像不一样 root 这些…...
10 DPSK原始对话记录
10 DPSK原始对话记录 前言 编程之余,在 Vscode 的 Cline 插件界面中和 ai (dpsk v3-0324) 聊起了天,得到了一个有意思的回答。就像ai有自我意识一样。在此记录。 实际对话内容 时间范围:2025-04-27 23:37:22 - 23:44:17 对话模式:PLAN MODE [23:37:22] 用户提问 “你…...
实现一个瀑布流布局
1、纯CSS实现 实现方式:借助column-count属性来创建 4 列的布局,并使用 column-gap 设置列间距。每个 .img-container 使用 break-inside: avoid 来防止图片被分割。 来看一下完整的代码: <!DOCTYPE html> <html lang"en&qu…...
Linux:进程间通信->共享内存
1. 共享内存的概念 System V共享内存,是一个高效的进程间通信IPC机制,允许多个进程共享同一块物理内存区实现快速的数据交换。如下图所示 这两个进程分别通过页表映射到这一块共享内存中 2. 共享内存的函数 shmget 功能: 创建新的共享内存…...
《Crawl4AI 爬虫工具部署配置全攻略》
《Crawl4AI 爬虫工具部署配置全攻略》 摘要 :在数据驱动的智能时代,高效爬虫工具是获取信息的关键。本文将为你详细解析 Crawl4AI 的安装配置全流程,从基础设置到进阶优化,再到生产环境部署,结合实用技巧与常见问题解…...
spring框架学习(下)
这章节讲的主要是spring在生产Bean对象时的过程 Spring实例化对象的基本流程 1、解析bean.xml 2、封装成BeanDifinition类 3、存放到BeanDIfinitionMap里 4、从BeanDIfinitionMap遍历得到bean 5、将bean存放到SingletonObjects 6、调用getBean方法得到bean 以下是简易的…...
进程与线程-----C语言经典题目(8)
一.什么是进程 定义: 进程指的是程序在操作系统内的一次执行过程。它不只是程序代码,还涵盖了程序运行时的各类资源与状态信息。包括创建、调度、消亡。 进程的状态(ps -aux): 就绪状态:进程已经…...
lstm用电量预测+网页可视化大屏
视频教学: 训练结果: 详细代码: import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers impo…...
linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战
本篇面向嵌入式与工业级应用场景,深入讲解如何在各类 Linux 构建系统(Raspberry Pi OS、Yocto、Buildroot)中裁剪、交叉编译与集成 BlueZ,以及在工业网关、资产追踪与蓝牙 Mesh 等典型方案中的落地实例与注意要点,帮助你打造稳定、可维护、低功耗的嵌入式蓝牙产品。 目录 …...
Dev控件RadioGroup 如何设置一排有N个显示或分为几行
1.5个选项 全部横排显示,则Columns 5 2.5个选项 每行分两个,则有三行,则Columns 2...
AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
Launcher3中有一个跟Launcher状态相关的类,叫LauncherState LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机,定义了 Launcher 可能处于的不同视觉和交互模式,例如主屏幕、所有应用列表、最近任务…...
Redis 笔记(三)-Redis 基本知识及五大数据类型
一、redis 基本知识 redis 默认有 16个 数据库,config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为:DB 0 ~ DB 15&am…...
Linux——线程(2)线程互斥(锁)
知识回顾 在学习本篇内容前,我们需要先回顾一下几个概念。 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有…...
深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
💡 你是否在寻找具身人工智能(Embodied AI)领域的研究资源?是否希望有一个系统性的资源集合来加速你的研究?今天给大家推荐一个重磅项目! 🌟 为什么需要这个项目? 具身人工智能是一…...
组件之间的信息传递的四种方法!!【vue3 前端】
迎万难 赢万难! 目录 1. 使用 defineProps 传递数据:2. 使用。defineEmits 发送事件:3. 使用 Provide / Inject:4. 使用状态管理(如 Pinia): 1. 使用 defineProps 传递数据: 父组件…...
单片机学习笔记9.数码管
0到99计数 ,段选共阴极 ;0到99计数 ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 0100H; 定义位选控制位 DISPLAY_SELECT BIT 20H.0MAIN:; 定时器 0 初始化MOV TMOD, #01H ; 设置定时器 0 为模式 1MOV TH0, #3CH ; 定时器 0 高 8 位初值,定时 …...
Go 语言 核心知识点
Go 语言(Golang)是由 Google 开发的一种静态类型、编译型语言,设计目标是高效、简洁、并发友好。它借鉴了 C 语言的性能优势,同时引入了现代语言的特性(如垃圾回收、并发原语),并摒弃了传统面向…...
【C++ 类和数据抽象】消息处理示例(2)
目录 一、消息处理系统的核心价值 1.1 现代软件架构中的消息驱动 1.2 消息处理系统的关键组件 二、消息处理系统概述 三、Message类设计 3.1 成员变量 3.2. 成员函数 3.3. 私有辅助函数 四、Folder类设计 五、代码实现 六、数据抽象在消息处理系统中的应用 七、总结…...
kafka 中消费者 groupId 是什么
📚 什么是 groupId? groupId 是 Kafka 里消费者组(Consumer Group)的唯一标识。 同一个 groupId 的消费者,一起共享消费,一条消息只给组内一个消费者处理。不同 groupId 的消费者组,各自独立消…...
单相交直交变频电路设计——matlab仿真+4500字word报告
微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 硬件电路采用Altium designer设计,仿真采用Matlab软件 本仿真模型基于MATLAB/Simulink(版本MATLAB 2018Rb)软件。建议采用matlab2018Rb及以上版本打开。(若需要其他…...
Python中的协程(Coroutine)
Python中的协程(Coroutine) 是一种轻量级的异步执行单元,主要用于解决IO密集型任务的性能问题。Python 3.5引入了 async/await 语法,使得协程变得简洁且易于使用。协程的核心是通过事件循环(Event Loop) 来…...
【QT】QT多线程
QT多线程 1.涉及到类和方法示例代码:未重写run函数 2.使用思路3.常用方法4.示例代码1:重写线程run函数现象: 5.示例代码2:多线程显示切换图片,使用公有方法现象: 1.涉及到类和方法 类:QThread 示…...
基于深度学习的医疗诊断辅助系统设计
标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展,开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统,以辅助医生进行更精准的诊断…...
C++ RAII
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是 C 编程中的核心设计理念,用于管理资源的分配和释放。它通过将资源的生命周期绑定到对象的生命周期,利用 C 的自动对象管理机制(主要是栈…...
Linux进程学习【环境变量】进程优先级
进程优先级的基本概念 在 Linux 中,每个进程都有一个优先级,操作系统根据这个优先级来决定进程的执行顺序。优先级越高,进程的执行就越频繁。通常,进程优先级是由以下两个部分构成: 静态优先级(PRI&#x…...
Leetcode:283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...
BIOES 标签的含义
BIOES 标签的含义 B (Begin) 表示一个实体的开始。例如,在句子 “北京是中国的首都” 中,“北京” 作为地点实体的开头,首字会被标注为 B-LOC,后续字可能标注为 I-LOC。 I (Inside) 表示一个实体的中间或内部部分。例如&a…...