Docker-Registry 企业级私有仓库Harbor v2 部署实战 (一)
一、简介Harbor 是由VMware公司开源的容器镜像仓库,它在Docker Registry的基础上进行了企业级扩展,包括基于角色的权限控制、AD/LDAP集成、可视化管理界面、日志审计等,它同Docker Registry一样提供容器镜像的存储及分发服务,但与Docker Registry有很多不同,Harbor进行了不少优化及改进,主要差别如下:1)传输效率优化:Harbor根据容器镜像每
Docker-Registry 企业级私有仓库Harbor v2 部署实战 (一)
一、简介
Harbor 是由VMware公司开源的容器镜像仓库,它在Docker Registry的基础上进行了企业级扩展,包括基于角色的权限控制、AD/LDAP集成、可视化管理界面、日志审计等,它同Docker Registry一样提供容器镜像的存储及分发服务,但与Docker Registry有很多不同,Harbor进行了不少优化及改进,主要差别如下:
1)传输效率优化:Harbor根据容器镜像每层的UUID标识进行增量同步,而不是全量同步,减少带宽及其他资源占用。
2)镜像仓库水平扩展:由于上传、下载镜像文件涉及大量的耗时I/O操作,当用户对性能有较高要求时,需要创建多个Registry,通过负载均衡器将访问压力分发到不同的Registry,同时多个Registry存储时进行镜像文件的同步,便于水平扩展。
3)用户认证:Harbor在Docker Registry的基础上扩展了用户认证授权的功能,用户在Harbor中进行访问需要携带token,以增强安全性。镜像漏洞扫描的功能,可以发现容器镜像中存在的安全漏洞并告警,通知用户及时采取防范措施。容器镜像安全扫描原理就是扫描镜像中的文件系统,逐个文件地检查是否存在安全漏洞,在Harbor中集成了开源项目clair的扫描功能,可从公开的CVE字典库下载漏洞资料。
4)镜像漏洞安全扫描:上传到Harbor上的镜像文件能够通过clair的安全扫描,以发现镜像中存在的安全漏洞,并提高镜像文件的安全性。【需要连接扫描器】
5)提供可视化的Web界面以优化用户体验:Registry只提供命令行方式,没有操作界面,而Harbor提供用户界面,可以支持登录、搜索功能,镜像分类管理包括区分公有、私有镜像等功能,优化了用户管理及操作体验。
6)快速部署: 通过 docker-compose 或 Helm Chart 部署
7)RESTful API:提供 RESTful API 方便与其他外部系统集成。
1. Harbor 架构
1.1 proxy (反向代理)
Proxy 是Habor 的核心服务(Registry、UI等)的反向代理,通过其可以将客户端发送的请求转发给后端服务来完成响应。
1.2 Registry (镜像仓库)
Registry 是容器镜像仓库,负责Docker Image 的存储,完成Image 的pull/push 操作,在访问过程中会进行访问权限控制,用户每次执行 docker pull/push
请求都需要携带一个合法的token,为了提高安全性,Registry 会通过公钥对 token 进行解密验证,解密验证无误后才能进行相应操作。
1.3 Core Services(核心服务)
Core services 是Harbor的核心服务,主要包含如下功能:
- UI:Web 图形化展示界面,根据用户的授权采用可视化方式管理镜像仓库中的各个Image。
- token 服务: 根据用户权限给每个镜像操作请求生成token。Docker 客户端向Registry 服务发起的请求如不包含token 会被重定向到这个token 服务。获取token 后再重新向Registry 发送请求,这个 token 是Image 操作的唯一合法身份标识,直到token 过期或者用户退出当前session。
- webhook : 主要用于实时监控Registry 中镜像文件的状态变化。Registry 上的webhook把image 状态变化传递给UI模块。
1.4 Database (DB)
为核心服务提供数据库存储及访问,负责存储用户权限、审计日志、Docker Image 分组等信息。
1.5 Log Collector (日志采集)
负责收集组件运行过程中产生的日志,并监视Harbor 运行状况,以便后期进行运行状况分析。
二、Harbor 部署
部署环境:
1. CentOS Linux release 7.6.1810 (Core)
2. Docker version 19.03.8, build afacb8b
3. docker-compose version 1.26.1, build f216ddbf
4. harbor.v2.0.1
1. 安装要求
详见:Harbor Installation Prerequisites
2. 下载离线压缩包
goharbor/harbor
这里我采用最新的v2: harbor-offline-installer-v2.0.1.tgz
由于墙太高了,网络飞不起来,所以提供备用地址:备用地址
3. 创建自签HTTPS 证书
3.1 创建证书目录
mkdir -p /data/cert && cd /data/cert
3.2 生成CA证书私钥
openssl genrsa -out ca.key 4096
3.3 生成自己的CA证书
根据自己的机构调整-subj选项中的值。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=BJ/L=BJ/O=docker/OU=Personal/CN=docker.com" \
-key ca.key \
-out ca.crt
官方证书配置: Configure HTTPS Access to Harbor
==注:==在生产环境中,应该从第三方证书机构购买CA证书。测试或开发环境中,可以通过上述方式生成自己的CA证书。
4. 部署安装Harbor
1. 解压离线安装包
tar -xvf harbor-offline-installer-v2.0.1.tgz -C /opt
2. 编辑Harbor 配置文件harbor.yml,如下
注: 其数据默认存在与 /data
目录下,可以通过修改harbor.yml
配置文件更改默认工作目录。
3. 运行 install.sh
(–with-clair 增加镜像文件漏洞安全扫描)
脚本运行基本流程:检查环境 -> 导入镜像 -> 准备环境 -> 准备配置(含移除旧版本)-> 开始启动
[root@docker harbor]# ./install.sh --with-clair
# 检查 Docker
[Step 0]: checking if docker is installed ...
Note: docker version: 19.03.8
# 检查docker-compose
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.26.1
# 加载Harbor 镜像(Image)
[Step 2]: loading Harbor images ...
Loaded image: goharbor/trivy-adapter-photon:v2.0.1
Loaded image: goharbor/harbor-portal:v2.0.1
Loaded image: goharbor/harbor-core:v2.0.1
Loaded image: goharbor/harbor-jobservice:v2.0.1
Loaded image: goharbor/notary-server-photon:v2.0.1
Loaded image: goharbor/harbor-log:v2.0.1
Loaded image: goharbor/registry-photon:v2.0.1
Loaded image: goharbor/notary-signer-photon:v2.0.1
Loaded image: goharbor/clair-photon:v2.0.1
Loaded image: goharbor/chartmuseum-photon:v2.0.1
Loaded image: goharbor/prepare:v2.0.1
Loaded image: goharbor/harbor-db:v2.0.1
Loaded image: goharbor/harbor-registryctl:v2.0.1
Loaded image: goharbor/nginx-photon:v2.0.1
Loaded image: goharbor/redis-photon:v2.0.1
Loaded image: goharbor/clair-adapter-photon:v2.0.1
# 准备环境
[Step 3]: preparing environment ...
[Step 4]: preparing harbor configs ...
prepare base dir is set to /root/Harbor/harbor
Clearing the configuration file: /config/log/logrotate.conf
Clearing the configuration file: /config/log/rsyslog_docker.conf
Clearing the configuration file: /config/nginx/nginx.conf
Clearing the configuration file: /config/core/env
Clearing the configuration file: /config/core/app.conf
Clearing the configuration file: /config/registry/passwd
Clearing the configuration file: /config/registry/config.yml
Clearing the configuration file: /config/registry/root.crt
Clearing the configuration file: /config/registryctl/env
Clearing the configuration file: /config/registryctl/config.yml
Clearing the configuration file: /config/db/env
Clearing the configuration file: /config/jobservice/env
Clearing the configuration file: /config/jobservice/config.yml
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
loaded secret from file: /data/secret/keys/secretkey
Generated configuration file: /config/clair/postgres_env
Generated configuration file: /config/clair/config.yaml
Generated configuration file: /config/clair/clair_env
Generated configuration file: /config/clair-adapter/env
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir
# 启动 Harbor
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating network "harbor_harbor-clair" with the default driver
Creating harbor-log ... done
Creating registry ... done
Creating harbor-db ... done
Creating registryctl ... done
Creating harbor-portal ... done
Creating redis ... done
Creating clair ... done
Creating harbor-core ... done
Creating clair-adapter ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
镜像漏洞扫描
4. 部署Harbor 完成,通过HTTPS 方式访问IP即可:
Web UI 控制界面
所有Docker Container
[root@docker harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e55162294f8 goharbor/nginx-photon:v2.0.1 "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes (healthy) 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp nginx
3b44f254e86d goharbor/harbor-jobservice:v2.0.1 "/harbor/entrypoint.…" 12 minutes ago Up 12 minutes (healthy) harbor-jobservice
5ca86d2ef51a goharbor/clair-adapter-photon:v2.0.1 "/home/clair-adapter…" 12 minutes ago Up 12 minutes (healthy) 8080/tcp clair-adapter
a199e2a93e11 goharbor/harbor-core:v2.0.1 "/harbor/entrypoint.…" 12 minutes ago Up 12 minutes (healthy) harbor-core
1c8ba4d3ee0c goharbor/clair-photon:v2.0.1 "./docker-entrypoint…" 12 minutes ago Up 12 minutes (healthy) 6060-6061/tcp clair
2e765760d47f goharbor/harbor-portal:v2.0.1 "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes (healthy) 8080/tcp harbor-portal
ac4e8ad392c8 goharbor/redis-photon:v2.0.1 "redis-server /etc/r…" 12 minutes ago Up 12 minutes (healthy) 6379/tcp redis
8d724d97ead9 goharbor/harbor-registryctl:v2.0.1 "/home/harbor/start.…" 12 minutes ago Up 12 minutes (healthy) registryctl
32b6cbc7b0d8 goharbor/registry-photon:v2.0.1 "/home/harbor/entryp…" 12 minutes ago Up 12 minutes (healthy) 5000/tcp registry
5f6ce7928947 goharbor/harbor-db:v2.0.1 "/docker-entrypoint.…" 12 minutes ago Up 12 minutes (healthy) 5432/tcp harbor-db
60f3e3efbcd4 goharbor/harbor-log:v2.0.1 "/bin/sh -c /usr/loc…" 12 minutes ago Up 12 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
配置Docker镜像仓库,配置hosts 文件
[root@docker harbor]# vim /etc/hosts
192.168.254.128 docker.com
# 编辑Docker 配置文件
[root@docker harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["docker.com"] # 配置域名
}
测试
# 给镜像重新打标签
docker tag alpine:3.11 docker.com/library/alplne:3.11
# 登录进行上传
docker login docker.com
docker push docker.com/library/alpine:3.11
5. Harbor 启动与停止:
docker-compose up -d # 启动Harbor Server
docker-compose down -v # 停止Harbor Server
参考:
- 最新版Harbor搭建(harbor-offline-installer-v1.10.1.tgz)
- Harbor Installation and Configuration
- Overview of Docker Compose
- 《基于Kubernetes的容器云平台实战 》 陆平等
- 《容器云运维实战:Docker与Kubernetes集群 》黄靖钧 冯立灿
- 《再也不踩坑的kubernetes实战指南》 杜宽
更多推荐
所有评论(0)