Harbor[1]是由VMware公司中国团队为企业用户设计的Registry server
开源项目,包括了权限管理(RBAC)
、LDAP、审计、管理界面、自我注册、HA
等企业必需的功能,同时针对中国用户的特点,设计镜像复制
和中文支持
等功能。Harbor是CNCF毕业的项目,可提供合规性,性能和互操作性,以帮助您跨Kubernetes和Docker等云原生计算平台持续,安全地管理工件。
云原生注册表
: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。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]也可以申请个人免费版证书 |
考虑到网络和测试的需求,我们通过迅雷在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的基础探索。