部署harbor仓库

  • 一、背景介绍
  • 二、安装过程
  • 三、在harbor仓库上传和下载镜像
  • (1)、上传镜像
  • (2)、其他主机实现镜像下载
  • 四、harbor仓库的管理
  • (1)、创建私有仓库
  • (2)、镜像扫描安全
  • (3)、内容信任


一、背景介绍

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
Harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
Harbor作为一个企业级私有Registry服务器,提供了更好的性能和安全,提升用户使用Registry构建和运行环境传输镜像的效率。
Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。

二、安装过程

注意,本节的内容与项目实战10搭建registry容器的内容会相互影响,应此本节是独立进行的
1、获取软件包,解压安装包

[root@server1 ~] ls 
harbor-offline-installer-v1.10.1.tgz    docker-compose-Linux-x86_64-1.27.0

docker-compose-Linux-x86_64-1.27.0为二进制文件,需放到/usr/local/bin/下,并赋予执行权限

[root@server1 mnt] mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
[root@server1 mnt] chmod +x /usr/local/bin/docker-compose                    赋予执行权限

2、生成证书和密钥

[root@server1 certs] mkdir -p /data/certs                                                                                                                       建立存放位置                        
[root@server1 certs] openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/certs/westos.org.key -x509 -days 365 -out /data/certs/westos.org.crt             生成证书和密钥    
[root@localhost mnt] tar zxf harbor-offline-installer-v1.10.1.tgz                                                                                               解压
[root@server1 mnt] cd harbor                                                
[root@server1 harbor] ls
common.sh  harbor.v1.10.1.tar.gz  harbor.yml  install.sh  LICENSE  prepare
[root@server1 harbor] vim harbor.yml                                                                                                                            修改配置文件

docker harbor登陆需要证书吗 docker registry harbor_上传

docker harbor登陆需要证书吗 docker registry harbor_docker_02


3、执行编译

[root@localhost harbor] ./install.sh

时间较为漫长,注意等待

docker harbor登陆需要证书吗 docker registry harbor_上传_03

docker harbor登陆需要证书吗 docker registry harbor_docker_04


开启harbor的时和遇到问题,说nginx不能打开,因为nginx的端口时80,我们查询端口发现80端口被占用

docker harbor登陆需要证书吗 docker registry harbor_docker_05

使用命令

[root@server1 harbor]kill - 9 5474 关闭进程
[root@server1 harbor] systemctl restart docker 重启即可完成

docker harbor登陆需要证书吗 docker registry harbor_运维_06


4、开启harbor仓库

因为是自建证书,所有网址不认可但是不影响访问

docker harbor登陆需要证书吗 docker registry harbor_linux_07


docker harbor登陆需要证书吗 docker registry harbor_上传_08

docker harbor登陆需要证书吗 docker registry harbor_运维_09

docker harbor登陆需要证书吗 docker registry harbor_上传_10


即可开始管理我们的docker文件

默认的库为library

docker harbor登陆需要证书吗 docker registry harbor_上传_11


注意docker-compose不用时需要关闭,不然会一直扫描占用内存

[root@server1 harbor] docker-compose down

docker harbor登陆需要证书吗 docker registry harbor_linux_12

三、在harbor仓库上传和下载镜像

(1)、上传镜像

为这里使用的是虚拟机server1作为harbor的提供服务

1、设置本机的地址解析

docker harbor登陆需要证书吗 docker registry harbor_linux_13


2、本机登陆harbor仓库

本机直接在本地登陆时会发现错误,因为是证书是被不知名的ca签名的,因为是我们自建的证书,所以会有问题

docker harbor登陆需要证书吗 docker registry harbor_linux_14


所以我们将之前的证书进行如下更改

[root@server1 harbor] mkdir /etc/docker/certs.d/reg.westos.org -p                                 在docker文件里面建立认证地址目录
[root@server1 harbor] cp /data/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/           将之前建立的证书拷贝到这                          
[root@server1 harbor] cd /etc/docker/certs.d/reg.westos.org/
[root@server1 reg.westos.org] ls
westos.org.crt
[root@server1 reg.westos.org] mv westos.org.crt ca.crt                                            修改名字为ca证书

登陆成功

docker harbor登陆需要证书吗 docker registry harbor_私有仓库_15


3、tag标记并且上传

[root@server1 docker] docker tag busybox:latest reg.westos.org/library/mario:latest
[root@server1 docker]docker push reg.westos.org/library/mario:latest

可以在harbor库中查看到上传的文件

docker harbor登陆需要证书吗 docker registry harbor_docker_16

(2)、其他主机实现镜像下载

1、在server2,server3,server4建立搭建docker

yum install docker-ce -y

//
[docker]
name=docker-ce
baseurl=http://172.25.42.250/docker-ce
gpgcheck=0
///

yum install docker-ce -y
systemctl enable --now docker

2、server2,server3,server4设置地址解析

vim /etc/hosts

docker harbor登陆需要证书吗 docker registry harbor_运维_17


3、server2,server3,server4设置镜像拉取地址

vim /etc/docker/daemon.json

//
{
  "registry-mirrors": ["https://reg.westos.org"]
}
//

4、server2,server3,server4从server1那获取证书

mkdir -p /etc/docker/certs.d/reg.westos.org
scp server1:/etc/docker/certs.d/reg.westos.org/ca.crt /etc/docker/certs.d/reg.westos.org/
systemctl reload docker.service

5、下载测试

在server2运行容器时可以自动从harbor仓库中拉取文件

docker harbor登陆需要证书吗 docker registry harbor_linux_18


在harbor仓库中可以看到上传和拉取的记录

docker harbor登陆需要证书吗 docker registry harbor_linux_19

四、harbor仓库的管理

(1)、创建私有仓库

1、创建私密库

docker harbor登陆需要证书吗 docker registry harbor_docker_20


docker harbor登陆需要证书吗 docker registry harbor_上传_21


2、创建用户

docker harbor登陆需要证书吗 docker registry harbor_上传_22


3、将用户加入到westos私有仓库的管理员

docker harbor登陆需要证书吗 docker registry harbor_私有仓库_23


4、上传镜像到私有仓库

[root@server1 docker] docker tag game2048:latest reg.westos.org/westos/game2048:latest
[root@server1 docker] docker push reg.westos.org/westos/game2048:latest

docker harbor登陆需要证书吗 docker registry harbor_私有仓库_24


可以在私有仓库查看到镜像文件

docker harbor登陆需要证书吗 docker registry harbor_docker_25


在server2登陆刚才私有仓库的管理的账户即可下载

[root@server2 docker] docker login -u ck -p ck123456CK                 账户密码登陆
[root@server2 docker] docker pull reg.westos.org/westos/game2048:latest

(2)、镜像扫描安全

1、先关闭当前的仓库

[root@server1 ~] cd harbor/
[root@server1 harbor] docker-compose down

2、重新安装harbor
–with-notary: 镜像信任,Notary是Docker镜像的签名工具,用来保证镜像在pull,push和传输过程中的一致性和完整性,避免中间人攻击,避免非法的镜像更新和运行。
镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取

–with-clair: 镜像安全扫描,Harbor与Clair集成,添加漏洞扫描功能。 默认在运行harbor时漏洞扫描是没有开启的,需要重新开启并添加参数

–with-chartmuseum: 支持chart仓库服务

[root@server1 harbor] ./install.sh --with-notary --with-clair --with-chartmuseum

3、进行扫描镜像文件

现在是没有扫描的

docker harbor登陆需要证书吗 docker registry harbor_运维_26


进行扫描

docker harbor登陆需要证书吗 docker registry harbor_linux_27

(3)、内容信任

1、在server1(harbor仓库所在主机)进行设置

[root@server1 ~] cd /root/harbor/
[root@server1 ~]  export DOCKER_CONTENT_TRUST_=1                     开启信任模式
[root@server1 ~]  export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443             指定信任传输端口
[root@server1 harbor] netstat -antlp

docker harbor登陆需要证书吗 docker registry harbor_上传_28


2、上传测试

发现上传失败,因为我们需要根部署证书

docker harbor登陆需要证书吗 docker registry harbor_docker_29

3、建立证书

docker harbor登陆需要证书吗 docker registry harbor_上传_30


4、再次上传

需要多次输入密码,自己随便设定新密码就行

docker harbor登陆需要证书吗 docker registry harbor_linux_31


查看到刚刚签名的镜像文件,建立了信任的镜像文件

docker harbor登陆需要证书吗 docker registry harbor_运维_32


5、关闭信任模式

export DOCKER_CONTENT_TRUST=0