不用开源做网站,茂南网站开发公司,施华洛世奇网络推广方案,网站毕业设计模板一、介绍
1.1 Harbor
Harbor 是由 VMware 公司为企业用户设计的 Registry Server 开源项目#xff0c;包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能#xff0c;同时针对中国用户的特点#xff0c;设计镜像复制和中文支持等功能。目前该项…一、介绍
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.1k8s: v1.23.10helm: 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.io3.1.2 执行安装命令
helm install harbor harbor/harbor -n harbor \--set expose.ingress.hosts.coreharbor.yourdomain.com \ #需要修改--set expose.ingress.hosts.notarynotary.harbor.yourdomain.com\ #需要修改--set externalURLhttps://harbor.yourdomain.com:30443 \ #需要修改--set harborAdminPasswordHarbor12345该命令默认会安装最新版本 -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 镜像推送
打镜像tagdocker 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 --certcertificate.crt --keyprivate.key -n harborharbor-https: secret名称certificate.crt 证书,该证书中应包含chain.crt,也就是有两个certificateprivate.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, 我没有选择妥协最终让我找到了原因