您的位置:首页 > 其它

三、Harbor的工作流程

2017-12-25 11:42 525 查看

Harbor的工作流程

Harbor 运行的逻辑图



如上图所示,Harbor包含6个组件:

Proxy(代理):Harbor的组件,如注册表,UI和令牌服务,均位于逆向代理之后。代理将来自浏览器和Docker客户端的请求转发到各种后端服务。

Registry(image仓库):负责存储Docker Images和处理Docker pull/push命令。由于Harbor需要强制对imagess进行访问控制,Registry会将客户端引导到令牌服务,以获取每个pull或push请求的有效令牌。

Core services(核心服务):Harbor核心职能,主要提供以下服务:

UI:用于帮助用户管理Registry Webhook上的Images的图形用户界面:Webhook是在注册表中配置的一种机制,以便Registry中的Images状态更改可以填充到Harbor的Webhook端点。Harbor使用webhook更新日志,启动复制和其他一些功能。令牌服务:根据用户对项目的作用,负责为每个停靠点pull/push命令发出令牌。如果从Docker客户端发送的请求中没有令牌,则Registry将将请求重定向到令牌服务。数据库:数据库存储项目,用户,角色,复制策略和图像的元数据。

Job services(工作服务):用于Images复制,本地映像可以复制(同步)到其他Harbor实例。

Log collector(日志收集器):负责在单个地方收集其他模块的日志。

harbor的运行所需要的容器

反向代理registry和UI界面运行Nginx容器,由Nginx服务器形成的反向代理。

vmware/nginx-photon:1.11.13

通过状态机将Images复制到远程Registry。Images删除也可以同步到一个远程的Harbor实例。

vmware/harbor-jobservice:v1.2.0-rc1

运行harborUI界面的容器,架构中的核心服务。这个容器是Project Harbor的主要部分。

vmware/harbor-ui:v1.2.0-rc1

harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。

vmware/harbor-adminserver:v1.2.0-rc1

运行仓库存放镜像的容器

vmware/registry:2.6.2-photon

运行mysql的容器,记录用户数据,从官方MySql映像创建的数据库容器,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中。

vmware/harbor-db:v1.2.0-rc1

运行用来收集各个容器日志的容器,运行rsyslogd的容器,用于通过日志驱动程序模式从其他容器收集日志。

vmware/harbor-log:v1.2.0-rc1


Harbor登录过程

假设Harbor部署在IP为192.168.1.10的主机上。用户运行docker命令将登录请求发送到Harbor:

$ docker login 192.168.1.10
用户输入所需凭证后,Docker客户端向地址“192.168.1.10/v2/”发送HTTP GET请求。Harbor的不同容器将按照以下步骤进行处理:



(a)首先,该请求由监听端口80的代理容器接收。容器中的Nginx将请求转发到后端的registry容器。

(b)Registry容器已配置为基于令牌的身份验证,因此它返回错误代码401,通知Docker客户端从指定的URL获取有效的令牌。在Harbor,这个URL指向核心服务的令牌服务;

(c)Docker客户端收到此错误代码后,会根据HTTP规范的基本认证向令牌服务URL发送请求,将请求头部嵌入用户名和密码;

(d)通过端口80将该请求发送到代理容器后,Nginx会根据预先配置的规则再次将该请求转发给UI容器。UI容器内的令牌服务接收请求,解码请求并获取用户名和密码;

(e)获取用户名和密码后,令牌服务将检查数据库,并通过MySql数据库中的数据验证用户。当令牌服务配置为LDAP / AD身份验证时,它将对外部LDAP / AD服务器进行身份验证。认证成功后,令牌服务返回一个表示成功的HTTP代码。HTTP响应体包含由私钥生成的令牌。

详细运行图



Docker push 的过程



(我们省略了代理转发步骤,上图显示了Docker推送过程中不同组件之间的通信)

用户成功登录后,Docker Image将通过Docker Push命令发送到Harbor:

# docker push 192.168.1.10/library/hello-world

(a)首先,码头客户端通过向注册表发送请求重复类似登录的过程,然后取回令牌服务的URL;

(b)随后,当接触令牌服务时,Docker客户端提供附加信息以在image(library/ hello-world)上应用推送操作的令牌;

(c)收到Nginx转发的请求后,令牌服务查询数据库查询用户的角色和权限,以推送image。如果用户具有适当的权限,则对Push操作的信息进行编码,并用私钥对其进行签名,并向Docker客户端生成一个令牌;

(d)在Docker客户端获取令牌之后,它向包含令牌的头部向Registry发送推送请求。一旦Registry接收到请求,它将使用公钥解码令牌并验证其内容。公钥对应于令牌服务的私钥。如果Registry找到令牌有效推送Image,则Image传输过程开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  harbor 工作流程