Harbor: 開源 Container Registry

Harbor 是基於 Docker Distribution 進行擴展的 Container Registry 專案,其針對一些企業常用的功能做了許多整合,例如: LDAP、容器映像檔安全掃描的 Clair、容器映像檔簽署的 Notary、儲存後端(S3、Cloud Storage 等)、映像檔副本機制。除此之外,Harbor 亦提供了進階的安全性功能,如使用者管理(User managment),存取控制(Access control)和活動稽核(Activity auditing)。

Harbor 早期是 VMware 開源作為企業級私有 Container Registry 的專案,但在 2018 年時貢獻給 CNCF 作為 Sandbox 專案進行維護。

功能特色

  • 支援 RBAC(Role Based Access Control) 機制: 管理員可以定義 User、Project 與 Image 的權限。

    P.S. 這邊的 Project 是 Image 隔離域。Image 可以被存放到不同 Project,然後讓不同 User 存取。

  • 支援 LDAP/AD:可以整合 LDAP/AD 來管理使用者的認證與授權。
  • Web-based UI:使用者可以透過登入 Web-based UI 來管理 Image。
  • 稽核管理:所有操作都被記錄。
  • RESTful API:提供 RESTful APIs 來讓其他系統進行整合。
  • 漏洞掃描:整合 Clair 專案來進行 Image 的漏洞掃描。
  • 映像檔簽署:整合 Notary 專案來確保 Image 是可信任的。

可以查看 Harbor Features 來了解更多功能特色。

Harbor 簡單部署與使用

Harbor 提供兩種方法進行安裝:

  1. Online installer
    這種安裝方式會從 Docker hub 下載 Harbor 所需的映像檔,因此 installer 檔案較輕量。
  2. Offline installer
    當無任何網際網路連接的情況下使用此種安裝方式,預先將所需的映像檔打包,因此 installer 檔案較大。

事前準備

Harbor 會部署數個 Docker container,所以部署的主機需要能支援 Docker 的 Linux distribution。而部署主機需要安裝以下套件:

  • Python 版本2.7+
  • Docker Engine 版本 1.10+。Docker 安裝方式,請參考:Install Docker
  • Docker Compose 版本 1.6.0+。Docker Compose 安裝方式,請參考:Install Docker Compose

官方安裝指南說明是 Linux 且要支援 Docker,但 Windows 支援 Docker 部署 Harbor 還需要驗證是否可行。

安裝步驟大致可分為以下階段:

  1. 下載 installer
  2. 設定 Harbor
  3. 執行安裝腳本

下載 installer

installer 的二進制檔案可以從 release page 下載,選擇您需要 Online installer 或者 Offline installer,下載完成後,使用tar將 package 解壓縮:

Online installer:

$ tar xvf harbor-online-installer-<version>.tgz

Offline installer:

$ tar xvf harbor-offline-installer-<version>.tgz

設定 Harbor

Harbor 的設定與參數都在harbor.cfg中。

harbor.cfg中的參數分為required parametersoptional parameters

  • required parameters
    這類的參數是必須設定的,且會影響使用者更新harbor.cfg後,重新執行安裝腳本來重新安裝 Harbor。
  • optional parameters
    這類的參數為使用者自行決定是否設定,且只會在第一次安裝時,這些參數的配置才會生效。而 Harbor 啟動後,可以透過 Web UI 進行修改。
Configuring storage backend (optional)

預設的情況下,Harbor 會將 Docker image 儲存在本機的檔案系統上,在生產環境中,您可以考慮使用其他 storage backend 而不是本機的檔案系統,像是 S3, OpenStack Swift, Ceph 等。而僅需更改 common/templates/registry/config.yml。以下為一個接 OpenStack Swift 的範例:

storage:
swift:
username: admin
password: ADMIN_PASS
authurl: http://keystone_addr:35357/v3/auth
tenant: admin
domain: default
region: regionOne
container: docker_images

更多 storage backend 的資訊,請參考:Registry Configuration Reference。 另外官方提供的是改 common/templates/registry/config.yml,感覺寫錯,需再測試其正確性。

執行安裝腳本

一旦harbor.cfg與 storage backend (optional) 設定完成後,可以透過install.sh腳本開始安裝 Harbor。從 Harbor 1.1.0 版本之後,已經整合Notary,但是預設的情況下安裝是不包含Notary支援:

$ sudo ./install.sh

Online installer 會從 Docker hub 下載 Harbor 所需的映像檔,因此會花較久的時間。

如果安裝過程正常,您可以打開瀏覽器並輸入在harbor.cfg中設定的hostname,來存取 Harbor 的 Web UI。
Harbor Web UI

預設的管理者帳號密碼為 admin/Harbor12345

開始使用 Harbor

登入成功後,可以創建一個新的 Project,並使用 Docker command 進行登入,但在登入之前,需要對 Docker daemon 新增--insecure-registry參數。新增--insecure-registry參數至/etc/default/docker中:

DOCKER_OPTS="--insecure-registry <your harbor.cfg hostname>"

其他細節,請參考:Test an insecure registry。 若在Ubuntu 16.04的作業系統版本,需要修改/lib/systemd/system/docker.service檔案,並加入一下內容。另外在 CentOS 7.x 版本則不需要加入-H fd://資訊:

EnvironmentFile=/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

修改完成後,重新啟動服務:

$ sudo systemctl daemon-reload

服務重啟成功後,透過 Docker command 進行 login:

$ docker login <your harbor.cfg hostname>

將映像檔上 tag 之後,上傳至 Harbor:

$ docker tag ubuntu:<your harbor.cfg hostname>/<your project>/ubuntu:16.04
$ docker push <your harbor.cfg hostname>/<your project>/ubunut:16.04

從 Harbor 抓取上傳的映像檔:

$ docker pull <your harbor.cfg hostname>/<your project>/ubunut:16.04

更多使用者操作,請參考:Harbor User Guide

References

Share Comments