<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go 開源說第七期:Harbor助你玩轉云原生

          共 6761字,需瀏覽 14分鐘

           ·

          2021-04-03 20:11

          本文由“GO開源說”第七期 《Harbor助你玩轉云原生》直播內容修改整理而成,視頻內容較長,本文內容有所刪減和重構。


          云原生技術的興起為企業(yè)數字化轉型帶來新的可能。作為云原生的要素之一,帶來更為輕量級虛擬化的容器技術具有舉足輕重的推動作用。其實很早之前,容器技術已經有所應用,而Docker的出現和興起徹底帶火了容器。其關鍵因素是Docker提供了使用容器的完整工具鏈,使得容器的上手和使用變得非常簡單。工具鏈中的一個關鍵,就是定義了新的軟件打包格式-容器鏡像。鏡像包含了軟件運行所需要的包含基礎OS在內的所有依賴,推送至運行時可直接啟動。從鏡像構建環(huán)境到運行環(huán)境,鏡像的快速分發(fā)成為硬需求。同時,大量構建以及依賴的鏡像的出現,也給鏡像的維護管理帶來挑戰(zhàn)。鏡像倉庫的出現成為必然。


          圖1 鏡像倉庫


          鏡像構建之后可以推送至倉庫儲存和管理,運行時環(huán)境在有應用運行需求時,從倉庫拉取特定的應用鏡像來運行。鏡像倉庫作為鏡像的分發(fā)媒介,可以實現特定的管理和訪問控制機制。倉庫作為鏡像傳輸流動的主要媒介,成為云原生應用平臺運轉的核心要件。Docker開源了其registry實現,  目前已經成為CNCF的沙箱項目Distribution。不過,Distribution項目僅僅實現了對鏡像存儲的支持,對企業(yè)級的一些管理訴求并無法提供支持。

           

          為了實現企業(yè)級鏡像倉庫的支持,Harbor項目應運而生。

              

          Harbor Registry(又稱Harbor云原生制品倉庫或Harbor鏡像倉庫)由VMware公司中國研發(fā)中心云原生實驗室原創(chuàng),并于20163月開源。Harbor在Docker Distribution的基礎上增加了企業(yè)用戶必需的權限控制、鏡像簽名、安全漏洞掃描和遠程復制等重要功能,還提供了圖形管理界面及面向國內用戶的中文支持,開源后迅速在中國開發(fā)者和用戶社區(qū)流行,成為中國云原生用戶的主流容器鏡像倉庫。

           

          20187月,VMware捐贈Harbor給CNCF,使Harbor成為社區(qū)共同維護的開源項目,也是首個源自中國的CNCF項目。在加入CNCF之后,Harbor融合到全球的云原生社區(qū)中,眾多的合作伙伴、用戶和開發(fā)者都參與了Harbor項目的貢獻,數以千計的用戶在生產系統(tǒng)中部署和使用Harbor,Harbor每個月的下載量超過3萬次。2020年6月,Harbor成為首個中國原創(chuàng)的CNCF畢業(yè)項目。目前Harbor主項目已經在GitHub上已經獲得了1萬3千多顆星。Harbor項目目前有來自于全球多家公司的14名維護者,200多名核心提交者,以及50多個貢獻公司。Harbor社區(qū)依然在蓬勃發(fā)展,歡迎更多的貢獻者加入!


          Harbor是為滿足企業(yè)安全合規(guī)的需求而設計的,旨在提供安全和可信的云原生制品管理,支持鏡像簽名和內容掃描,確保制品管理的合規(guī)性、高效性和互操作性。Harbor的功能主要包括四大類:多用戶的管控(基于角色訪問控制和項目隔離)、鏡像管理策略(存儲配額、制品保留、漏洞掃描、來源簽名、不可變制品、垃圾回收等)、安全與合規(guī)(身份認證、掃描和CVE例外規(guī)則等)和互操作性(Webhook、內容遠程復制、可插拔掃描器、REST API、機器人賬號等)。

           

          Harbor提供了多種途徑來幫助用戶快速搭建Harbor鏡像倉庫服務,包括:
          • 離線安裝包:通過docker-compose編排運行。安裝包除了包含相關的安裝腳本外,還包含了所有安裝所需要的Harbor組件鏡像,可以在離線環(huán)境下安裝使用。

          • 在線安裝包:與離線安裝包類似,唯一的區(qū)別就是不包含harbor組件鏡像,安裝時鏡像需要從網絡上的倉庫服務拉取。

          • Helm Chart:

            通過Helm的方式將Harbor部署到目標的Kubernetes集群中。

            目前僅覆蓋Harbor自身組件的部署安裝,其所依賴的諸如數據庫、Redis緩存以及可能的存儲服務需要用戶自己負責。

          • Kubernetes Operator:

            基于Kubernetes Operator框架編排部署,重點關注all-in-one的HA部署模式的支持。

            目前還處于開發(fā)中,很快就會發(fā)布。

             

          接下來,我們深入了解一下Harbor所提供的核心功能。

           

          首先就是Harbor的資源隔離與多租戶體系,如下圖所示。



          Harbor實現了以項目為單位的資源邏輯隔離體系,基于項目實現RBAC訪問控制和配額管理。用戶對項目資源的訪問是基于其在此項目中所被指派的角色。目前Harbor提供了多個預定義的角色,訪客、開發(fā)者、維護者,項目管理員以及系統(tǒng)管理員,權限從低到高逐級遞進,具體詳情可參見:角色權限集合(https://goharbor.io/docs/2.2.0/administration/managing-users/user-permissions-by-role/)。另外,需要特別提到的是,因為是邏輯隔離,在后端實際存儲中還是共享空間的,這樣避免鏡像的數據層重復存儲,有效降低存儲空間大小。
           
          Harbor也支持多種用戶系統(tǒng),默認支持內嵌的數據庫用戶系統(tǒng),同時也支持對接AD/LDAP系統(tǒng)以及通過一致的OIDC機制對接其它用戶系統(tǒng)提供商,社區(qū)驗證過的提供商可以參考 OIDC adapters(https://goharbor.io/docs/2.2.0/install-config/harbor-compatibility-list/)。同時,考慮到CI/CD場景,也提供了項目層面的機器人賬號,方便CI/CD中的集成使用。
           
          在剛發(fā)布不久的Harbor 2.2版本中,對機器人賬號也做了很大的增強。


          提供了新的系統(tǒng)級別的機器人賬號以支持通過一組授權來覆蓋多個項目。同時,支持更多類型的權限來授權不同的操作和API調用。另外,相對于之前的jwt令牌方式,新的方式帶來更大的靈活性(即使授權范圍或者過期時間發(fā)生變化,密碼依然有效)。更多詳情可以參考系 統(tǒng)級機器人賬號的設計提議(https://github.com/goharbor/community/pull/148)。

           

           鏡像倉庫的一個關鍵功能就是實現鏡像的分發(fā)。Harbor在鏡像分發(fā)方面,除了常規(guī)的鏡像推送和拉取能力外,還提供了多種有效的機制和方法供用戶來應對不同的場景需要。

           

          基于策略的鏡像復制機制,可以幫助用戶實現將源倉庫中的特定鏡像集合在指定的條件下復制到目標鏡像倉庫中。在復制策略中,除了指定源倉庫或者目標倉庫之外,可以指定多種過濾器(鏡像庫、tag和標簽)與多種觸發(fā)模式(手動,基于時間以及定時)且實現對推送(將鏡像從源倉庫推送至目標倉庫)和拉取(將目標倉庫的鏡像拉取到當前倉庫)兩種模式的支持。首次復制為全量復制,之后會實現增量復制以提升效率。目前Harbor的復制功能已經支持包含Docker Hub、Quay、GCR、ECR等在內的十多種第三方鏡像倉庫,具體列表可參考 Replicaiton adpaters(https://goharbor.io/docs/2.2.0/install-config/harbor-compatibility-list/)。

           


          基于復制功能,可有構建主從或者中心-邊緣的多層分發(fā)體系,以實現鏡像內容的高效和穩(wěn)定的分發(fā)。如下圖所示。鏡像推送至中心Harbor倉庫,然后復制到其它地理位置上的邊緣倉庫,容器運行時可從就近的邊緣倉庫拉取。



          復制可以解決非實時的復制能力,對于實時場景,Harbor實現項目級別的緩存機制。在創(chuàng)建項目時,可以啟用項目的緩存機制。這樣在拉取鏡像時,如果項目中不存在,則由適配器將請求代理到項目所配置的上游倉庫中來響應此次拉取的請求,同時將鏡像緩存到項目中,下次再請求此鏡像時,則可直接響應請求。緩存到項目的鏡像制品與“本地”鏡像制品沒有差異,相關的管理策略可以應用到緩存的鏡像上,比如配額、掃描等。目前支持的緩存代理的上游倉庫除了其它Harbor之外,還支持Docker Hub、GCR、ECR以及quay,未來會根據需求來驗證更多第三方倉庫支持(緩存代理與內容復制共享相同的適配器)。在創(chuàng)建項目時選擇啟用緩存功能則新建項目為緩存項目,不可推送;以創(chuàng)建的普通項目無法直接轉為緩存項目。另外,使用緩存鏡像的路徑有特定的模式,docker pull <harbor-host>/[cache_project_name]/<repository_path>docker pull goharbor.io/my_cache_pro/library/nginx:latest)。


          在進行大量部署的時候,對倉庫的鏡像拉取請求會產生井噴,進而造成比較重的負擔。而這其中可能有很多重復的鏡像請求,這樣也就造成更多的不必要的資源和流量浪費。P2P網絡可以加速內容的分發(fā),自然也可以加速鏡像的分發(fā)。因為P2P的特質,內容可來源于其它peer節(jié)點,這樣可以有效地減少對上游倉庫的請求。Harbor是鏡像倉庫,本身不支持P2P協(xié)議。但是可以與其它P2P提供者實現集成,進而利用P2P vendor能力實現鏡像的加速。這就是Harbor的鏡像預熱功能。用戶通過在特定項目中創(chuàng)建特定的預熱策略,使用過濾器(repository和tag)來確定哪些鏡像滿足什么樣的條件(是否簽名,持有特定標簽或者滿足特定的漏洞狀態(tài))需要預熱,在什么時候(就有事件或者基于定時)觸發(fā)預熱,將所選鏡像提前從Harbor倉庫傳輸到特定P2P引擎的緩存中,在有拉取請求時,P2P可以直接開始工作,不需要從上游倉庫獲取首份鏡像內容。目前已經支持的P2P引擎包括CNCFDragonfly和Uber的Kraken。



          安全已經成為云原生關注的要點之一,同時也是平臺的第一要務。Harbor作為鏡像制品倉庫,也提供了與鏡像相關聯的多種安全機制,這也是Harbor很重要的特點之一。

           

          Harbor通過引入開源的Notary框架實現了與DTR兼容的鏡像制品簽名機制。用戶只要在Docker客戶端設置以下環(huán)境變量,就可開啟簽名流程:

          $ export DOCKER_CONTENT_TRUST=1

          $ export DOCKER_CONTENT_TRUST_SERVER=https://<harbor主機地址>:4443


          之后在拉取使用鏡像時,會對內容進行校驗。

          鏡像制品是否被簽名,也可以設置成為鏡像安全策略之一,這樣可以保證只有簽名過的鏡像制品才可以被拉取。


          Harbor對舊式的Helm V2 chart的支持是通過chartmuseum來實現的,其簽名機制保持了和Helm社區(qū)一致的形式,即通過GPG key的模式。在打包chart時,添加--sign和--key來生成包含有簽名內容的prov文件,之后通過Harbor的web界面或者helm V2push 插件隨chart的tgz包一同上傳到Harbor。Harbor會識別文件以展示chart是否被簽過名。之后在使用時,可以對內容進行校驗。



          Harbor支持對鏡像制品進行漏洞掃描??紤]到用戶對掃描引擎有不同的偏好或者已經投入了特定的掃描引擎,Harbor通過插件式的方式可以對接多種不同的掃描引擎來實現對其所管理的鏡像制品的漏洞掃描能力。目前已經支持的掃描引擎包括 Clair、Trivy、Aqua CSP、Anchore、Sisdig、小佑DoSec以及探真掃描器等,具體列表可以參考Scanner adapters。未來會支持更多諸如惡意軟件,非法配置以及BOM等形式的掃描。



          Harbor基于上述插件式的掃描機制,可向用戶提供特定鏡像的漏洞報告總匯和漏洞詳情列表,便于用戶及時掌握鏡像的漏洞狀態(tài)。另外,基于這些漏洞狀態(tài)信息,設置與掃描有關的安全策略,即只允許包含某級別以下的鏡像被拉取,大大提升了運行時端的安全可靠性。


          Harbor也考慮到了在特定情況下,某些鏡像tag具有一定的穩(wěn)定性要求,不能被誤覆蓋,實現了不可變tag的安全機制。用戶通過設置不可變tag的規(guī)則,使得滿足這個規(guī)則的tag都進入不可變更的狀態(tài)。


          作為資源的管理儲存平臺,資源的清理和垃圾回收自然也不能缺席。結合鏡像的管理模型和存儲模型,Harbor提供了tag保留機制和垃圾回收兩種能力。


          Tag保留機制基于用戶設置的規(guī)則計算出需要保留的鏡像tag,而不在保留列表里的tag則會被清除。用戶可以設置最多15條規(guī)則,每條規(guī)則可以獨立定義過濾器和諸如“保留最近拉取的#個鏡像”或者“保留最近#天內被拉取的鏡像”的附件條件。這里需要提到的是,之前提到的不可變鏡像tag是不會被清理的。另外,每次清理或者保留的tag列表會在每次規(guī)則執(zhí)行的文本日志里保留。Tag的清理不會釋放存儲資源,但是會釋放配額。



          清理后端的無用存儲數據則需要GC垃圾回收機制。Harbor支持在線垃圾回收,用戶可通過Harbor的管理界面來觸發(fā)或者設置定時循環(huán)觸發(fā)。每次GC執(zhí)行的具體信息會被記錄在執(zhí)行記錄的文本日志里,這些信息包含總共分析了多少數據,釋放了多少數據。在2.1版本之前,GC的運行時阻塞式的,即GC運行時系統(tǒng)處于只讀狀態(tài),不允許任何寫操作進行。2.1之后實現非阻塞式GC模式,GC過程依然支持推送新鏡像到Harbor。



          要使用Harbor搭建高可用的鏡像倉庫服務,無論是那種部署模式,基本可以從基于Harbor的鏡像復制功能或者使用共享服務/存儲兩個角度考慮。具體內容可以參閱《Harbor權威指南》這本書的相關章節(jié)。

           

          Harbor自身也具有很強的擴展能力,可以支持不同場景下的集成需求。這些擴展能力可以總結為以下幾點:

          • 基于Swagger的完善Rest API,很容易構建API客戶端來實現API的集成。

          • 支持AD/LDAP/OIDC,可以實現用戶系統(tǒng)的對接。

          • 插件化的漏洞掃描機制,掃描引擎vendor可以基于掃描器API規(guī)范實現與Harbor的集成。

          • P2P提供商可以通過實現特定的接口規(guī)范來完成與Harbor的集成。

          • 第三方鏡像倉庫可以通過實現特定的復制適配器接口規(guī)范來實現與Harbor的互操作。

          • 對于符合OCI規(guī)范的制品,可以通過預先定義的OCI annotation來實現元數據的擴展識別,進而使得Harbor API和web界面支持對特定元數據的識別和渲染。

          • Harbor從版本2.2開始開放了相關的系統(tǒng)和業(yè)務監(jiān)控參數,可以方便的實現特定監(jiān)控平臺對Harbor的接入和監(jiān)控,方便日常運維工作。

           

          之后的版本,Harbor會重點關注:

          •  發(fā)布針對Kubernetes平臺部署的harbor operator

          • 支持更多組件的監(jiān)控參數暴露

          • 組建性能工作組來不斷解決Harbor中遇到的性能問題并實現持續(xù)改進

          • IPV6網絡的支持

          • 更強大的安全掃描與審查機制

          • 組建多架構工作組以實現在非X86 CPU架構平臺上(ARM、AMD和龍芯)構建運行Harbor服務

          • 響應更多其他來自于用戶和社區(qū)的需求

           

          Harbor一致致力于構建開放、透明和活躍的社區(qū),歡迎大家積極參與到社區(qū)中,共同努力并推動Harbor項目不斷向前發(fā)展。大家可以通過多種途徑聯系社區(qū)和參與進來:

          • CNCF workspace下的slack channel:#harbor與#harbor-dev

          • 公開郵件組:lists.cncf.io/g/harbor-users 和lists.cncf.io/g/harbor-dev

          • Twitter:@project_harbor

          • 雙周社區(qū)例會:雙周周三晚21:00點 zoom https://zoom.us/j/734959521撥入。會議邀請會發(fā)送到slack channel和郵件組。

          • Demo環(huán)境: demo.goharbor.io, 自助注冊賬戶進入。


          下面是Harbor公眾號,歡迎大家關注!



          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色毛片电影院 | 亚洲激情网| 国产色婷婷视频在线观看 | 免费观看无码视频 | 超碰国内|