前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Harbor开源镜像仓库企业级实践(1/3)

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

作者头像
公众号: 云原生生态圈
发布2020-07-14 14:29:51
9640
发布2020-07-14 14:29:51
举报
文章被收录于专栏:云原生生态圈云原生生态圈

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运行,相当方便。使用到的基础镜像如下:

代码语言:javascript
复制
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证书的位置等,下面我们简单的说明:

代码语言:javascript
复制
☸️  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后,编辑该文件

代码语言:javascript
复制
hostname: harbor.devopsman.cn # 配置自己的harbor访问域名

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

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

代码语言:javascript
复制
root@master:~/harbor# docker exec -it nginx cat /etc/nginx/nginx.conf

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

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

代码语言:javascript
复制
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下配置证书的位置即可:

代码语言:javascript
复制
# 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证书

代码语言:javascript
复制
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的容器了

代码语言:javascript
复制
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测试一下

代码语言:javascript
复制
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仓库内:

代码语言:javascript
复制
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的基础探索。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Harbor的功能
  • Harbor环境需求
  • Harbor离线安装
  • 安装检测
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档