专栏首页云原生生态圈Harbor开源镜像仓库企业级实践(1/3)

Harbor开源镜像仓库企业级实践(1/3)

Harbor[1]是由VMware公司中国团队为企业用户设计的Registry server开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制中文支持等功能。Harbor是CNCF毕业的项目,可提供合规性,性能和互操作性,以帮助您跨Kubernetes和Docker等云原生计算平台持续,安全地管理工件。

Harbor的功能

  • 云原生注册表:Harbor支持容器图像和Helm[2]图表,下面的会有图片可以看到,可作为容器原生运行时和编排平台等云原生环境的注册表。
  • 基于角色的访问控制:可以通过项目Project或者helm的chat进行权限控制
  • 基于策略的复制:可以基于策略在多个镜像仓库之间同步数据,并且有重试机制,同时对负载均衡和实现高可用性提供友好的支持。 漏洞扫描:Harbor会定期扫描图像中的漏洞,并进行策略检查以防止部署易受攻击的图像。
  • LDAP/AD支持:Harbor与现有企业LDAP/AD集成以进行用户身份验证和管理,并支持将LDAP组导入Harbor,然后可以将其授予特定项目的权限。
  • OIDC支持:Harbor利用OpenID Connect(OIDC)来验证由外部授权服务器或身份提供者认证的用户的身份。可以启用单点登录以登录Harbor门户。
  • 镜像删除和垃圾收集:系统管理员可以运行垃圾收集作业,以便可以删除镜像(悬挂的清单和未引用的Blob),并可以定期释放其空间。
  • 公证人:支持使用Docker Content Trust(利用公证人)对容器映像进行签名,以确保真实性和出处。此外,还可以激活阻止部署未签名映像的策略。
  • Portal:用户可以轻松浏览,搜索存储库和管理项目。
  • 审核:通过日志跟踪对存储库的所有操作。
  • RESTful API:提供RESTful API有助于管理操作,并且易于与外部系统集成。嵌入式Swagger UI可用于探索和测试API。
  • 易于部署:可通过Docker compose和Helm Chart 部署 Harbor。

Harbor环境需求

Software

Version

Description

Docker engine

17.06.0-ce及以上

安装参考: Docker Docs[3]

Docker Compose

1.18.0版本及以上即可

安装参考: Docker-Compose Docs[4]

Openssl

为避免安全漏洞,建议升级到最新

可以选择自签证书: Config HTTPS[5]也可以申请个人免费版证书

Harbor离线安装

考虑到网络和测试的需求,我们通过迅雷在GITHUB上下载离线安装的harbor安装包,其中包含了Harbor所需要的基础镜像,离线安装时通过离线安装包内的脚本将导出的镜像文件通过docker load -i导入到服务器内,然后通过编排软件docker-compose运行,相当方便。使用到的基础镜像如下:

goharbor/chartmuseum-photon          v2.0.0              4db8d6aa63e9        8 weeks ago         127MB
goharbor/redis-photon                v2.0.0              c89ea2e53cc0        8 weeks ago         72.2MB
goharbor/trivy-adapter-photon        v2.0.0              6122c52b7e48        8 weeks ago         103MB
goharbor/clair-adapter-photon        v2.0.0              dd2210cb7f53        8 weeks ago         62MB
goharbor/clair-photon                v2.0.0              f7c7fcc52278        8 weeks ago         171MB
goharbor/notary-server-photon        v2.0.0              983ac10ed8be        8 weeks ago         143MB
goharbor/notary-signer-photon        v2.0.0              bee1b6d75e0d        8 weeks ago         140MB
goharbor/harbor-registryctl          v2.0.0              c53c32d58d04        8 weeks ago         102MB
goharbor/registry-photon             v2.0.0              afdc1b7ada36        8 weeks ago         84.5MB
goharbor/nginx-photon                v2.0.0              17892f03e56c        8 weeks ago         43.6MB
goharbor/harbor-log                  v2.0.0              5f8ff08e795c        8 weeks ago         82MB
goharbor/harbor-jobservice           v2.0.0              c68a2495bf55        8 weeks ago         116MB
goharbor/harbor-core                 v2.0.0              3aa3af64baf8        8 weeks ago         138MB
goharbor/harbor-portal               v2.0.0              e0b1d3c894c4        8 weeks ago         52.4MB
goharbor/harbor-db                   v2.0.0              5c76f0296cec        8 weeks ago         154MB
goharbor/prepare                     v2.0.0              7266d49995ed        8 weeks ago         158MB

在安装之前,我们需要修改一下Harbor的配置文件,比如修改harbor使用的域名、HTTPS证书的位置等,下面我们简单的说明:

☸️  k8sdev? default  ~/Downloads  ? ? scp harbor-offline-installer-v2.0.0.tgz root@192.168.99.128:/root/
# 在192.168.99.128上进行Harbor的安装配置
root@master:~# tar xf harbor-offline-installer-v2.0.0.tgz
root@master:~/harbor# mv harbor.yml.tmpl harbor.yml

我们重新命名配置文件harbor.yml后,编辑该文件

hostname: harbor.devopsman.cn # 配置自己的harbor访问域名

如果你需要配置HTTPS来访问harbor,那么需要申请证书或者自己生成的自签证书,这里我们直接在DNSPOD上申请一个免费的一年可用的证书

实际上https的证书是配置给harbor的反向代理nginx的,我们一般访问harbor其实是访问nginx然后将请求转发给harbor,在我们安装完成harbor之后,可以运行以下命令查看到Nginx相关的反向代理的配置:

root@master:~/harbor# docker exec -it nginx cat /etc/nginx/nginx.conf

接下来,我们需要配置一下HTTPS可信证书,首先在DNSPOD上下载申请审批成功后的证书

然后解压,将解压后的Nginx目录下的两个文件重命名放在/data/cert/目录下

root@master:~/harbor/Nginx# ls -alh
total 32K
drwxr-xr-x   2 root root 4.0K Jul  7  2020 .
drwxr-xr-x 100 root root  20K Jul  7 01:37 ..
-rw-r--r--   1 root root 3.7K Jul  7  2020 1_harbor.devopsman.cn_bundle.crt
-rw-r--r--   1 root root 1.7K Jul  7  2020 2_harbor.devopsman.cn.key
# 重命名之后放在/data/cert目录下,如果没有这个目录,需要提前创建
mkdir -pv /data/cert
root@master:~/harbor/Nginx# cp 1_harbor.devopsman.cn_bundle.crt /data/cert/harbor.devopsman.cn.crt
root@master:~/harbor/Nginx# cp 2_harbor.devopsman.cn.key /data/cert/harbor.devopsman.cn.key

然后在harbor.yml下配置证书的位置即可:

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/harbor.devopsman.cn.crt
  private_key: /data/cert/harbor.devopsman.cn.key

配置完证书,使用prepare进行配置nginx的https证书

cd /root/harbor # harbor离线版解压后的文件目录
root@master:~/harbor# ./prepare
prepare base dir is set to /root/harbor
...
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir

无果没有报错,然后我们就可以直接使用docker-compose运行harbor的容器了

root@master:~/harbor# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating registryctl   ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating harbor-core   ... done
Creating nginx             ... done
Creating harbor-jobservice ... done

安装检测

然后我们可以直接通过docker login测试一下

root@master:~/harbor# docker login harbor.devopsman.cn
Username: admin
Password:                  # 默认的密码在harbor.yml文件中,可以自行修改
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

通过浏览器查看是否能登录以及证书的有效期

此时我们可以通过推送一个测试的镜像,检查是够正常,我们先在浏览器中访问harbor.devopsman.cn,然后找到推送命令,查看推送的格式,下面我们测试一下看看结果:

我们选择一个k8s集群服务基础组件kube-proxy的镜像,重新打个镜像的tag,然后推送到我们的devopsman仓库内:

root@master:~/harbor# docker tag k8s.gcr.io/kube-proxy:v1.18.0 harbor.devopsman.cn/devopsman/kube-proxy:v1.18.0
root@master:~/harbor# docker push harbor.devopsman.cn/devopsman/kube-proxy:v1.18.0
The push refers to repository [harbor.devopsman.cn/devopsman/kube-proxy]
46b37415a80a: Pushed
0d8d54147a3a: Pushed
597151d24476: Pushed
ad9fb2411669: Pushed
2dc2f2423ad1: Pushed
682fbb19de80: Pushed
fc4976bd934b: Pushed
v1.18.0: digest: sha256:b832454a96a848ad5c51ad8a499ef2173b627ded2c225e3a6be5aad9446cb211 size: 1786

通过查看,确实成功的完成了镜像的上传:

这样就完成了harbor环境的基础搭建,接下来就好好的体验Harbor带来的新功能吧,通过图上看到harbor2.0目前支持Dark主题,helm推送等,开始动手吧,体验Harbor的新功能和特性,本章节就完成了harbor的基础探索。

本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem),作者:Marionxue

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​GoLANG IN ACTION 2020

    因为头脑发热选择go语言?我想可能不是,在经过一系列的了解和调研后,我是认真的选择了golang, 当Rob Pike不满C++委员会要新添加35中新特性之后,...

    公众号: 云原生生态圈
  • 百度开源BFE被CNCF接纳为Sandbox Project

    2020年6月24日,BFE[1]开源项目被CNCF[2] (Cloud Native Computing Foundation,云原生计算基金会)正式接纳为S...

    公众号: 云原生生态圈
  • 由浅入深剖析Openldap服务生存之南

    ldap轻量级目录访问协议,一般简称为ldap,具有X500和LDAP两个国家标准,支持TCP/IP协议,是internet上目录服务的通用访问协议。

    公众号: 云原生生态圈
  • 5. 死磕 k8s系列之安装docker私仓(harbor)

    harbor是VMWare出品的一款非常优秀的docker私仓管理工具,它不仅提供了基础的镜像存储、权限控制等功能,还提供了镜像同步等高级功能。

    彤哥
  • 在TKE集群搭建harbor仓库

    本次带来的分享是在TKE集群上搭建harbor私有仓库,另外推荐腾讯云的容器镜像服务TCR

    马凌鑫
  • k8s学习记录02

    过一会儿使用命令helm status harbor-release查看下部署的状态:

    jeremyxu
  • 性能环境之docker操作指南7(全网最全)

    Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。 harbor共有六个容器组成:

    高楼Zee
  • [原创]harbor自建网桥和办公网段冲突一例

    https://github.com/vmware/harbor/issues/1403

    追马
  • prometheus监控harbor

    随着k8s集群上面服务越来越多,大家更加关心的问题反而是服务能不能更稳定,这时候监控作用就体现出来了,下面主要说一下harbor是怎么用prometheus来监...

    SY小站
  • harbor源码解读

    harbor基本上是目前企业级docker registry唯一的开源方案了,之前就有接触,不过一直是当成一个功能丰富的镜像registry来用,并没有深入了解...

    jeremyxu

扫码关注云+社区

领取腾讯云代金券