1、简介
Harbor 是一个开源注册表,它通过策略和基于角色的访问控制来保护工件,确保图像被扫描并且没有漏洞,并将图像签名为可信的。Harbor 是一个 CNCF 毕业项目,提供合规性、性能和互操作性,可帮助您跨 Kubernetes 和 Docker 等云原生计算平台一致且安全地管理工件。
2、特性
- 云原生注册表:Harbor 支持容器镜像和Helm图表,可用作容器运行时和编排平台等云原生环境的注册表。
- 基于角色的访问控制:用户通过“项目”访问不同的存储库,并且用户可以对项目下的图像或 Helm 图表具有不同的权限。
- 基于策略的复制:图像和图表可以根据使用过滤器(存储库、标签和标签)的策略在多个注册表实例之间复制(同步)。如果遇到任何错误,Harbor 会自动重试复制。这可用于辅助负载平衡,实现高可用性,并促进混合和多云场景中的多数据中心部署。
- 漏洞扫描:Harbor 定期扫描镜像是否存在漏洞,并进行策略检查以防止部署易受攻击的镜像。
- LDAP/AD 支持:Harbor 与现有企业 LDAP/AD 集成,用于用户身份验证和管理,并支持将 LDAP 组导入 Harbor,然后可以授予特定项目的权限。
- OIDC 支持:Harbor 利用 OpenID Connect (OIDC) 来验证由外部授权服务器或身份提供者验证的用户身份。可以启用单点登录以登录到 Harbor 门户。
- 图像删除和垃圾收集:系统管理员可以运行垃圾收集作业,以便可以删除图像(悬挂清单和未引用的 blob)并定期释放它们的空间。
- Notary:支持使用 Docker Content Trust(利用 Notary)对容器镜像进行签名,以保证真实性和出处。此外,还可以激活防止部署未签名图像的策略。
- 图形用户门户:用户可以轻松浏览、搜索存储库和管理项目。
- 审计:所有对存储库的操作都通过日志进行跟踪。
- RESTful API:提供 RESTful API 以促进管理操作,并且易于用于与外部系统的集成。嵌入式 Swagger UI 可用于探索和测试 API。
- 易于部署:Harbor 可以通过 Docker compose 和 Helm Chart 进行部署,并且最近还添加了一个 Harbor Operator。
3、架构
4、组件
Redis:提供数据缓存功能,支持为作业服务临时持久化作业元数据。
PostgreSQL:存储 Harbor 模型的相关元数据,如项目、用户、角色、复制策略、标签保留策略、扫描器、图表和图像。
Core: Harbor的核心服务,API 服务器、Config Manager、项目管理等。
Web Portal:一个图形用户界面,帮助用户管理 Registry 上的图像。
Job Service:通用作业执行队列服务,让其他组件/服务通过简单的 restful API 提交并发运行异步任务的请求。
Docker Registry:一个第三方注册服务器,负责存储 Docker 镜像和处理 Docker 拉取/推送。
Trivy: 用来做镜像安全扫描
Log collector:日志收集器,负责将其他模块的日志收集到一个地方。
GC 控制器:管理在线 GC 调度设置并启动和跟踪 GC 进度。
Notary:第三方内容信任服务器,负责安全发布和验证内容。
Chart Museum:提供图表管理和访问 API 的第 3 方图表存储库服务器。
5、部署
因为harbor服务的组件较多,所以使用helm的方式来部署
helm repo add harbor https://helm.goharbor.io
helm pull harbor/harbor
tar xf harbor-1.11.1.tgz
cd harbor
修改values.yaml文件
expose:
type: ingress
tls:
enabled: true
# 选择自定义证书
certSource: secret
auto:
commonName: ""
secret:
# 配置ssl证书
secretName: "bgxwz-com-tls"
ingress:
hosts:
# 配置ingress域名
core: harbor.bgxwz.com
notary: notary.bgxwz.com
# 自定义ingressClass
className: "higress"
# 设置外部访问域名
externalURL: https://harbor.bgxwz.com
# 设置pvc,根据自己的实际情况修改storageClass和size
persistence:
enabled: true
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 100Gi
annotations: {}
部署harbor服务
helm install harbor .
查看服务
kubectl get pod |grep harbor
harbor-chartmuseum-5dd589775c-n4ffn 1/1 Running 0 2h
harbor-core-d88fcb96d-5lh57 1/1 Running 0 2h
harbor-database-0 1/1 Running 0 2h
harbor-jobservice-797787b554-ldg8l 1/1 Running 0 2h
harbor-notary-server-848894dbcd-zs4lv 1/1 Running 0 2h
harbor-notary-signer-5b88c4bd99-9m2r8 1/1 Running 0 2h
harbor-portal-7f54b4cfd9-s7hjl 1/1 Running 0 2h
harbor-redis-0 1/1 Running 0 2h
harbor-registry-d7bb6d8cc-2q7rv 2/2 Running 0 2h
harbor-trivy-0 1/1 Running 0 2h
6、登录
harbor的默认用户名:admin,密码:Harbor12345
测试上传镜像,创建一个test的仓库,使用一个nginx的镜像上传
docker login harbor.bgxwz.com
docker tag nginx:1.23-alpine harbor.bgxwz.com/test/nginx:1.23-alpine
docker push harbor.bgxwz.com/test/nginx:1.23-alpine
查看harbor仓库中的镜像
我们可以看到nginx,已经成功上传了
下面测试镜像拉取,先删除镜像
再从harbor仓库拉取镜像
至此我们的Harbor仓库创建完成,并能成功拉取、推送镜像。
评论区