Helm安装Harbor

news2024/10/2 6:29:35

一、介绍

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高可用架构图

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: ingress
  tls:
    enabled: true
    certSource: 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,尤其版本发生变化时

五、 坑

安装过程中遇到很多坑

  1. 最坑的是最新版本vaules.yaml中配置项有问题,expose.tls下配置secretName时,少了secret这一层,导致配置的证书始终无法生效,对照了README文件中的配置项目才发现少了一层,吐血。还有persistence.persistentVolumeClaim下jobservice的配置完全不对
    在这里插入图片描述
    正常的有两个配置项目(官方虽然更新了,但我下载本地留了截图),还有jobservice下的subPath不生效,其他服务可以通过配置subPath共用一个pvc,但jobservice不行……,最开始我想自己创建一个pvc使用subPath区分,其他服务都正常启动,但到jobservice这儿死活不行,我以为我哪里配置错了,搞了好久才意识到,是subPath没生效,不做配置就能正常启动

  2. certSource 最开始配置自己https证书,死活不能生效,就是这里没有配置对,默认是auto,自动生成,改为’secret‘才行,最坑的是网上各种自己配置https的文章都是互相照抄,根本没有提这个,不知道他们是怎么配置的

  3. 最后也是最大的一个难点,说它难它也不难,但确实花了我好长时间去解决,我配置上证书后,使用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, 我没有选择妥协,最终让我找到了原因

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

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

相关文章

说说Java“锁“ 事

文章目录前言大厂面试题复盘 —— 并发编程高级面试解析从轻松的乐观锁和悲观锁开讲通过8种情况演示锁运行案例,看看我们到底锁的是什么公平锁和非公平锁可重入锁(又名递归锁)死锁及排查写锁(独占锁)/读锁(共享锁)自旋锁SpinLock无锁 -> 独占锁 -> 读写锁 -&g…

五种IO模型以及select多路转接IO模型

目录 一、典型IO模型 1.1 阻塞IO 1.2 非阻塞IO 1.3 信号驱动I0 1.4 IO多路转接 1.5 异步IO 多路转接的作用和意义 二、多路转接IO模型(select) 2.1 接口 2.2 接口当中的事件集合: fd_set 2.2 select使用事件集合(位图&am…

ip公司和soc公司是什么?

IP 公司和 SoC 公司都是半导体行业的重要组成部分,但它们的角色和职责略有不同。IP(Intellectual Property)公司主要提供可重用的知识产权组件,也称为 IP 核或 IP 模块,这些组件可以在设计芯片的过程中被集成到芯片中。…

Git代码冲突-不同分支之间的代码冲突

1、解决思路在团队开发中,提交代码到Git仓库时经常会遇到代码冲突的问题。- 原因:多人对相同的文件进行了编辑,造成代码存在差异化- 解决方案:1. 使用工具或git命令对比不同分支代码的差异化2. 把不同分支中有效代码进行保留&…

[译文] 基于PostGIS3.1 生成格网数据

根据格网进行数据统计与分析是一种常用的方法,相比自然地理边界与行政管理边界而言,使用格网有如下特点:每个格网之间地位相等,没有上下级之分。每个格网的面积都相等。相邻两个格网单元中心点之间距离相等。适用于将数据从“空间…

ThreeJS加载公路GeoJson数据实现流光效果

threejs加载公路geojson数据,跟加载行政区域的原理一样,唯一不同的是geojson格式不一样,路线并不是连贯起来的,按照路段进行的拆分,在加载的时候问题不大,正常解析然后转墨卡托投影,但是在做流光效果时,需要对geojson进行重新组合. 实现效果:

Android:反编译apk踩坑/apktool/dex2jar/JDGUI

需求描述 想要反编译apk文件,搜到了这篇博客:Android APK反编译就这么简单 详解(附图),非常有参考价值~但其中的工具下载链接都已404,而本杂鱼实际操作的过程中也出现了亿点点点点点点的问题,于…

电子技术——反馈对放大器极点的影响

电子技术——反馈对放大器极点的影响 放大器的频率响应和稳定性可以直接由其极点决定。因此我们将深入反馈对放大器极点的影响。 稳定性和极点位置 我们首先讨论稳定性和极点位置的关系。首先我们给出结论,对于任何一个稳定的放大器,其极点都处在 sss …

prometheus + alterManager + 飞书通知,实现服务宕机监控告警;实测可用

架构设计图 最终效果图 项目准备 xml依赖 <!-- 监控相关 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.…

Elasticsearch7.8.0版本进阶——段合并

目录一、段的概述1.1、段的概念1.2、段的缺点1.3、如何解决段数量暴增问题二、段合并的流程三、段合并的注意事项一、段的概述 1.1、段的概念 每一 段 本身都是一个倒排索引。 1.2、段的缺点 由于自动刷新流程每秒会创建一个新的段 &#xff0c;这样会导致短时间内的段数量…

interrupt多线程设计模式

1. 两阶段终止-interrupt Two Phase Termination 在一个线程T1中如何“优雅”终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路 ● 使用线程对象的stop()方法停止线程&#xff08;强制杀死&#xff09; —— stop&#xff08;&#xff09;方法…

Linux内核的虚拟内存(MMU、页表结构)

前言&#xff1a;内存是程序得以运行的重要物质基础。如何在有限的内存空间运行较大的应用程序&#xff0c;曾是困扰人们的一个难题。为解决这个问题&#xff0c;人们设计了许多的方案&#xff0c;其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统&…

【git】Idea中git的使用

配置git 创建git仓库 不同颜色代表的含义 红色——未加入版本控制&#xff1b;绿色——已经加入控制暂未提交&#xff1b;蓝色——加入&#xff0c;已提交&#xff0c;有改动&#xff1b;白色——加入&#xff0c;已提交&#xff0c;无改动&#xff1b;灰色——版本控制已忽略文…

8、STM32 FSMC驱动LCD(ILI93xx)

本文使用FSMC驱动LCD显示&#xff0c;关于建议先看之前的7、STM32 FSMC驱动SRAM一文 硬件连接&#xff1a; 一、CubeMx配置FSMC驱动LCD ILI93xx 此章只为快速使用LCD&#xff0c;不涉及原理、指令说明 显示屏驱动文件参考正点探索者 1、CubeMx图形配置 此处的时序还可以调…

GLOG如何清理日志

1 日志清理 其实GLOG很长时间以来都没有日志清理功能。小白对此也很震惊&#xff0c;还特意去查了GLOG的提交记录。代码的提交记录显示&#xff0c;GLOG与日志清理有关的最初代码是2019年11月1日&#xff0c;而这个开源项目的起始时间可以追溯到2008年。也就是说&#xff0c;在…

浅谈liunx init.d 和 rc.local 两种起动方式

浅谈liunx init.d 和 rc.local 两种起动方式 以rabbitmq 举例 &#xff08;一&#xff09;.init.d 方式 开机自动重启设置 1.在/etc/init.d 目录下新建一个 rabbitmq [rootlocalhost init.d]# vi rabbitmq具体脚本如下所示&#xff1a; #!/bin/bash # # chkconfig: 2345 …

【离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步装载脚本】

离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本一、DIM层 维度模型 设计要点6.用户维度表 -拉链表1.用户维度表 前期梳理2.用户维度表 DDL表设计分析3.用户维度表 加载数据分析1.拉链表首日装载数…

RocketMQ 5.x新版本部署优化一览

​ RocketMQ从2022年9月份开始推出了新的5.x大版本。相比于之前的4.x版本&#xff0c;5.x版本向云原生前进了一大步。在增强原因功能的基础上&#xff0c;更是支持多语言客户端&#xff0c;周边生态也进行了补强和完善&#xff0c;明显可以看到离Kafka老大哥又近了很大一步。 …

linux网络编程-多进程实现TCP并发服务器

服务端流程步骤socket函数创建监听套接字lfdbind函数将监听套接字绑定ip和端口listen函数设置服务器为被动监听状态&#xff0c;同时创建一条未完成连接队列&#xff08;没走完tcp三次握手流程的连接&#xff09;&#xff0c;和一条已完成连接队列&#xff08;已完成tcp三次握手…

3-虚拟机篇

一.java JVM 的内存结构 内存&#xff1a;按线程类型分两类 线程共享&#xff1a; 方法区&#xff1a;存放类的信息堆&#xff1a;存放java对象的信息 线程私有&#xff1a; java虚拟机栈&#xff1a;存放java方法、方法参数和局部变量程序计数器&#xff1a;记录程序执行…