侧边栏壁纸
博主头像
背锅小王子博主等级

我从事运维工作有十年之久,主要从事云原生相关的工作,对k8s、devops、servicemesh、可观察性等较为熟悉!

  • 累计撰写 59 篇文章
  • 累计创建 64 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

企业级镜像仓库Harbor

背锅小王子
2023-04-01 / 0 评论 / 0 点赞 / 176 阅读 / 1,427 字
温馨提示:
本文最后更新于 2023-04-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

图片-1680320476019
图片-1680320653460

测试上传镜像,创建一个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

图片-1680321072570

查看harbor仓库中的镜像

图片-1680320888807

我们可以看到nginx,已经成功上传了

下面测试镜像拉取,先删除镜像

图片-1680321251297

再从harbor仓库拉取镜像

图片-1680321284610

至此我们的Harbor仓库创建完成,并能成功拉取、推送镜像。

0

评论区