VMware Harbor組件原理分析

Harbor

    harbor是vmware開源的企業級registry,可以讓你迅速的搭建自己的私有registry,harbor擴展的docker的registry,使harbor支持以下特性:

  • RBAC 基於角色的權限控制
  • 基於策略的鏡像複製
  • 漏掃
  • LDAP/AD支持
  • 鏡像刪除和垃圾清理
  • Notary 鏡像簽名
  • 用戶界面
  • 審計
  • RESTful api
  • 安裝簡單(基於compose)

組件

    今天只聊聊harbor的架構,harbor主要有6大模塊,默認的每個harbor的組件都被封裝成一個docker container,所以可以通過compose來部署harbor,總共分爲8個容器運行,通過docker-compose ps來查看

    簡易架構圖

harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /usr/local/bin/docker-entr ...   Up (healthy)   3306/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-ui            /harbor/start.sh                 Up (healthy)                                                                   
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh serve /etc/ ...   Up (healthy)   5000/tcp        
  1. harbor-adminserver:harbor系統管理接口,可以修改系統配置以及獲取系統信息
  2. harbor-db:存儲項目的元數據、用戶、規則、複製策略等信息
  3. harbor-jobservice:harbor裏面主要是爲了鏡像倉庫之前同步使用的
  4. harbor-log:收集其他harbor的日誌信息。rsyslogd
  5. harbor-ui:一個用戶界面模塊,用來管理registry。主要是前端的頁面和後端CURD的接口
  6. nginx:harbor的一個反向代理組件,代理registry、ui、token等服務。這個代理會轉發harbor web和docker client的各種請求到後端服務上。是個nginx。nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,它將流量分發到後端的ui和正在docker鏡像存儲的docker registry
  7. registry:存儲docker images的服務,並且提供pull/push服務。harbor需要對image的訪問進行訪問控制,當client每次進行pull、push的時候,registry都需要client去token服務獲取一個可用的token。
  8. redis:存儲緩存信息
  9. webhook:當registry中的image狀態發生變化的時候去記錄更新日誌、複製等操作。
    token service:在docker client進行pull/push的時候今天token的發放。

harbor-login

a  nginx代理在80端口收到client發來的請求,然後把該請求轉發到後端的registry。

b  registry收到請求,因爲registry是配置的token-based的認證,所以會直接返回一個401狀態碼,然後返回一個url,通知client去哪裏獲取token,也就是token service

c  當docker client收到這個url後,會對這個url發起請求,需要在請求頭中植入用戶名和密碼。

d  當請求到達nginx反向代理後,nginx會把該請求轉發至ui服務上,因爲ui符合token服務在一個容器裏面,token服務會解碼請求頭中用戶名和密碼

e  拿到用戶名和密碼後會和db中的進行對比,如果驗證無誤,則返回成功,在返回的http請求中包含一個私有key

 

harbor-push

省略了proxy轉發這一步
當你登錄harbor成功後,docker push就可以使用了。

a  docker client和registry交互,獲取到token service的url
b  隨後docker client和token service交互,告訴token需要進行push操作
c  token服務查看db,該用戶是否有相關的權限來push image,如果有相關權限,則返回一個私有的key
d  docker client拿到token後,會對registry發起push請求,當registry收到請求後,會用自己的公鑰解密token,如果驗證token是合格的,則開始image傳輸過程 

 

附加

    clair

        是 coreos 開源的容器漏洞掃描工具,在容器逐漸普及的今天,容器鏡像安全問題日益嚴重。clair 是目前少數的開源安全掃描工具,主要提供OS(centos,debian,ubuntu等)的軟件包脆弱性掃描。clair的可以單機部署也可以部署到k8s上,可以與現有的registry集成。harbor 很好的整合了 clair ,通過簡單的UI就可以對上傳的鏡像掃描,還可以通過每天的定時掃描對所有鏡像進行統一掃描,架構如下:

    Notary
        是一套docker鏡像的簽名工具, 用來保證鏡像在pull,push和傳輸工程中的一致性和完整性。避免中間人攻擊,避免非法的鏡像更新和運行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章