Harbor是一个开源的企业级Docker镜像存储和管理工具。Harbor提供了安全的访问控制、镜像复制和扩展性等功能,使得团队内部可以方便地共享和管理Docker镜像。
Harbor的特点
以下是Harbor的一些主要特点:
- 安全的访问控制:Harbor支持基于用户、团队和角色的细粒度访问控制,可以帮助企业保护镜像的安全性。
- 镜像复制:Harbor支持镜像的复制功能,可以将镜像复制到多个节点上,提高了镜像的可用性和容错性。
- 可扩展性:Harbor可以轻松扩展到数百个节点,以满足企业不断增长的Docker镜像管理需求。
- 多租户支持:Harbor支持多租户环境,可以帮助企业在不同的团队和部门之间隔离Docker镜像。
本次安装使用到腾讯云KTE、COS、PostgreSQL RDS、CFS和云原生网关等云组件,redis采用有状态K8s应用方式部署。在安装前需要购买并配置好对应的组件。
安装部署
安装前的准备
- 购买一个云原生API网关,创建完成后在ingress中与KTE关联
- 创建一个COS对象存储桶(注意:不能启用多区域容灾功能,否则上传镜像时会报错),并创建一个子用户用于管理该桶,并生成一个密钥用于harbor连接访问
- 购买一台PostgreSQL RDS(1 核 2 GiB,磁盘 10 G),并创建3个库:registry、notary_server、notary_signer、
- 在KTE中创建一个新的命令空间:ns-harbor
- 在KTE中创建一个storeageClass:sc-harbor
安装配置
在控制机上配置好helm,并添加Harbor仓库源
代码语言:txt复制helm repo add bitnami https://charts.bitnami.com/bitnami
下载helm安装包到本地用于检查分析配置项
代码语言:txt复制helm pull bitnami/harbor --version:21.4.0
按照下面的格式填入正确的参数后,即可在控制机上安装
代码语言:txt复制helm install harbor /opt/harbor-21.4.0.tgz -n ns-harbor
--set global.storageClass=sc-harbor
--set internalTLS.enabled=false
--set exposureType=ingress
--set ingress.core.hostname=harbor.test.com
--set ingress.core.ingressClassName=kong
--set ingress.core.controller=ingress-controllers.konghq.com/kong
--set ingress.notary.hostname=notary.test.com
--set ingress.notary.ingressClassName=kong
--set ingress.notary.controller=ingress-controllers.konghq.com/kong
--set externalURL=https://harbor.test.com
--set persistence.imageChartStorage.type=s3
--set persistence.imageChartStorage.s3.accesskey=***
--set persistence.imageChartStorage.s3.secretkey=***
--set persistence.imageChartStorage.s3.region=ap-guangzhou
--set persistence.imageChartStorage.s3.bucket=桶名
--set persistence.imageChartStorage.s3.regionendpoint=cos.ap-guangzhou.myzijiebao.com
--set persistence.imageChartStorage.s3.secure=true
--set adminPassword="***"
--set postgresql.enabled=false
--set externalDatabase.host="***"
--set externalDatabase.user="rdsadmin"
--set externalDatabase.password="***"
--set externalDatabase.coreDatabase="registry"
--set externalDatabase.notaryServerDatabase="notary_server"
--set externalDatabase.notaryServerUsername="rdsadmin"
--set externalDatabase.notaryServerPassword="***"
--set externalDatabase.notarySignerDatabase="notary_signer"
--set externalDatabase.notarySignerUsername="rdsadmin"
--set externalDatabase.notarySignerPassword="***"
等待几分钟后安装完成,通过harbor.test.com访问配置好的Harbor,正常登录首页如下:
由于COS对Harbor的支持不是很友好,上面的安装配置完成后,上传镜像时仍然会报错(原因:list强一致问题,即put 文件后直接list不一定能list到文件),需要腾讯云提工单(提供客户账号appid、可用区、桶名称信息),要求COS运维下发强一致的配置,会保障能list出来。
另外,从2024年1月份开始腾讯云因为域名合格问题进行了一些限制,必须联系腾讯云客户将使用的桶开白名单才行,否则会报错,提示:bucket you are attempting to access must be addressed using COS virtual-styled domain.
如果想要通过公网能够访问Harobr,可以在云原生API网关的实例信息详情页面,添加“公网负载均衡”即可。
如果镜像保存到CFS文件存储里面,那就将persistence.imageChartStorage.type修改为filesystem并去掉s3相关的配置即可,镜像会保存在前面定义的SC文件存储里面,参考命令如下:
代码语言:bash复制helm install harbor /opt/harbor-21.4.0.tgz -n ns-harbor
--set global.storageClass=sc-harbor
--set internalTLS.enabled=false
--set exposureType=ingress
--set ingress.core.hostname=harbor.test.com
--set ingress.core.ingressClassName=kong
--set ingress.core.controller=ingress-controllers.konghq.com/kong
--set ingress.notary.hostname=notary.test.com
--set ingress.notary.ingressClassName=kong
--set ingress.notary.controller=ingress-controllers.konghq.com/kong
--set externalURL=https://harbor.test.com
--set persistence.imageChartStorage.type=filesystem
--set adminPassword="***"
--set postgresql.enabled=false
--set externalDatabase.host="***"
--set externalDatabase.user="rdsadmin"
--set externalDatabase.password="***"
--set externalDatabase.coreDatabase="registry"
--set externalDatabase.notaryServerDatabase="notary_server"
--set externalDatabase.notaryServerUsername="rdsadmin"
--set externalDatabase.notaryServerPassword="***"
--set externalDatabase.notarySignerDatabase="notary_signer"
--set externalDatabase.notarySignerUsername="rdsadmin"
--set externalDatabase.notarySignerPassword="***"