如何快速利用Harbor搭建本身的企業級registry server?

小貼士

Harbor是由VMware團隊爲企業用戶設計的Registry Server開源項目,用戶能夠利用Harbor搭建本身的私有鏡像倉庫。即便你是harbor小白,也能夠從本文快速從認識Harbor到利用Harbor搭建本身的企業級registry server。
 mysql

Harbor特性

  • 基於角色控制
    用戶和倉庫都是基於項目進行組織的, 而用戶基於項目能夠擁有不一樣的權限。
  • 基於鏡像的複製策略
    鏡像能夠在多個Harbor實例之間進行復制。
  • 支持LDAP
    Harbor的用戶受權可使用已經存在LDAP用戶。
  • 鏡像刪除 & 垃圾回收
    Image能夠被刪除而且回收Image佔用的空間。
  • 用戶UI
    用戶能夠輕鬆的瀏覽、搜索鏡像倉庫以及對項目進行管理。
  • 鏡像刪除 & 垃圾回收
    絕大部分的用戶操做API, 方便用戶對系統進行擴展。
  • 輕鬆的部署功能
    Harbor提供了online、offline安裝,除此以外還提供了virtual appliance安裝。

 

Harbor和docker registry關係

Harbor實質上是對docker registry作了封裝,擴展了本身的業務模塊.下面展現一下docker registry和Harbor的架構圖用以說明。
 nginx

微信截圖_20161228145642.png



Harbor認證過程
一、docker daemon從docker registry拉取鏡像。

二、若是docker registry須要進行受權時,registry將會返回401 Unauthorized響應,同時在響應中包含了docker client如何進行認證的信息。

三、docker client根據registry返回的信息,向auth server發送請求獲取認證token。

四、auth server則根據本身的業務實現去驗證提交的用戶信息是否存符合業務要求。

五、用戶數據倉庫返回用戶的相關信息。

六、auth server將會根據查詢的用戶信息,生成token令牌,以及當前用戶所具備的相關權限信息 。上述就是完整的受權過程.當用戶完成上述過程之後即可以執行相關的pull push操做。認證信息會每次都帶在請求頭中。

Harbor總體架構web

微信截圖_20161228145741.png



Harbor認證流程sql

微信截圖_20161228145750.png



A、首先,請求被代理容器監聽攔截,並跳轉到指定的認證服務器。

B、 若是認證服務器配置了權限認證,則會返回401。通知docker client在特定的請求中須要帶上一個合法的token。而認證的邏輯地址則指向架構圖中的core services。

C、 當docker client接受到錯誤code。client就會發送認證請求(帶有用戶名和密碼)到core services進行basic auth認證。

D、 當C的請求發送給ngnix之後,ngnix會根據配置的認證地址將帶有用戶名和密碼的請求發送到core serivces。

E、 core services獲取用戶名和密碼之後對用戶信息進行認證(本身的數據庫或者介入LDAP均可以)。成功之後,返回認證成功的信息。

從上面的docker registry 和 Harbor的架構圖、流程圖能夠看出Harbor的擴展部分爲core services。這部分實現了用戶的認證, 添加了UI模塊已經webhook。
 docker

Harbor安裝

Harbor安裝有三種方式,這裏以online的方式爲例,另外兩種有興趣的童鞋能夠參考Harbor的官方文檔。

Harbor的安裝

一、下載安裝包
二、配置harbor.cfg文件
三、執行install.sh腳本安裝並啓動Harbor

用戶能夠到release頁下載相關文件,解壓tar xvf harbor-online-installer-<version>.tgz。

Harbor配置數據庫

  • hostname 運行Harbor的主機地址(域名或者IP地址 不能是localhost or 127.0.0.1。
  • ui_url_protocol url協議(http或者htpps) https配置能夠參考 Configuring Harbor with HTTPS Access。
  • Email設定 配置的郵件能夠用戶Harbor進行密碼重置處理。


e.g:
email_server =smtp.mydomain.com
email_server_port = 25
email_username=ample_admin@mydomain.com
email_password = abc
email_from = admin sample_admin@mydomain.com
email_ssl = falseswift

  • harbor_admin_password admin初始化密碼。
  • auth_mode 認證方式,默認爲db_auth。也可使用ldap_auth 因爲參數太多就不一一列舉了。 Harbor安裝手冊講的很清楚。

 

storage配置

默認狀況下,Harbor是把鏡像存儲在本地文件系統中的。可是在生成環境中你可能會考慮到使用其餘的存儲方案來代替本地存儲。好比S三、Openstack Swift、Ceph等等。那麼這個時候你就須要更改templates/registry/config.yml中的存儲配置部分。例如:

storage:
swift:

username: admin

password: ADMIN_PASS

authurl: http://keystone_addr:35357/v3/auth
tenant: admin

domain: default

region: regionOne

container: docker_images

詳細配置能夠參考Registry Configuration Reference

完成安裝並啓動

sudo ./install.sh

登陸並建立本身的首個倉庫試試(初始用戶名/密碼 admin/Harbor12345)

$docker login reg.yourdomain.com
$dockerpushreg.yourdomain.com/myproject/myrepo:mytag

Harbor的生命週期管理 你可使用docker-compose來管理Harbor的生命週期,下面列舉一些有用的經常使用的命令。

Stop Harbor:

$ sudo docker-compose stop
Stopping harbor_proxy_1 ... done
Stopping harbor_ui_1 ... done
Stopping harbor_registry_1 ... done
Stopping harbor_mysql_1 ... done
Stopping harbor_log_1 ... done
Stopping harbor_jobservice_1 ... done

Restart Harbor after stopping:

$ sudo docker-compose start
Starting harbor_log_1
Starting harbor_mysql_1
Starting harbor_registry_1
Starting harbor_ui_1
Starting harbor_proxy_1
Starting harbor_jobservice_1

移除docker container 可是保留相關鏡像文件

sudo docker-compose rm
Going to remove harbor_proxy_1, harbor_ui_1, harbor_registry_1, harbor_mysql_1, harbor_log_1, harbor_jobservice_1
Are you sure? [yN] y
Removing harbor_proxy_1 ... done
Removing harbor_ui_1 ... done
Removing harbor_registry_1 ... done
Removing harbor_mysql_1 ... done
Removing harbor_log_1 ... done
Removing harbor_jobservice_1 ... done

詳細信息能夠參考Docker Compose command-line reference

持久化data和日誌文件 默認狀況下data是被存儲在Harbor host機的/data目錄.無論harbor container是刪除仍是從新建立這裏的數據都是一致存在的。另外harbor的日誌文件默認狀況下是存在/var/log/harbor/目錄下的。
自定義ngnix監聽端口 修改docker-compose.yml文件。
一、替換80端口爲任意存在未被佔用的端口 e.g 8899

proxy:

image: library/nginx:1.11.5
restart: always

volumes:
- ./config/nginx:/etc/nginx

ports:
- 8899:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log

logging:

driver: "syslog"
options:

syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"

二、修改templates/registry/config.yml文件

auth:

token:
issuer: registry-token-issuer
realm: $ui_url:8899/service/token
rootcertbundle: /etc/registry/root.crt
service: token-service
三、運行install.sh來更新並啓動Harbor

$ sudo docker-compose down
$ sudo install.sh

HTTPS 協議的修改和自定義監聽端口修改同樣的操做

Wise2C ∣一個有用的公衆號
 服務器

a9bf2b2.jpg

相關文章
相關標籤/搜索