一、Harbor

Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
  
简单来说harbor就是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大.

支持多租户签名和认证
支持安全扫描和风险分析
这次日志审计
基于角色的访问控制
支持可扩展的API和GUI
Image replication between instances
国际化做的很好(目前仅支持英文和中文)

二、安装部署harbor

部署harbor所需要的环境

harbor支持k8s的helm安装和本地安装,我这次先择的安装方式是本地安装。
1.需要安装docker并运行,harbor的运行依赖于docker服务
2.需要安装docker-compose,他可以把多容器运行构建出一个整体服务。harbor就是多个容器一起运行结果

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

给docker-compose执行权限,运行命令:

chmod +x /usr/local/bin/docker-compose

检查,运行docker-compose --version,如下:

[root@server1 ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01

安装

[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh  harbor.v1.10.1.tar.gz  harbor.yml  install.sh  LICENSE  prepare
    

harbor.yml 就是harbor的配置文件,编辑harbor.yml,修改hostname、https证书路径、admin密码
在这里插入图片描述

每次修改完配置文件后都需要运行

[root@server1 harbor]# ./prepare 

运行 ./install.sh

[root@server1 harbor]# ./install.sh 

在这里插入图片描述

常用管理命令,一定要在harbor目录中运行

停止服务: docker-compose stop
开始服务: docker-compose start
重启服务:docker-compose restart
停止服务并删除容器:docker-compose down
启动服务并运行容器:docker-compose up

制作证书

[root@server1 ~]# mkdir -p certs
[root@server1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.westos.org.key -x509 -days 365 -out certs/reg.westos.org.crt
填写信息后打开certs目录即可看到证书:

[root@server1 ~]# cd certs/
[root@server1 certs]# ls
reg.westos.org.crt  reg.westos.org.key

三、GUIl界面使用

浏览器访问https://reg.westos.org:注意解析
在这里插入图片描述这里的项目就是一私有化的Docker镜像仓库,默认的仓库是library。

四、本机上传拉取镜像

修改Docker配置

docker 默认是按 https 请求的
修改文件 /etc/docker/daemon.json,走非加密通道

[root@server1 harbor]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://ioeo57w5.mirror.aliyuncs.com"]
}
{
"insecure-registries": ["reg.westos.org"]
}

然后重启docker

systemctl daemon-reload 
systemctl restart docker

制作镜像

docker tag ubuntu:latest reg.westos.org/cl/ubuntu:latest

本机上传

首先登陆私有库

[root@server1 harbor]# docker login reg.westos.org
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

接下来进行PUSH:

[root@server1 harbor]# docker push reg.westos.org/library/ubuntu
The push refers to repository [reg.westos.org/library/ubuntu]
16542a8fc3be: Pushed 
6597da2e2e52: Pushed 
977183d4e999: Pushed 
c8be1b8f4d60: Pushed 
latest: digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec6983

本机拉取

[root@server1 harbor]# docker rmi reg.westos.org/library/ubuntu		#删除原来的镜像
Untagged: reg.westos.org/library/ubuntu:latest
Untagged: reg.westos.org/library/ubuntu@sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
[root@server1 harbor]# docker pull reg.westos.org/library/ubuntu			#拉取镜像
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
Status: Downloaded newer image for reg.westos.org/library/ubuntu:latest
reg.westos.org/library/ubuntu:latest

五、远程主机上传下载镜像

准备一台安装好docker的虚拟机server3
首先需要做解析:

[root@server2 ~]# cat /etc/hosts

172.25.63.3 server1 reg.westos.org

daemon文件配置:

[root@server2 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://reg.westos.org"]
}

建立证书目录:

[root@server2 ~]#  mkdir -p /etc/docker/certs.d/reg.westos.org

把crt证书放到/etc/docker/certs.d/harbor.dinginfo.com目录下并命名为ca.crt:

[root@server2 ~]# ls /etc/docker/certs.d/reg.westos.org
ca.cr

然后,重启docker

systemctl daemon-reload
systemctl restart docker

再来登录:

[root@server2 ~]# docker login reg.westos.org
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

上传镜像:

[root@server2 ~]# docker tag nginx:latest reg.westos.org/library/nginx
[root@server2 ~]# docker push reg.westos.org/library/nginx

测试下载:

[root@server2 ~]# docker pull reg.westos.org/library/ubuntu

六、为harbor添加内容扫描

首先需要关闭之前的容器:

[root@server1 harbor]# docker-compose down

清理配置文件:

[root@server1 harbor]# ./prepare 

加上内容信任,扫描器和helm仓库重新安装:

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

刷新网页端可以看到多了一些配置:

在这里插入图片描述

可以看到以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描:
在这里插入图片描述在这里插入图片描述也可以配置镜像上传的时候自动扫描:
在这里插入图片描述

测试上传镜像:

[root@server1 harbor]# docker push reg.westos.org/library/base-debian10

七、配置harbor内容签名

签名属于内容信任,没有签名的内容可以选择不部署。
在这里插入图片描述可以看到刚上传的内容是没有签名的。

内容信任的服务端口是4443,接下来就进行harbor内容信任的配置:
1.将证书放在指定位置

[root@server1 ~]# mkdir /root/.docker/tls/reg.westos.org\:4443/
[root@server1 reg.westos.org:4443]# cp /etc/docker/certs.d/reg.westos.org/ca.crt .
[root@server1 reg.westos.org:4443]# ls
ca.crt

2.打开内容信任功能:

[root@server1 reg.westos.org:4443]# export DOCKER_CONTENT_TRUST=1
[root@server1 reg.westos.org:4443]# export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443

配置完成。

3.测试上传

在网页端将刚上传的镜像删除后再进行上传测试:
注意:,签名与tag中的v1绑定,上传时必须指定tag中版本,要不然会跳过签名。

在这里插入图片描述之后上传时每次都需要输入根密钥和仓库密钥,而仅当tag不同时仅需要输入仓库密钥。

4.打开项目内容信任功能

即不允许没有签名的镜像上传下载。
在这里插入图片描述5.删除签名镜像

以签名的镜像时不能删除的,如果需要删除则需要先删除签名:

先查看签名信息:

[root@server1 ~]# docker trust inspect reg.westos.org/library/base-debian10

删除签名:

[root@server1 ~]# docker trust revoke reg.westos.org/library/base-debian10
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐