大家好,我是SuieKa。一个在学计算机网络方面的小白,也是在校大二学生,学以致用,实操记载,博文若有毛病,请一定留言哟
今天写了这篇简单介绍harbor私有仓的博文。有不对,请指教。


目录

  • 一、什么是harbor?
  • 1、harbor介绍
  • 2、harbor原理介绍
  • 二、安装harbor.v2.0.0私有仓库
  • 三、进行客户端实现pull、push


一、什么是harbor?

官网:https://goharbor.io/

libks2 centos安装_docker

1、harbor介绍

1)、harbor:港口之意
Harbor是一个开放源代码容器映像注册表,可通过基于角色的访问控制来保护映像,扫描映像中的漏洞并将映像签名为受信任。作为CNCF孵化项目,Harbor提供合规性,性能和互操作性,以帮助您跨Kubernetes和Docker等云原生计算平台持续,安全地管理映像。
Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。

2)、Harbor核心组件
Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
Registry:镜像仓库,负责存储镜像文件。
Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

3)、Harbor和Registry的比较
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。

(1).提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

(2).提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

(3).支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

(4).良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

(5).Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

libks2 centos安装_容器_02

2、harbor原理介绍

1)、软件资源

Harbor是VMware公司开源的企业级DockerRegistry项目。
项目地址为https://github.com/vmware/harbor。 其目标是帮助用户迅速搭建一个企业级Dockerregistry服务。 它以Docker公司开源的registry为基础, 提供了管理UI, 基于角色的访问控制(Role Based Access Control), AD/LDAP集成、 以及审计日志(Auditlogging)等企业用户需求的功 能, 同时还原生支持中文。 Harbor的每个组件都是以Docker容器的形式构建的, 使用Docker Compose来对它进行部 署。
用于部署Harbor的Docker Compose模板位于 /Deployer/docker-compose.yml, 由5个容器组成, 这几个容器通过 Docker link的形式连接在一起,在容器之间通过容器名字互相访问。 对终端用户而言, 只需要暴露 proxy ( 即Nginx) 的服务端口。

Proxy: 由Nginx 服务器构成的反向代理。
Registry: 由Docker官方的开源 registry 镜像构成的容器实例。
UI: 即架构中的 core services, 构成此容器的代码是 Harbor项目的主体。
MySQL: 由官方 MySQL 镜像构成的数据库容器。
Log: 运行着 rsyslogd的容器, 通过 log-driver的形式收集其他容器的日志。

2)、 Harbor特性

a、 基于角色控制: 用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限。
b、 基于镜像的复制策略: 镜像可以在多个Harbor实例之间进行复制。
c、 支持LDAP: Harbor的用户授权可以使用已经存在LDAP用户。
d、 镜像删除 &垃圾回收: Image可以被删除并且回收Image占用的空间, 绝大部分的用户操作API, 方便 用户对系统进行扩展。
e、 用户UI:用户可以轻松的浏览、 搜索镜像仓库以及对项目进行管理 。
f、 轻松的部署功能: Harbor提供了online、 offline安装,除此之外还提供了virtualappliance安装 。
g、 Harbor和 docker registry 关系: Harbor实质上是对docker registry 做了封装, 扩展了自己的业务模块。

libks2 centos安装_libks2 centos安装_03

二、安装harbor.v2.0.0私有仓库

安装docker-compose(不然后面使用脚本安装harbor会报错)
使用国内(快)

17:50:22 root@harbor-server ~]#curl -L https://get.daocloud.io/docker/compose/releases/download/v1.25.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   425  100   425    0     0    486      0 --:--:-- --:--:-- --:--:--   486
100 16.4M  100 16.4M    0     0  3614k      0  0:00:04  0:00:04 --:--:-- 5111k
[17:51:31 root@harbor-server ~]#chmod +x /usr/local/bin/docker-compose
[17:51:45 root@harbor-server ~]#docker-compose --version
docker-compose version 1.25.2, build 698e2846
CentOS8.1
[16:22:58 root@wang-tuxing network-scripts]#uname -rvs
Linux 4.18.0-147.el8.x86_64 #1 SMP Wed Dec 4 21:51:45 UTC 2019

前提:

[16:39:08 root@harbor-server ~]#python3.6
Python 3.6.8 (default, Nov 21 2019, 19:31:34)
[16:39:25 root@harbor-server ~]#docker-compose --version
docker-compose version 1.25.2, build 698e2846
[16:39:34 root@harbor-server ~]#docker -v
Docker version 19.03.8, build afacb8b

做一个证书:

[17:03:04 root@harbor-server software]#cd
[17:03:57 root@harbor-server ~]#openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
........................................+++++
........+++++
e is 65537 (0x010001)
Enter pass phrase for server.key:		####输入root密码
Verifying - Enter pass phrase for server.key:		####输入root密码

生成证书:

[17:04:41 root@harbor-server ~]#openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:		####root密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZG			####我写中国简称
State or Province Name (full name) []:SC			####四川简称
Locality Name (eg, city) [Default City]:CD			####成都简称
Organization Name (eg, company) [Default Company Ltd]:HUAWEI		####这里是写组织名称,看个人填写
Organizational Unit Name (eg, section) []:hub.huawei.com			###组织单位名称,看个人填写
Common Name (eg, your name or your server's hostname) []:wang-tuxing	###本CentOS的hostname主机名
Email Address []:15228416354@163.com	####邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:		###回车
An optional company name []:		###回车

当前下生成两个文件server.csr  server.key
[17:09:50 root@harbor-server ~]#ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  initial-setup-ks.cfg  server.csr  server.key
[17:14:12 root@harbor-server ~]#cp server.key server.key.org
 ###证书启动时候,需要输入私钥的密码,但而nginx是在容器中运行,启动无法写入证书密码,会报错退出的。让证书启动时候不包含秘钥,退秘钥
[17:16:33 root@harbor-server ~]#openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:“password”		###写入root密码
writing RSA key
[17:17:22 root@harbor-server ~]#openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=C = ZG, ST = SC, L = CD, O = HUAWEI, OU = hub.huawei.com, CN = wang-tuxing, emailAddress = 15228416354@163.com
Getting Private key
[17:18:10 root@harbor-server ~]#mkdir -p /data/cert		####存放地 
 root@harbor-server ~]#mv server.* /data/cert/
[17:20:43 root@harbor-server ~]#cd /data/cert/
[17:20:48 root@harbor-server cert]#ll
总用量 16
-rw-r--r-- 1 root root 1318 5月  21 17:18 server.crt
-rw-r--r-- 1 root root 1054 5月  21 17:09 server.csr
-rw------- 1 root root 1679 5月  21 17:17 server.key
-rw------- 1 root root 1751 5月  21 17:16 server.key.org

离线下载包地址:https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz
使用迅雷下载(快)

[16:54:48 root@harbor-server ~]#cd /software/
[16:54:50 root@harbor-server software]#ll
总用量 843504
-rw-r--r-- 1 root root 863747205 5月  21 16:46 harbor-offline-installer-v2.0.0.tgz
[17:01:39 root@harbor-server software]#tar xf harbor-offline-installer-v2.0.0.tgz
[17:02:32 root@harbor-server software]#mv harbor /usr/local/
[17:02:32 root@harbor-server software]#cd /usr/local/harbor
[19:30:03 root@wang-tuxing harbor]#ls
common.sh  harbor.v2.0.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

配置harbor:harbor的模板配置文件是harbor.yml.tmpl

vi harbor.yml.tmpl

libks2 centos安装_linux_04


libks2 centos安装_docker_05

[19:42:02 root@wang-tuxing harbor]#./install.sh 
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating registryctl   ... done
Creating redis         ... done
Creating harbor-db     ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----

若报错:

[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-7213c023fb07 -j RETURN: iptables: Index of insertion too big.
 (exit status 1))

重启docker:systemctl restart docker
再执行脚本

docker查看进程:

[19:52:18 root@wang-tuxing harbor]#docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS                    PORTS                                            NAMES
ff077c97b5cd        goharbor/nginx-photon:v2.0.0         "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes (healthy)   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp      nginx
8a4a8e857503        goharbor/harbor-jobservice:v2.0.0    "/harbor/entrypoint.…"   13 minutes ago      Up 13 minutes (healthy)                                                    harbor-jobservice
d32f28a8fb06        goharbor/harbor-core:v2.0.0          "/harbor/entrypoint.…"   13 minutes ago      Up 13 minutes (healthy)                                                    harbor-core
a5718b941027        goharbor/harbor-db:v2.0.0            "/docker-entrypoint.…"   13 minutes ago      Up 13 minutes (healthy)   5432/tcp                                         harbor-db
523e86ee40c2        goharbor/redis-photon:v2.0.0         "redis-server /etc/r…"   13 minutes ago      Up 13 minutes (healthy)   6379/tcp                                         redis
32d784066aeb        goharbor/harbor-registryctl:v2.0.0   "/home/harbor/start.…"   13 minutes ago      Up 13 minutes (healthy)                                                    registryctl
80bf03f0e4b1        goharbor/registry-photon:v2.0.0      "/home/harbor/entryp…"   13 minutes ago      Up 13 minutes (healthy)   5000/tcp                                         registry
e39ed6e07588        goharbor/harbor-portal:v2.0.0        "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes (healthy)   8080/tcp                                         harbor-portal
8ee4ce2d4db0        goharbor/harbor-log:v2.0.0           "/bin/sh -c /usr/loc…"   13 minutes ago      Up 13 minutes (healthy)   127.0.0.1:1514->10514/tcp                        harbor-log

libks2 centos安装_centos_06


访问harbor服务器:

修改Windows hosts文件

libks2 centos安装_linux_07


添加192.168.1.103 hub.huawei.com

保存退出!

libks2 centos安装_linux_08


登录admin密码password(前面设置的密码)

libks2 centos安装_centos_09


Harbor 的日常运维管理是通过 docker-compose 来完成的,Harbor 本身有多个服务进程,都放在 docker 容器之中运行,我们可以通过 docker ps 命令查看。

启动
docker-compose start

停止
docker-compose stop

重启
docker-compose restart

三、进行客户端实现pull、push

环境:

CentOS8.1(harbor仓库):192.168.1.103

CentOS7.5(harbor客户端):192.168.1.105

1、创建用户

libks2 centos安装_容器_10


根据提示写

libks2 centos安装_centos_11

退出,就可以使用wang用户登录

2、新建项目

libks2 centos安装_centos_12


libks2 centos安装_容器_13


libks2 centos安装_容器_14


3、推送镜像

[21:09:22 root@harbor-server ~]# vim /etc/docker/daemon.json

libks2 centos安装_docker_15


修改centos8的hosts文件

[21:13:11 root@harbor-server ~]#echo "192.168.1.103 hub.huawei.com" >> /etc/hosts

libks2 centos安装_docker_16


再这里就有推送示例

libks2 centos安装_docker_17


测试:是否可以推送镜像

登录到用户
[21:14:25 root@harbor-server ~]#[22:15:23 root@harbor-server harbor]#docker login -u admin -p password  hub.huawei.com
Username: 		###admin
Password: 		###密码
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

本地server推送:

[22:16:54 root@harbor-server harbor]#docker tag centos:latest  hub.huawei.com/wa/centos:latest
[22:14:31 root@harbor-server harbor]#docker push hub.huawei.com/wa/centos:latest 
The push refers to repository [hub.huawei.com/wa/centos]
0683de282177: Pushed 
latest: digest: sha256:9e0c275e0bcb495773b10a18e499985d782810e47b4fce076422acb4bc3da3dd size: 529

刷新查看:

libks2 centos安装_linux_18

docker pull hub.huawei.com/wa/centos:latest   ###可以使用这个命令进行下载

centos7.5客户端推送:

libks2 centos安装_linux_19

[22:24:05 root@harbor-client ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[22:38:46 root@harbor-client ~]#echo "10.10.10.12 hub.huawei.com" >> /etc/hosts
[22:39:12 root@harbor-client ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.10.12 hub.huawei.com

[22:40:28 root@harbor-client ~]#cat /etc/docker/daemon.json 
{
    "insecure-registries": ["hub.huawei.com"]
}

[22:41:13 root@harbor-client ~]#docker login -u admin -p password  hub.huawei.com			##登录
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

libks2 centos安装_docker_20


查看:

libks2 centos安装_centos_21


在centos8上pull下来

[22:17:07 root@harbor-server ~]#docker pull hub.huawei.com/wa/tomcat9
Using default tag: latest
latest: Pulling from wa/tomcat9
8a29a15cefae: Already exists 
974749c98d4f: Pull complete 
32bfbcbfe866: Pull complete 
b728187a4211: Pull complete 
Digest: sha256:57d08218638d0c7cab441b4787e84396e17ae1b3a903d31629c0813dc2a63f9d
Status: Downloaded newer image for hub.huawei.com/wa/tomcat9:latest
hub.huawei.com/wa/tomcat9:latest

libks2 centos安装_docker_22


成功!