harbor是什么
1.部署企业私有仓库往往是很有必要的, 他可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度和GFW的原因, 往往需要将一些无法直接下载的镜像导入本地私有仓库. 而Harbor就是部署企业私有仓库的一个不二之选。
2.Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。
3.harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
4.harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。
harbor的功能
Harbor是VMware公司开源了企业级Registry项目, 其的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:
基于角色的访问控制(Role Based Access Control)
基于策略的镜像复制(Policy based image replication)
镜像的漏洞扫描(Vulnerability Scanning)
AD/LDAP集成(LDAP/AD support)
镜像的删除和空间清理(Image deletion & garbage collection)
友好的管理UI(Graphical user portal)
审计日志(Audit logging)
RESTful API
部署简单(Easy deployment)
harbor的架构
Harbor依赖的外部组件
Nginx(Proxy): Harbor的registry,UI,token等服务,
通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,
并将请求转发给后端不同的服务。
Registry v2: Docker官方镜像仓库, 负责储存Docker镜像,
并处理docker push/pull命令。由于我们要对用户进行访问控制,
即不同用户对Docker image有不同的读写权限,
Registry会指向一个token服务,强制用户的每次
docker pull/push请求都要携带一个合法的token,
Registry会通过公钥对token进行解密验证。
Database(MySQL):为core services提供数据库服务,
负责储存用户权限、审计日志、Docker image分组信息等数据。
Harbor自己的组件
Core services(Admin Server): 这是Harbor的核心功能,
主要提供以下服务:
UI:提供图形化界面,帮助用户管理registry上的镜像(image),
并对用户进行授权。
webhook:为了及时获取registry 上image状态变化的情况,
在Registry上配置webhook,把状态变化传递给UI模块。
Auth服务:负责根据用户权限给每个docker push/pull命令签发token.
Docker 客户端向Regiøstry服务发起的请求,如果不包含token,
会被重定向到这里,获得token后再重新向Registry进行请求。
API: 提供Harbor RESTful API
Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能。
Log collector:为了帮助监控Harbor运行,负责收集其他组件的log
,供日后进行分析。
安装过程
这篇文章是在搭建企业私有仓库,并设置加密认证的基础上写的。
docker与docker-compose的部署
- 下载docker
yum install docker-ce -y
systemctl start docker systemctl enable docker
2.加密,生成证书。
[root@server3 ~]# mkdir certs
[root@server3 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
3.导入仓库镜像。
[root@server3 ~]# docker load -i registry.tar
- 认证。
[root@server3 ~]# mkdir auth
[root@server3 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn admin westos > auth/htpasswd
[root@server3 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn zhang westos >> auth/htpasswd #追加
[root@server3 ~]# cat auth/htpasswd
- 加密并认证。
[root@server3 ~]# docker run -d \
> --restart=always \
> --name registry \
> -v "$(pwd)"/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key \
> -p 443:443 \
> -v "$(pwd)"/auth:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
> registry
把物理机的证书和认证的文件挂接到容器内 --name 不加会有随机名称
本地的路径 挂接到容器内 后面的证书 密码 都是容器内的 没有会自动生成
先加密 后认证 也可以加密认证一起做
6.主机作解析。
7. 拷贝证书到docker的配置目录下。
> [root@server3 ~]# cd /etc/docker/ [root@server3 docker]# ls key.json
> [root@server3 docker]# mkdir -p certs.d/westos.org [root@server3
> docker]# cd certs.d/westos.org/ [root@server3 westos.org]# cp
> ~/certs/westos.org.crt . [root@server3 westos.org]# ls westos.org.crt
> [root@server3 westos.org]# pwd /etc/docker/certs.d/westos.org
docker-compose
在这里选择在线安装
注意docker-compose的版本不要太旧,应该和harbor匹配
harbor的下载和安装
harbor选择离线安装,因为比较大
2.
3.
!4.启动harbor时发现如下报错
经排查发现是自己之前的私有仓库,registry已经存在。
5.删除原来的仓库,再次启动成功
6.点击接受风险并继续
测试
2.网络 的查看
3.
4.
5.尝试将本地镜像上传到harbor仓库
6.
7.ser2中测试拉取harbor仓库的镜像
8.为ser2主机添加证书
9.
10.可以在数据库中查看事件日志
11.新建私有仓库westos
12.新建用户yx,并且设置为开发人员,添加至westos仓库
13.14.测试登录yx用户上传镜像到westos
先从原来的admin用户停止登录
上传镜像
在ser2上拉取镜像时,发现报错,需要先进行登录
登录之后拉取成功
将westos数据库设置为公有的
激活仓库的扫描器等功能
2.
安装的时候加上一些参数,这里的截图丢失了,可以参考下图
发现仓库中的扫描器已经安装
开启仓库的自动扫描功能
测试没有签名的镜像,不进行部署
删除已经存在harbor在镜像仓库的镜像
在上传镜像的过程中设置密钥
发现镜像已经签名
如何去除镜像上的签名
2.
3.
4.