久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解企業(yè)級容器Registry開源項目Harbor架構

217次閱讀
沒有評論

共計 3091 個字符,預計需要花費 8 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關如何理解企業(yè)級容器 Registry 開源項目 Harbor 架構,文章內(nèi)容質(zhì)量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1. Harbor 項目

VMware 公司最近開源了企業(yè)級 Registry 項目 Harbor,由 VMware 中國研發(fā)的團隊負責開發(fā)。Harbor 項目是幫助用戶迅速搭建一個企業(yè)級的 registry 服務。它以 Docker 公司開源的 registry 為基礎,提供了管理 UI, 基于角色的訪問控制(Role Based Access Control),鏡像遠程復制(同步),AD/LDAP 集成、以及審計日志(Audit logging) 等企業(yè)用戶需求的功能,同時還原生支持中文,對廣大中國用戶是一個好消息。本文將介紹 Harbor 項目的主要組件,并闡述 Harbor 的工作原理。

(源代碼地址:https://github.com/vmware/harbor )

2. 架構介紹

1)  主要組件

Harbor 在架構上主要由 6 個組件構成:

·  Proxy:Harbor 的 registry, UI, token 等服務,通過一個前置的反向代理統(tǒng)一接收瀏覽器、Docker 客戶端的請求,并將請求轉(zhuǎn)發(fā)給后端不同的服務。

·  Registry:負責儲存 Docker 鏡像,并處理 docker push/pull 命令。由于我們要對用戶進行訪問控制,即不同用戶對 Docker image 有不同的讀寫權限,Registry 會指向一個 token 服務,強制用戶的每次 docker pull/push 請求都要攜帶一個合法的 token, Registry 會通過公鑰對 token 進行解密驗證。

·  Core services:這是 Harbor 的核心功能,主要提供以下服務:

o  UI:提供圖形化界面,幫助用戶管理 registry 上的鏡像(image), 并對用戶進行授權。

o  webhook:為了及時獲取 registry 上 image 狀態(tài)變化的情況,在 Registry 上配置 webhook,把狀態(tài)變化傳遞給 UI 模塊。

o  token 服務:負責根據(jù)用戶權限給每個 docker push/pull 命令簽發(fā) token. Docker 客戶端向 Regi?stry 服務發(fā)起的請求, 如果不包含 token,會被重定向到這里,獲得 token 后再重新向 Registry 進行請求。

·  Database:為 core services 提供數(shù)據(jù)庫服務,負責儲存用戶權限、審計日志、Docker image 分組信息等數(shù)據(jù)。

   Job Services:提供鏡像遠程復制功能,可以把本地鏡像同步到其他 Harbor 實例中。

·  Log collector:為了幫助監(jiān)控 Harbor 運行,負責收集其他組件的 log,供日后進行分析。

各個組件之間的關系如下圖所示:

如何理解企業(yè)級容器 Registry 開源項目 Harbor 架構

2)  實現(xiàn)

Harbor 的每個組件都是以 Docker 容器的形式構建的,因此很自然地,我們使用 Docker Compose 來對它進行部署。

在源代碼中(https://github.com/vmware/harbor), 用于部署 Harbor 的 Docker Compose 模板位于 /Deployer/docker-compose.yml. 打開這個模板文件,會發(fā)現(xiàn) Harbor 由 5 個容器組成:

·  proxy: 由 Nginx 服務器構成的反向代理。

·  registry: 由 Docker 官方的開源 registry 鏡像構成的容器實例。

·  ui: 即架構中的 core services, 構成此容器的代碼是 Harbor 項目的主體。

·  mysql: 由官方 MySql 鏡像構成的數(shù)據(jù)庫容器。

       job services: 通過狀態(tài)機機制實現(xiàn)遠程鏡像復制功能,包括鏡像刪除也可以同步到遠端 Harbor 實例。

·  log: 運行著 rsyslogd 的容器,通過 log-driver 的形式收集其他容器的日志。

這幾個容器通過 Docker link 的形式連接在一起,這樣,在容器之間可以通過容器名字互相訪問。對終端用戶而言,只需要暴露 proxy(即 Nginx)的服務端口。

3. 工作原理

下面以 兩個 Docker 命令為例,講解主要組件之間如何協(xié)同工作。

 docker login

假設我們將 Harbor 部署在 IP 為 192.168.1.10 的虛機上。用戶通過 docker login 命令向這個 Harbor 服務發(fā)起登錄請求:

# docker login 192.168.1.10

當用戶輸入所需信息并點擊回車后,Docker 客戶端會向地址“192.168.1.10/v2/”發(fā)出 HTTP GET 請求。Harbor 的各個容器會通過以下步驟處理:

(a) 首先,這個請求會由監(jiān)聽 80 端口的 proxy 容器接收到。根據(jù)預先設置的匹配規(guī)則,容器中的 Nginx 會將請求轉(zhuǎn)發(fā)給后端的 registry 容器;

(b) 在 registry 容器一方,由于配置了基于 token 的認證,registry 會返回錯誤代碼 401,提示 Docker 客戶端訪問 token 服務綁定的 URL。在 Harbor 中,這個 URL 指向 Core Services;

(c) Docker  客戶端在接到這個錯誤代碼后,會向 token 服務的 URL 發(fā)出請求,并根據(jù) HTTP 協(xié)議的 Basic Authentication 規(guī)范,將用戶名密碼組合并編碼,放在請求頭部(header);

(d)類似地,這個請求通過 80 端口發(fā)到 proxy 容器后,Nginx 會根據(jù)規(guī)則把請求轉(zhuǎn)發(fā)給 ui 容器,ui 容器監(jiān)聽 token 服務網(wǎng)址的處理程序接收到請求后,會將請求頭解碼,得到用戶名、密碼;

(e) 在得到用戶名、密碼后,ui 容器中的代碼會查詢數(shù)據(jù)庫,將用戶名、密碼與 mysql 容器中的數(shù)據(jù)進行比對(注:ui 容器還支持 LDAP 的認證方式,在那種情況下 ui 會試圖和外部 LDAP 服務進行通信并校驗用戶名 / 密碼)。比對成功,ui 容器會返回表示成功的狀態(tài)碼,并用密鑰生成 token,放在響應體中返回給 Docker 客戶端。

這個過程中組件間的交互過程如下圖所示:

如何理解企業(yè)級容器 Registry 開源項目 Harbor 架構

至此,一次 docker login 成功地完成了,Docker 客戶端會把步驟 (c) 中編碼后的用戶名密碼保存在本地的隱藏文件中。

2.   docker push

用戶登錄成功后用 docker push 命令向 Harbor 推送一個 Docker image:

# docker push 192.168.1.10/library/hello-world

(a) 首先,docker 客戶端會重復 login 的過程,首先發(fā)送請求到 registry, 之后得到 token 服務的地址;

(b) 之后,Docker 客戶端在訪問 ui 容器上的 token 服務時會提供額外信息,指明它要申請一個對 image library/hello-world 進行 push 操作的 token;

(c) token 服務在經(jīng)過 Nginx 轉(zhuǎn)發(fā)得到這個請求后,會訪問數(shù)據(jù)庫核實當前用戶是否有權限對該 image 進行 push。如果有權限,它會把 image 的信息以及 push 動作進行編碼,并用私鑰簽名,生成 token 返回給 Docker 客戶端;

(d) 得到 token 之后 Docker 客戶端會把 token 放在請求頭部,向 registry 發(fā)出請求,試圖開始推送 image。Registry 收到請求后會用公鑰解碼 token 并進行核對,一切成功后,image 的傳輸就開始了。

  我們省去 proxy 轉(zhuǎn)發(fā)的步驟,下圖描述了這個過程中各組件的通信過程:

如何理解企業(yè)級容器 Registry 開源項目 Harbor 架構

關于如何理解企業(yè)級容器 Registry 開源項目 Harbor 架構就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計3091字。
轉(zhuǎn)載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 涪陵区| 襄城县| 安义县| 德保县| 临汾市| 天门市| 府谷县| 大宁县| 九龙城区| 伊宁县| 巴马| 子长县| 七台河市| 莎车县| 米易县| 登封市| 边坝县| 阿城市| 博白县| 哈密市| 南京市| 淮滨县| 红河县| 陵水| 河西区| 辉南县| 齐齐哈尔市| 宜君县| 新平| 英德市| 永川市| 潍坊市| 兰溪市| 睢宁县| 道真| 武夷山市| 扎赉特旗| 罗城| 东阿县| 广平县| 内乡县|