1. 程式人生 > >容器映象倉庫之選:企業級容器registry Harbor實踐(上)

容器映象倉庫之選:企業級容器registry Harbor實踐(上)

本文轉自微訊號EAWorld。掃描下方二維碼,關注成功後,回覆“普元方法+”,將會獲得熱門課堂免費學習機會!

目錄:
1.背景
2.開源Docker Registry的不足
3.新的選擇--Harbor
4.Harbor的使用

背景

公司於去年啟動了新一代數字化企業雲平臺的研發,基於DevOps打造新一代的企業雲端計算平臺,底層的容器雲平臺是重要的可選元件。容器雲目前啟動了第三版的重構,一些元件又有了重新選型的機會。

DevOps這個概念已經出來很多年了,相信大家已經不陌生了,說簡單點,它就是開發(Development)和運維(Operations)這兩個領域的合併。那麼為什麼要合併這兩個領域?原因很多,但首要原因是:目前這兩個領域的工作流程是脫節的,絕對的脫節。很多公司的開發部門和運維部門之間存在的深刻矛盾,其實就是這個“脫節”造成的。

開發部門在產品研發的時候,沒有充分考慮部署要求,開發完了只管丟給運維去上線。運維拿到東西上線困難,回來找開發,開發卻不一定認可,雙方扯來扯去,最後開發修改,運維又有問題再來回找開發,不斷迴圈。最後導致整個產品上線效率低下,執行不穩定。

公司的新一代數字化企業雲平臺,就是希望基於Devops理念,為企業打造集人員,需求,開發,自動構建,測試,運維一體的企業雲平臺。我們來看一下我們平臺整體的邏輯架構:

圖片描述

從上圖可以看出,平臺在邏輯上是分成多層的,硬體上有基礎設施平臺,基礎設施平臺上又有基礎服務平臺,最上層則是各種微應用。DevoOps則是縱跨多層,它由多個領域系統構成,如TM(租戶管理),PM(專案管理),SRM(軟體資源管理),SCM(軟體配置管理)等等,協調並管理整個平臺資源。其中,基礎設施平臺中有IaaS,也有CaaS。IaaS與CaaS都是可選元件,他們可以只有一個,也可以兩者都有。兩者都有的時候,CaaS可以存在於IaaS之中。這裡圖中的CaaS指的是我們的容器雲。

我們再來看一下我們的DevOps平臺的整體技術選型:
圖片描述

如圖,在選型時,我們將整個平臺主要分成了三塊。容器雲對應基礎設施層中的容器層。容器目前採用的是Docker, 平臺管理用了谷歌的kubernetes, 容器網路目前是用的flannel,dns用的skydns, 平臺系統使用的是coreos。容器映象倉庫,容器雲的前兩個小版本,我們使用的是開源的Docker Registry,配合nginx搭建容器映象私庫,使用還比較穩定,但也發現了它的一些不足。

開源Docker Registry的不足

同很多團隊進行容器雲構建的初始階段一樣,一開始我們並不太注重安全,容器倉庫一般都是配置成insecure-registry直接使用。這次,我們決定加強安全方面的控制。我們發現了它的一些不足如下:

  • 使用者與鑑權
    Docker Registry V2可以基於htpasswd檔案進行簡單的使用者管理,但是維護不便,也沒有對外的API可供整合。

  • 缺少日誌與審記
    Docker Registry沒有日誌收集能力,也缺少審記。

  • 複製與同步
    在不同的Registry例項之間複製映象是十分普遍的需求,但Docker Registry只支援將公有Registry的映象同步至私有倉庫 。

  • 映象刪除不便
    Docker客戶端沒有提供刪除倉庫映象的命令,刪除倉庫中的映象,只能通過其它工具呼叫rest api 。

  • 缺少圖形化的管理介面
    要想補上這些缺點,需要在自已的容器雲中做一些加強,需要工作量。除了Docker Registry,還有沒有其它的選擇,已經補齊了這些能力,或部分補齊了呢?於是,我們做了一點小了解。

目前業界可選的Containger Registry主要有如下:

  • Docker Hub 提供了直觀的介面、自動化構建、私有倉庫以及眾多官方映象。這是官方的公有庫,下載映象必須聯接外網。

  • Docker Registry 最流行的開源registry。你可以在自己的設施上執行或者使用Docker Hub。

  • Quay.io 最初由一個兩人工作室開發的產品,專注於Docker私有庫。目前已被Coreos收購。

  • CoreOS Enterprise Registry Coreos收購Quay.io之後推出的企業級Containger Registry,提供細化許可權和審計跟蹤。

  • Nexus 3.0 nexus原來只是一個maven的倉庫伺服器,升級到3.0之後,也可以使用它對docker的映象進行管理。

  • Harbor vmware開源的企業級容器registry,基於開源的Docker Registry進行增強。

Docker Hub相信大家都不陌生,用來做私庫的源庫是可以的,可以將一些基礎映象從這個雲庫拉到私庫中。它並不適合在容器雲中直接使用,下載映象時需要連外網,速度也是個大問題。

Docker Registry就不說了,接下來的Quay.io,CoreOS Enterprise Registry是付費的,或者是商業付費的,不考慮。Nexus 3有圖形化的管理頁面可以操作映象,但其它的能力與Docker Registry差不多。最後看到的harbor,則令我們眼前一亮。

新的選擇–Harbor

Harbor是VMware公司於2016年開源的企業級Docker Registry專案。它是一個用於儲存和分發Docker映象的企業級Registry伺服器,通過新增一些企業必需的功能特性,例如安全、標識和管理等,擴充套件了開源Docker Distribution。

作為一個企業級私有Registry伺服器,Harbor提供了更好的效能和安全。提升使用者使用Registry構建和執行環境傳輸映象的效率。Harbor支援安裝在多個Registry節點的映象資源複製,映象全部儲存在私有Registry中, 確保資料和智慧財產權在公司內部網路中管控。另外,Harbor也提供了高階的安全特性,諸如使用者管理,訪問控制和活動審計等。

Harbor的特點如下:

  • 基於角色的訪問控制
    使用者與Docker映象倉庫通過“專案”進行組織管理,一個使用者可以對多個映象倉庫在同一名稱空間(project)裡有不同的許可權。

  • 映象複製
    映象可以在多個Registry例項中複製(同步)。尤其適合於負載均衡,高可用,混合雲和多雲的場景。

  • 圖形化使用者介面
    使用者可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間。

  • AD/LDAP 支援
    Harbor可以整合企業內部已有的AD/LDAP,用於鑑權認證管理。

  • 審計管理
    所有針對映象倉庫的操作都可以被記錄追溯,用於審計管理。

  • 國際化
    已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會新增進來。

  • RESTful API
    RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟體整合變得更容易。

  • 部署簡單
    提供線上和離線兩種安裝工具,也可以安裝到vSphere平臺(OVA方式)虛擬裝置。

我們再看看Harbor的整體架構:

圖片描述

Harbor在架構上主要由五個元件構成:

  • Proxy:
    Harbor的registry, UI, token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務。

  • Registry:
    負責儲存Docker映象,並處理dockerpush/pull 命令。由於我們要對使用者進行訪問控制,即不同使用者對Docker image有不同的讀寫許可權,Registry會指向一個token服務,強制使用者的每次docker pull/push請求都要攜帶一個合法的token,Registry會通過公鑰對token 進行解密驗證。

  • Core services:
    這是Harbor的核心功能,主要提供以下服務:UI:提供圖形化介面,幫助使用者管理registry上的映象(image), 並對使用者進行授權。 webhook:為了及時獲取registry上image狀態變化的情況, 在Registry上配置webhook,把狀態變化傳遞給UI模組。token服務:負責根據使用者許可權給每個docker push/pull命令簽發token.Docker客戶端向Regiøstry服務發起的請求,如果不包含token,會被重定向到這裡,獲得token後再重新向Registry進行請求。

  • Database:
    為coreservices提供資料庫服務,負責儲存使用者許可權、審計日誌、Docker image分組資訊等資料。

  • Log collector:
    為了幫助監控Harbor執行,負責收集其他元件的log,供日後進行分析。

我們再來看一個harbor的核心概念

圖片描述

以上是Harbor的核心概念。一個專案可以看成一個使用者的小私庫,專案成員按照其角色,可以上傳,下載,刪除映象,或新增刪除成員等。系統管理員可以建立映象庫複製目標,為專案設定複製策略,可以從其它的映象庫複製映象過來。複製策略會產生複製任務。專案下面可擁有多個映象,而每個映象則可以有多個映象標籤。專案包含日誌。

Harbor的使用

harbor提供了web ui。我們來看一下harbor是如何使用的:

圖片描述

首先是通過管理員建立新的使用者,然後登陸至新使用者,使用新使用者建立專案。這樣新使用者就會自動成為這個使用者的專案管理員。

圖片描述

接下來可以使用新建立的使用者,在docker命令列中登陸至映象倉庫,並上傳映象。注意,登陸的時候,指定為整個映象倉庫的地址,而不是倉庫地址加專案名稱。映象要上傳至指定專案下,需要為映象打上 “映象倉庫地址/專案名/映象名:映象tag” 這樣格式的tag,再去執行映象上傳才可以。

圖片描述

映象上傳完成了,可以在web ui中專案下看到它的資訊。可以在web頁面中很方便地刪除整個映象,或者刪除映象的單個Tag。使用docker client登陸之後,也可以下載到上傳上去的映象。

圖片描述

專案建立之後,專案管理員可以再為專案新增新的成員。成員有角色之分,專案管理員,開發人員與訪客。專案管理員有最大的許可權,開發人員可以上傳下載刪除映象,訪客只能下載映象。

圖片描述

系統管理員可以建立複製目標,以便為專案建立複製策略。建立複製目標時,需要指定目標的url及使用者名稱與密碼。目標可以是harbor,也可以就是docker registry。

圖片描述

複製目標建立好了,就可以在專案下建立複製策略。複製策略一建立好,馬上就會啟動複製任務,將專案下的映象push至目標倉庫。同步時,只同步映象,harbor的專案等不在同步範圍之內。

這一篇主要講了我們選型harbor的過程。並沒有做太多的對比研究,主要還是沿著原來的老路子,只是有了更完善的方案。然後介紹了一下harbor的特點,架構及核心概念,最後以harbor本身的web-ui為例,介紹了harbor的使用,主的是讓大家對harbor有一個比較全面的瞭解。

下一篇中,我們將著重介紹harbor的使用者,同步與複製等設計,以及harbor的部署,如何整合,有興趣的同學歡迎持續關注。

關於作者:
秦雙春

現任普元雲端計算架構師。曾在PDM,雲端計算,資料備份,移動互聯相關領域公司工作,10年IT工作經驗。曾任上海科企軟體桌面虛擬化產品的核心工程師,主導過愛數TxCloud雲櫃的設計與開發,主導過萬達資訊的食安管理與追溯平臺的移動平臺開發。國內雲端計算的早期實踐者,開源技術愛好者,容器技術專家。

圖片描述

關於EAWorld
微服務,DevOps,元資料,企業架構原創技術分享,EAii(Enterprise Architecture Innovation Institute)企業架構創新研究院旗下官方微信公眾號。

掃描下方二維碼,關注成功後,回覆“普元方法+”,將會獲得熱門課堂免費學習機會!
微訊號:EAWorld,長按二維碼關注。
圖片描述