Helm安装Harbor
一、介绍
1.1 Harbor
Harbor 是由 VMware 公司为企业用户设计的 Registry Server 开源项目,包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。目前该项目已经捐献给CNCF并且毕业。

官网:https://goharbor.io/
github: https://github.com/goharbor/harbor
Harbor说白了,就是一个有web管理界面,具有高可用特性的docker仓库,现在又加入了chart仓库 。docker官方提供的registry,功能简单,没有图形管理界面,使用不是很友好。harbor是registry的二次开发,功能更强大。

Helm可以简单的理解为k8s的包管理器,类比CentOS和yum、Unbuntu和apt;但Helm更复杂一些;在使用k8s时,本身项目就会产生大量yaml配置文件,在加上不同环境,yaml更是翻倍,使得升级维护这些yaml成为一个痛苦没有技术含量的重复劳作,helm就是为了解决该问题,helm把项目yaml编辑成模板,需要修改的地方替换成变量,由helm执行命令时替换,这样一套模板yaml解决所有环境问题,这是helm最核心的功能。Helm作为CNCF开源项目毕业;
Helm 官网:https://helm.sh/
二、目的及环境
目的
本文重点是Harbor安装,因网上大量教程都是互相复制,少有写的好的,让我在安装时遇到各种坑,尤其是使用https证书时。为避免后来者看些没用的文章,少走弯路,故此记录。
环境
- docker: 23.0.1
- k8s: v1.23.10
- helm: v3.9.0
- 访问方式: Ingress,需要安装Ingress控制器
- 存储: nfs,以及安装了
nfs-subdir-external-provisioner,并把nfs-client设置默认StorageClass
三、Harbor安装
首先Harbor官方做的chart非常简陋,有着各种问题,我在安装过程中遇到好几个,耽误大量时间,因此不要太相信该官方出品的chart,尽量选择使用人数较多的版本进行安装。
下面分两部分进行介绍,如果你没有合法的https证书,看3.1;有合法证书看3.2;
3.0 创建命名空间
kubectl create ns harbor
名字随便起,下文命令都会在该命名空间进行
3.1 没有合法的https证书
我自己尝试过多次,截至1.11.0版本,不使用证书是访问不了的,会有各种问题,至少ingress模式下是如此,因此expose.tls.enabled:true 这个是不用修改。官方chart改的越少成功几率越高,出问题可能也越少。
3.1.1 添加官方harbor chart仓库
helm repo add harbor https://helm.goharbor.io
3.1.2 执行安装命令
helm install harbor harbor/harbor -n harbor \--set expose.ingress.hosts.core=harbor.yourdomain.com \ #需要修改--set expose.ingress.hosts.notary=notary.harbor.yourdomain.com\ #需要修改--set externalURL=https://harbor.yourdomain.com:30443 \ #需要修改--set harborAdminPassword="Harbor12345"
该命令默认会安装最新版本
- -n : 指定命名空间
- expose.ingress.hosts.core:设置平台ingress路由
- expose.ingress.hosts.notary: notary的ingress路由
- externalURL:平台外部访问地址,在ingress模式下,和expose.ingress.hosts.core的值对应,这里的30443是我自己k8s环境ingress的NodePort 端口,根据自己情况修改
- harborAdminPassword: admin账号密码,默认值:Harbor12345
- 该命令在1.11.0下是没问题的,可使用–version 1.11.0 设置版本
等待安装完成
3.1.3 浏览器访问
配置本地hosts文件,把harbor.yourdomain.com指向master节点IP,浏览器输入:https://harbor.yourdomain.com:30443,访问,账号/密码:admin/Harbor12345

可以自行创建项目,公开项目不用登录即可拉去镜像,私有项目只有登录后才能拉取,可创建人员分配不同项目权限进行权限管理等
3.1.4 docker login
设置完成Hosts后,还需要设置docker的daemon.json文件,因为docker仓库registry本身默认就需要https证书才正常使用,上面虽然配置了证书,但证书是自己生成的,并不是受信的颁发机构颁发的,所以证书无效,docker login的时候会报错
Error response from daemon: Get https://harbor.yourdomain.com:30443/v1/users/: x509: certificate signed by unknown authority
报错信息写的很清楚,certificate signed by unknown authority:证书由未知机构签发
这时需要让docker忽略该问题,修改daemon.json文件,不存在就创建
vim /etc/docker/daemon.json,
文件加入
{"insecure-registries": ["harbor.yourdomain.com:30443"] //加入这一行
}
保存后,重启docker
systemctl restart docker
这时就能正常登录了

3.1.5 镜像推送
- 打镜像tag
docker tag 3f8a00f137a0 harbor.yourdomain.com:30443/library/nginx:1.23 - 推送
docker push harbor.yourdomain.com:30443/library/nginx:1.23

路径中的library就是项目名称
3.2 合法的https证书安装
3.2.1 是否有必要https
是否有必要https,这要看公司情况,满足以下,尽量使用https
- 需要外网访问;由于harbor上存放公司核心软件资产,如果开放外网访问,则尽可能使用https;不合法的https证书是没有加密效果的(也就是3.1中的方式);一旦有人想拦截,密码必然会泄露。
- 公司有自己的证书,即便没有,现在免费证书也很多
3.2.2 安装
1. 添加证书secret
有了合法证书后,需要添加k8s中
kubectl create secret harbor-https --cert=certificate.crt --key=private.key -n harbor
- harbor-https: secret名称
- certificate.crt: 证书,该证书中应包含
chain.crt,也就是有两个certificate - private.key: 私钥
如果有图形化管理页面,例如kubesphere, 可直接创建;

2. 配置values.yaml
因为需要修改配置项增多,为便于多次修改使用,把chart拉取到本地安装
#添加harbor仓库,给url起个名字,便于使用
helm repo add harbor https://helm.goharbor.io
#拉取仓库中1.10.3版本到本地并解压
helm pull harbor/harbor --untar --version 1.10.3
查看仓库中可用版本:
helm search repo harbor -l,harbor为查询关键词
helm fetch和helm pull是一个命令,fetch是别名
拉取结果
修改values.yaml,和--set作用一样,这里不再列出整个values.yaml,仅列出关键部分,凡未列出的,无需修改
expose:type: ingresstls:enabled: truecertSource: secret # 这里非常关键,设置证书来源,默认为auto即自动生成,如果不修改证书无法配置成功secret:secretName: "harbor-https" #证书notarySecretName: "harbor-https" #这里不关键,即便证书和域名不匹配影响不大ingress:hosts:core: harbor.yourdomain.com #域名跟证书匹配,web访问地址,ingress路由notary: notary.harbor.yourdomain.com #不关键externalURL: https://harbor.yourdomain.com #这里没有加端口,因为做了外网映射,这里使用的域名为真实域名,https域名->外网IP 443端口-> master节点30443端口,这里配置的是最终浏览器访问地址persistence: enabled: true
…… #因为我环境配置了nfs的StorageClass且是默认的,这里就可不用修改,会自动根据StorageClass规则生成,没有配置的朋友,自己配置即可,这块儿不复杂,但有个坑,后面说 harborAdminPassword: "Harbor12345" #admin账号密码
3. 使用values.yaml进行安装
#values.yaml所在目录下运行
helm install harbor ../harbor -f values.yaml -n harbor
等待所有pod启动,访问即可
四、升级与删除
安装过程中总是会出现各种问题,这个时候,需要删除或者修改后更新
#列出当前安装的chart
helm list -n harbor
#卸载
helm uninstall harbor -n harbor # harbor为releasename
#升级
helm upgrade harbor ../harbor -f values.yaml -n harbor #helm有版本概念是可用回滚的
卸载后,如果再次安装失败,建议卸载之后清空挂载文件夹,清除pv及pvc,尤其版本发生变化时
五、 坑
安装过程中遇到很多坑
-
最坑的是最新版本
vaules.yaml中配置项有问题,expose.tls下配置secretName时,少了secret这一层,导致配置的证书始终无法生效,对照了README文件中的配置项目才发现少了一层,吐血。还有persistence.persistentVolumeClaim下jobservice的配置完全不对

正常的有两个配置项目(官方虽然更新了,但我下载本地留了截图),还有jobservice下的subPath不生效,其他服务可以通过配置subPath共用一个pvc,但jobservice不行……,最开始我想自己创建一个pvc使用subPath区分,其他服务都正常启动,但到jobservice这儿死活不行,我以为我哪里配置错了,搞了好久才意识到,是subPath没生效,不做配置就能正常启动 -
certSource最开始配置自己https证书,死活不能生效,就是这里没有配置对,默认是auto,自动生成,改为’secret‘才行,最坑的是网上各种自己配置https的文章都是互相照抄,根本没有提这个,不知道他们是怎么配置的 -
最后也是最大的一个难点,说它难它也不难,但确实花了我好长时间去解决,我配置上证书后,使用web访问一切正常,证书有效,但当我docker login时,还是报
x509: certificate signed by unknown authority,不应该啊,证书合法怎么能还是未知机构?查遍各种资料,国内基本都是垃圾,没有参考价值,没法到GitHub上求助https://github.com/goharbor/harbor-helm/issues/1402,也没有人回答,后来终于发现问题所在,docker认为证书不全,可以参考GitHub上我的解答
其实,
x509: certificate signed by unknown authority,解决这个问题的办法很多,后续我会单写一篇博客,但问题是证书有效的情况下,就不应该x509, 我没有选择妥协,最终让我找到了原因
相关文章:
Helm安装Harbor
一、介绍 1.1 Harbor Harbor 是由 VMware 公司为企业用户设计的 Registry Server 开源项目,包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。目前该项…...
梯度下降优化器:SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam -> AdamW
目录 1 前言 2 梯度概念 3 一般梯度下降法 4 BGD 5 SGD 6 MBGD 7 Momentum 8 SGDM(SGD with momentum) 9 NAG(Nesterov Accelerated Gradient) 10 AdaGrad 11 RMSProp 12 Adadelta 13 Adam 13 Nadam 14 AdamW 15 Lion(EvoLve…...
Ubuntu下gcc多版本管理
Ubuntu下多gcc版本的管理 开发过程中,在编译一个开源项目时,由于代码使用的c版本过高,而系统内置的gcc版本过低时,这个时候我们就需要升级gcc版本,但是为了避免兼容性问题,安装多个版本的gcc,然…...
吃透8图1模板,人人可以做架构
前言 在40岁老架构师 尼恩的读者交流群(50)中,很多小伙伴问尼恩: 大佬,我们写架构方案, 需要从哪些方面展开 大佬,我们写总体设计方案需要一些技术亮点,可否发一些给我参考下 诸如此类,问法很多…...
骨传导耳机推荐哪款好,列举几款是市面上热销的骨传导耳机
骨传导耳机是一种新型的耳机类型,通过震动和声音将振动传到了耳道外,对耳道不会产生损伤,能够保护听力。相比于传统耳机的优势有很多,比如运动时佩戴更加稳固,也可以在听歌时与人交谈。但在市面上的骨传导耳机款式可…...
CFS三层内网渗透
目录 环境搭建 拿ubuntu主机 信息收集 thinkphp漏洞利用 上线msf 添加路由建立socks代理 bagecms漏洞利用 拿下centos主机 msf上线centos 添加路由,建立socks代理 拿下win7主机 环境搭建 设置三块虚拟网卡 开启虚拟机验证,确保所处网段正确&a…...
SQL server设置用户只能访问特定数据库、访问特定表或视图
在实际业务场景我们可能需要开放单独用户给第三方使用,并且不想让第三方看到与业务不相关的表或视图,我们需要在数据库中设置一切权限来实现此功能: 1.设置用户只能查看数据库中特定的视图或表 1.创建用户名 选择默认数据库 服务器角色默认…...
linux:http服务器搭建及实验案例
目录准备工作http服务器各个配置文件大概说明实验1:访问不同ip获得不同网页实验2:同一ip访问不同端口获得不同网页准备工作 1,安装http服务 2,将 /etc/selinux/config 文件下面的 SELINUX值改为 disabled 或者 permissive 。 3&a…...
【无标题】智能工业安全用电监测与智慧能源解决方案
工业互联网已成为全球制造业发展的新趋势。在新基建的推动下,5G、人工智能、云计算等技术与传统工业深度融合,为实现智能制造提供了技术支撑,将有力促进制造强国早日实现。 十四五规划在新基建的基础上进一步加快了制造业转型升级的步伐&…...
前端白屏的检测方案,让你知道自己的页面白了
前言 页面白屏,绝对是让前端开发者最为胆寒的事情,特别是随着 SPA 项目的盛行,前端白屏的情况变得更为复杂且棘手起来( 这里的白屏是指页面一直处于白屏状态 ) 要是能检测到页面白屏就太棒了,开发者谁都不…...
编译原理【文法设计】—每个a后面至少一个b、ab个数相等,ab个数不相等的所有串
编译原理【文法设计】—设计每个a后面至少一个b、ab个数相等,ab个数不相等的文法为字母表Σ{a,b}Σ\{a,b\}Σ{a,b}上的下列每个语言设计一个文法 (a) 每个a后面至少有一个b的所有串 首先,每个a后面至少有一个b的正规式怎么写呢?每个a都需要…...
【死磕数据库专栏启动】在CentOS7中安装 MySQL5.7版本实战
文章目录前言实验环境一. 安装MySQL1.1 配置yum源1.2 安装之前的环境检查1.3 下载MySQL的包1.4 开始使用yum安装1.5 启动并测试二. 设置新密码并重新启动2.1 设置新密码2.2 重新登录测试总结前言 学习MySQL是一件比较枯燥的事情,学习开始之前要先安装MySQL数据库&a…...
23.2.23 22湖北省赛 B
好久没打卡了, 随便找的个水题写 这题是简单难度的 ab1 所以可以找到固定规律, 通过手动模拟可以发现 假设两种水叫做a水和b水 先倒入a水 1:0 倒入b水 1:1 此时水杯为 倒出一半的混合物, 因为ab水互溶, 比例不变 再加入a水或者b水将容器填满 比例现在变为 3:1 混合之后再…...
ONLYOFFICE中的chatGPT 是如何编写毕业论文以及翻译多种语言的
前言 chatGPT这款软件曾被多个国家的大学禁用,我们也多次在网上看到chatGPT帮助应届毕业生编写毕业答辩论文,但是这款软件目前还没有在国内正式上线,ONLYOFFICE7.3版本更新后呢,就添加了chatGPT该功能,并且正常使用。 …...
QT入门Containers之QStackedWidget
目录 一、QStackedWidget界面相关 1、布局介绍 2、插入界面 3、插入类界面 二、Demo展示 此文为作者原创,创作不易,转载请标明出处! 一、QStackedWidget界面相关 1、布局介绍 QStackedWidget这个控件在界面布局时,使用还…...
Java学习-IO流-字节缓冲流
Java学习-IO流-字节缓冲流 IO流体系↙ ↘字节流 字符流↙ ↘ ↙ ↘InputStream OutputStream Reader Writer↓ ↓ ↓ ↓ FileInputStream FileOutputStream FileRe…...
C++这么难,为什么我们还要学习C++?
前言 C 可算是一种声名在外的编程语言了。这个名声有好有坏,从好的方面讲,C 性能非常好,哪个编程语言性能好的话,总忍不住要跟 C 来单挑一下;从坏的方面讲,它是臭名昭著的复杂、难学、难用。当然ÿ…...
C#底层库--业务单据号生成器(定义规则、自动编号、流水号)
系列文章 C#底层库–MySQL数据库访问操作辅助类(推荐阅读) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379 C#底层库–JSON帮助类_详细(序列化、反序列化、list、datatable) 本文链接&…...
vue3项目练习大全(附github源码)
vue慢慢的成为了前端最受欢迎的框架之一,在很多项目之中开发都能用得到,如今也已经发展到3.0了,可能是因为这个框架可以提高工作效率,因此受到大家的追捧,在之前的文章里面也说过,2019年,大前端…...
SWMM从入门到实践教程 01 SWMM软件介绍
文章目录1 软件介绍2 软件面板2.1 主菜单2.1.1文件菜单(File)2.1.2 编辑菜单(Edit)2.1.3 视图菜单(View)2.1.4 工程菜单(Project)2.1.5 报告菜单(Report)2.1.…...
Ostrakon-VL像素终端实操:自定义扫描任务清单配置方法
Ostrakon-VL像素终端实操:自定义扫描任务清单配置方法 1. 像素特工终端介绍 Ostrakon-VL像素终端是一款专为零售与餐饮场景设计的智能扫描工具,采用独特的8-bit像素风格界面,将复杂的图像识别任务转化为直观有趣的"特工任务"。基…...
Java互联网大厂求职面试实录:Spring Boot、微服务与全栈技术深度解析
Java互联网大厂求职面试实录:Spring Boot、微服务与全栈技术深度解析 面试场景介绍 本文以互联网大厂面试为背景,通过严肃的面试官与搞笑的水货程序员“谢飞机”的对话,深入探讨Java求职者面试中常见的技术问题。涵盖Java SE、Jakarta EE、Sp…...
AI 面试系统设计题怎么准备?5 个完整案例 + 回答框架
AI 面试系统设计题怎么准备?5 个完整案例 回答框架(CSDN 教程版) 摘要:系统设计题是 AI 面试中最能拉开差距的环节。本文提供 5 个完整案例和通用回答框架,帮助工程师高效准备 AI 面试系统设计题。 前言 系统设计题是…...
别再死记硬背了!用C++手把手带你图解哈夫曼树构建全过程(附完整可运行代码)
从零开始:用C动态图解哈夫曼树构建与编码实现 哈夫曼树(Huffman Tree)是数据结构中一种经典的贪心算法应用,广泛用于数据压缩领域。对于初学者来说,理解其构建过程往往比单纯记忆代码更有价值。本文将用C结合动态图示的…...
HDRI-Generator: 环境贴图生成AI
在 3D 渲染中,环境光通常比模型本身更难处理。 很多开发者或设计师都有类似经验:即使模型质量很高,如果光照不合理,最终效果仍然会显得不真实。HDRI(High Dynamic Range Image)长期以来是解决这一问题的核…...
MiniCPM-V-2_6制造业:产线图识别+设备状态与维护提醒生成
MiniCPM-V-2_6制造业:产线图识别设备状态与维护提醒生成 1. 项目背景与价值 在现代制造业中,生产线的可视化监控和设备维护是保证生产效率和质量的关键环节。传统的人工巡检方式效率低下,容易遗漏细节,而且无法实时发现问题。Mi…...
FLUX.1-dev创作实战:从输入文案到生成图片,完整流程一次跑通
FLUX.1-dev创作实战:从输入文案到生成图片,完整流程一次跑通 1. 认识FLUX.1-dev:新一代AI图像生成引擎 FLUX.1-dev是Black Forest Labs推出的开源AI图像生成模型,以其出色的真实感和高效生成能力在开发者社区中广受好评。与常见…...
告别SSH一息屏就断连!用Termux-wake-lock让你的手机后台稳定运行
告别SSH一息屏就断连!用Termux-wake-lock让你的手机后台稳定运行 你是否遇到过这样的场景:正通过电脑SSH连接到手机的Termux环境进行开发调试,突然一个微信消息弹出,切出去回复后,SSH连接立刻中断?或是手机…...
nnUNet实战:如何根据你的显卡显存,手动调整batch_size和patch_size(附代码)
nnUNet显存优化实战:精准调整batch_size与patch_size的黄金法则 当你第一次在本地运行nnUNet训练脚本时,看到那个刺眼的CUDA out of memory错误,是不是有种功亏一篑的挫败感?别担心,这不是你的代码问题,而是…...
杭州污水提升泵靠谱厂家
在杭州及周边地区进行地下室改造、商业空间建设或解决特殊排污需求时,选择一家技术可靠、服务专业的污水提升泵厂家至关重要。在众多厂家中,杭州富阳赛特仪表阀门有限公司(赛斯瑞特) 凭借其深厚的技术积淀、过硬的产品品质和完善的…...


