docker 私有仓库 -- Harbor

Harbor简介

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,以增强安全性。
4)镜像安全扫描
上传到Harbor上的镜像文件能够通过clair的安全扫描,以发现镜像中存在的安全漏洞,并提高镜像文件的安全性。
5)提供Web界面以优化用户体验
Registry只提供命令行方式,没有操作界面,而Harbor提供用户界面,可以支持登录、搜索功能,镜像分类管理包括区分公有、私有镜像等功能,优化了用户管理及操作体验。

Harbor架构介绍

在这里插入图片描述
Harbor由5个组件构成
(1)Proxy
Proxy是镜像仓库核心服务(Registry、UI、token等)的前端访问代理,通过这个代理可统一接收客户端发送来的请求,并将此请求转发给后端不同的服务进行处理。
(2)Registry
Registry是容器镜像仓库,负责Docker镜像存储,响应镜像文件上传及下载操作,但是在访问过程中会进行访问权限控制,用户每次执行docker pull/push请求都要携带一个合法的token。为了增强安全性,Registry会通过公钥对token进行解密验证,解密通过后才能进行相应的操作。
(3)Core Services
Core Services是Harbor的核心服务,主要包括如下功能:
■ UI: 图形化界面,根据用户的授权采用可视化方式管理镜像仓库中的各个镜像(image)文件。
■ token服务: 根据用户权限给每个镜像操作请求生成token。Docker客户端向Registry服务发起的请求如果不包含token会被重定向到这个token服务,获得token后再重新向Registry进行请求,这个token是后续操作的唯一合法身份,直到token超时或用户退出当前会话。
■ webhook: 主要用来实时监控Registry中镜像文件的状态变化。在Registry上配置webhook,通过webhook把image状态变化传递给UI模块。
(4)Database
为核心服务提供数据库存储及访问能力,负责存储用户权限、审计日志、Docker image分组信息等数据。
(5)Log Collector
负责收集其他组件运行过程中产生的日志,监控Harbor运行状况,以便后续进行运行状况分析。

Harbor的镜像同步机制
由于Harbor支持多个镜像仓库,用户访问任何一个镜像仓库结果都相同,因此需要在多个仓库间进行文件同步功能。Harbor通过调用自身的API对镜像文件进行下载和上传,实现镜像文件的同步。在镜像同步的过程中,Harbor会监控整个复制过程,如果遇到网络等错误会自动重试,提供复制策略机制以保证复制任务成功执行。Docker Registry与Harbor采用的机制不同,Harbor采用push机制,Docker Registry采用pull机制。

Harbor用户认证
Harbor中的用户分为两类:管理员及普通用户。管理员权限比较大,可以对用户进行管理,普通用户只能在自己权限范围内进行查询及日常运维操作
在这里插入图片描述

Harbor用户认证流程
■ 客户端发送镜像文件push/pull请求,Docker Daemon进程收到此请求。
■ Docker Daemon向Docker Registry发送上传/下载镜像的请求。
■ 如果Docker Registry需要进行授权,Docker Registry将会返回错误码401(即没有授权),同时在响应中包含docker客户端需要进行认证的相关信息。
■ Docker Registry分析此返回信息,并将相应数据返回给Docker客户端。
■ Docker客户端根据Registry返回的信息,附加相关内容后,向Docker Daemon再次发送请求。
■ Docker Daemon向Authencation(认证服务器)发送获取认证token的请求。
■ Authencation服务器验证提交的用户信息是否存符合业务要求。
■ Authencation服务器根据用户信息生成的token令牌和当前用户所具有的相关权限信息,返回给Docker Daemon。
■ Docker Daemon将结果返回给Docker客户端。
■ 后续Docker客户端进行push/pull操作时请求头中都带上token,发送到认证服务器进行身份认证。

Harbor 部署

Harbor运行时由多个Docker容器组成,包括Nginx、MySQL、UI、Proxy、log、JobService、adminserver

开两台部署好docker引擎的虚拟机,一台为harbor服务端,另一台作为客户端

1:服务端搭建harbor

服务端需安装 Python、 Docker 和Docker Compose.
(1)下载所需环境包

下载harbor安装程序
# wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

下载compose
# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# chmod +x docker-compose
# mv docker-compose /usr/bin       便于系统识别compose命令
查看 Docker-Compose 版本判断安装是否成功
# docker-compose -v

(2)修改配置文件

# cd /usr/local/harbor
# vim harbor.cfg
/hostname 查找
改为
hostname = 192.168.188.132

在这里插入图片描述
(3)启动安装harbor

# cd /usr/local/harbor
# sh install.sh

# docker-compose ps  

在这里插入图片描述
在这里插入图片描述
(4) 登录访问harbor网址 http://192.168.188.132,可看到管理页面,
默认的管理员用户名和密码是 admin / Harbor12345。
登录进去,创建项目并且填写项目名称myproject

在这里插入图片描述
在这里插入图片描述
(5)可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下, Register 服务器在端口 80 上侦听

# docker login -u admin -p Harbor12345 http://127.0.0.1/
登录成功

在这里插入图片描述

# docker pull nginx	从公有仓库下载镜像 进行测试

镜像打标签
# docker tag nginx:latest 127.0.0.1/myproject/nginx:v1

上传到harbor私有仓库
# docker push 127.0.0.1/myproject/nginx

在这里插入图片描述
在图形界面的项目栏可看到上传的新镜像
在这里插入图片描述

2:客户端测试

(1)远程登录harbor服务器

# docker login -u admin -p Harbor12345 http://192.168.188.132

在这里插入图片描述
出现error的原因 : Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜
像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
解决:

指定私有仓库的地址
# vim /usr/lib/systemd/system/docker.service
/ExecStart 查找
在 fd://   --containerd中间添加一句: --insecure-registry 192.168.188.132
# systemctl daemon-reload	  重载
# systemctl restart docker    重启

在这里插入图片描述
重新登录
在这里插入图片描述
(2)客户端 从私有仓库harbor 中下载镜像

# docker pull 192.168.188.132/myproject/nginx:v1
# docker images

在这里插入图片描述
在图形界面的项目栏可看到镜像被下载了一次
在这里插入图片描述
(3)客户端 测试 是否可以上传镜像

从公有仓库下载镜像
# docker pull cirros
# docker images

镜像打标签
# docker tag cirros:latest 192.168.188.132/myproject/cirros:v1
上传新镜像到私有仓库
# docker push 192.168.188.132/myproject/cirros:v1

在这里插入图片描述
在图形界面的项目栏可看到镜像cirros
在这里插入图片描述

Harbor配置文件参数说明

#vim /usr/local/harbor/harbor.cfg
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
(1)所需参数
这些参数需要在配置文件 Harbor.cfg 中设置。
如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下:

hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN)
例如 192.168.195.128 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。

ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。

max_job_workers:镜像复制作业线程。

db_password:用于db_auth 的MySQL数据库root 用户的密码。

customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。
当由外部来源提供密钥和根证书时,将此属性设置为 off。

ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。

ssl_cert_key:SSL 密钥的路径,仅当协议设置为 https 时才应用。

secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

(2)可选参数

这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数 的更新,Harbor.cfg 将被忽略。

注意:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除了默认的 admin 用户),auth_mode 不能被修改。具体参数如下:

Email:Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。
请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用SSL email_ssl = TRUE。

harbour_admin_password:管理员的初始密码,只在Harbour第一次启动时生效。之后,此设置将被忽略,并且应 UI中设置管理员的密码。
请注意,默认的用户名/密码是 admin/Harbor12345。

auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。

self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbour中创建新用户。
注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

Token_expiration: 由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

project_creation_restriction: 用于控制哪些用户有权创建项目的标志。默认情况下, 每个人都可以创建一个项目。
如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。

verify_remote_cert: 打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。
将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

另外,默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,
如 S3、Openstack Swif、Ceph 等。但需要更新 common/templates/registry/config.yml 文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值