亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

VMware Harbor:基于 Docker Distribution 的企業(yè)級 Registry

simon_chen / 1757人閱讀

摘要:架構(gòu)介紹主要組件在架構(gòu)上主要由五個(gè)組件構(gòu)成的等服務(wù),通過一個(gè)前置的反向代理統(tǒng)一接收瀏覽器客戶端的請求,并將請求轉(zhuǎn)發(fā)給后端不同的服務(wù)。目前不支持功能已提交。

前言

對于 Harbor 這樣一個(gè)優(yōu)秀的 Docker Registry 管理開源項(xiàng)目,以下內(nèi)容基本上來自前人已有的研究,我只是將其在實(shí)踐中進(jìn)行了測試,并整理匯集了相關(guān)資料供大家參考,同時(shí)針對 Harbor 與 Rancher產(chǎn)品的整合做了一些實(shí)驗(yàn)性的工作,以更好更全面的理解 Harbor 這個(gè)工具,也更加了解 Rancher 在快速一鍵部署、彈性伸縮高可用等方面的優(yōu)勢。

Harbor 簡介

Harbor 是一個(gè)企業(yè)級 Registry 服務(wù)。它對開源的 Docker Registry 服務(wù)進(jìn)行了擴(kuò)展,添加了更多企業(yè)用戶需要的功能。Harbor 被設(shè)計(jì)用于部署一套組織內(nèi)部使用的私有環(huán)境,這個(gè)私有 Registry 服務(wù)對于非常關(guān)心安全的組織來說是十分重要的。另外,私有 Registry 服務(wù)可以通過避免從公域網(wǎng)下載鏡 像而提高企業(yè)生產(chǎn)力。這對于沒有良好的 Internet 連接狀態(tài),使用 Docker Container 的用戶是一個(gè)福音。

基于角色的訪問控制:用戶與 Docker 鏡像倉庫通過“項(xiàng)目”進(jìn)行組織管理,一個(gè)用戶可以對多個(gè)鏡像倉庫在同一命名空間(project)里有不同的權(quán)限。

圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,檢索當(dāng)前 Docker 鏡像倉庫,管理項(xiàng)目和命名空間。

審計(jì)管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計(jì)管理。

國際化:基于英文與中文語言進(jìn)行了本地化??梢栽黾痈嗟恼Z言支持。

RESTful API - RESTful API:提供給管理員對于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。

Harbor 架構(gòu)介紹 (1)主要組件

Harbor 在架構(gòu)上主要由五個(gè)組件構(gòu)成:

Proxy:Harbor 的 registry, UI, token 等服務(wù),通過一個(gè)前置的反向代理統(tǒng)一接收瀏覽器、Docker 客戶端的請求,并將請求轉(zhuǎn)發(fā)給后端不同的服務(wù)。

Registry:負(fù)責(zé)儲存 Docker 鏡像,并處理 docker push/pull 命令。由于我們要對用戶進(jìn)行訪問控制,即不同用戶對 Docker image 有不同的讀寫權(quán)限,Registry 會指向一個(gè) token 服務(wù),強(qiáng)制用戶的每次 docker pull/push 請求都要攜帶一個(gè)合法的 token, Registry 會通過公鑰對 token 進(jìn)行解密驗(yàn)證。

Core services:這是 Harbor 的核心功能,主要提供以下服務(wù):

UI:提供圖形化界面,幫助用戶管理 registry 上的鏡像(image),并對用戶進(jìn)行授權(quán);
webhook:為了及時(shí)獲取 registry 上 image 狀態(tài)變化的情況, 在 Registry 上配置 webhook,把狀態(tài)變化傳遞給 UI 模塊;
token 服務(wù):負(fù)責(zé)根據(jù)用戶權(quán)限給每個(gè) docker push/pull 命令簽發(fā) token。Docker 客戶端向Registry 服務(wù)發(fā)起的請求,如果不包含token,會被重定向到這里,獲得 token 后再重新向 Registry進(jìn)行請求;

Database:為 core services 提供數(shù)據(jù)庫服務(wù),負(fù)責(zé)儲存用戶權(quán)限、審計(jì)日志、Docker image 分組信息等數(shù)據(jù)。

Log collector:為了幫助監(jiān)控 Harbor 運(yùn)行,負(fù)責(zé)收集其他組件的 log,供日后進(jìn)行分析。各個(gè)組件之間的關(guān)系如下圖所示:

(2)實(shí)現(xiàn)

Harbor 的每個(gè)組件都是以 Docker 容器的形式構(gòu)建的,因此很自然地,我們使用 Docker Compose 來對它進(jìn)行部署。在源代碼中(https://github.com/vmware/har...,用于部署 Harbor 的 Docker Compose 模板位于 /Deployer/docker-compose.yml. 打開這個(gè)模板文件,會發(fā)現(xiàn) Harbor 由 5 個(gè)容器組成:

proxy:由 Nginx 服務(wù)器構(gòu)成的反向代理。

registry:由 Docker 官方的開源 registry 鏡像構(gòu)成的容器實(shí)例。

ui:即架構(gòu)中的 core services, 構(gòu)成此容器的代碼是 Harbor 項(xiàng)目的主體。

mysql:由官方 MySql 鏡像構(gòu)成的數(shù)據(jù)庫容器。

log: 運(yùn)行著 rsyslogd 的容器,通過 log-driver 的形式收集其他容器的日志。

這幾個(gè)容器通過 Docker link 的形式連接在一起,這樣,在容器之間可以通過容器名字互相訪問。對終端用戶而言,只需要暴露 proxy (即 Nginx)的服務(wù)端口。

(3)工作原理

下面以兩個(gè) Docker 命令為例,講解主要組件之間如何協(xié)同工作。

1) docker login

假設(shè)我們將 Harbor 部署在主機(jī)名為 registry.yourdomainname.com 的虛機(jī)上。用戶通過 docker login 命令向這個(gè) Harbor 服務(wù)發(fā)起登錄請求:docker login registry.yourdomainname.com當(dāng)用戶輸入所需信息并點(diǎn)擊回車后,Docker 客戶端會向地址“registry.yourdomainname.com/v2/” 發(fā)出 HTTP GET 請求。 Harbor 的各個(gè)容器會通過以下步驟處理:

(a) 首先,這個(gè)請求會由監(jiān)聽 80 端口的 proxy 容器接收到。根據(jù)預(yù)先設(shè)置的匹配規(guī)則,容器中的 Nginx會將請求轉(zhuǎn)發(fā)給后端的 registry 容器;

(b) 在 registry 容器一方,由于配置了基于 token 的認(rèn)證,registry 會返回錯(cuò)誤代碼 401,提示 Docker客戶端訪問 token 服務(wù)綁定的 URL。在 Harbor 中,這個(gè) URL 指向 Core Services;

(c) Docker 客戶端在接到這個(gè)錯(cuò)誤代碼后,會向token服務(wù)的URL發(fā)出請求,并根據(jù)HTTP協(xié)議的BasicAuthentication 規(guī)范,將用戶名密碼組合并編碼,放在請求頭部(header);

(d)類似地,這個(gè)請求通過 80 端口發(fā)到 proxy 容器后,Nginx 會根據(jù)規(guī)則把請求轉(zhuǎn)發(fā)給 ui 容器,ui 容器監(jiān)聽 token 服務(wù)網(wǎng)址的處理程序接收到請求后,會將請求頭解碼,得到用戶名、密碼;

(e) 在得到用戶名、密碼后,ui 容器中的代碼會查詢數(shù)據(jù)庫,將用戶名、密碼與 mysql 容器中的數(shù)據(jù)進(jìn)行比對(注:ui 容器還支持 LDAP 的認(rèn)證方式,在那種情況下 ui 會試圖和外部 LDAP 服務(wù)進(jìn)行通信并校驗(yàn)用戶名/密碼)。比對成功,ui 容器會返回表示成功的狀態(tài)碼, 并用密鑰生成 token,放在響應(yīng)體中返回給 Docker 客戶端。這個(gè)過程中組件間的交互過程如下圖所示:

至此,一次 docker login 成功地完成了,Docker 客戶端會把步驟(c)中編碼后的用戶名密碼保存在本地的隱藏文件中。

2) docker push

用戶登錄成功后用 docker push 命令向 Harbor 推送一個(gè) Docker 鏡像:docker push registry.youdomainname.com/library/hello-world

(a) 首先,docker 客戶端會重復(fù) login 的過程,首先發(fā)送請求到 registry,之后得到 token 服務(wù)的地址;

(b) 之后,Docker 客戶端在訪問ui容器上的token服務(wù)時(shí)會提供額外信息,指明它要申請一個(gè)對imagelibrary/hello-world 進(jìn)行 push 操作的 token;

(c) token 服務(wù)在經(jīng)過 Nginx 轉(zhuǎn)發(fā)得到這個(gè)請求后,會訪問數(shù)據(jù)庫核實(shí)當(dāng)前用戶是否有權(quán)限對該 image進(jìn)行 push。如果有權(quán)限,它會把 image 的信息以及 push 動(dòng)作進(jìn)行編碼,并用私鑰簽名,生成 token返回給 Docker 客戶端;

(d) 得到 token 之后 Docker 客戶端會把 token 放在請求頭部,向 registry 發(fā)出請求,試圖開始推送image。 Registry 收到請求后會用公鑰解碼 token 并進(jìn)行核對,一切成功后,image 的傳輸就開始了。我們省去 proxy 轉(zhuǎn)發(fā)的步驟,下圖描述了這個(gè)過程中各組件的通信過程 :

Harbor 單機(jī)安裝調(diào)試步驟

此次示范以 CentOS 7.2.1511 x86_64 為例:

    [root@registry ~]# yum install https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.11.2-
    
    1.el7.centos.noarch.rpm
    [root@registry ~]# yum install https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.11.2-
    
    1.el7.centos.x86_64.rpm
    [root@registry ~]# systemctl enable docker
    [root@registry ~]# systemctl start docker
    [root@registry ~]# yum install git
    [root@registry ~]# git clone https://github.com/vmware/harbor
    [root@registry ~]# cd harbor/
    [root@registry harbor]# cd Deploy/
    [root@registry Deploy]# vi harbor.cfg

修改的重點(diǎn)內(nèi)容如下:

  hostname = registry.yourdomainname.comui_url_protocol = https
    
    email_server = smtp.yourmailserver.comemail_server_port = 25
    email_username = registry_admin@yourdomainname.comemail_password = yourpassword
    email_from = registry_admin@yourdomainname.comemail_ssl = false
    
    harbor_admin_password = myharborpasswordauth_mode = db_auth
    db_password = yoursqlpasswordself_registration = off
    customize_crt = off

修改完成

假設(shè)已經(jīng)準(zhǔn)備好站點(diǎn)的數(shù)字證書文件 registry.yourdomainname.com.crt 和registry.yourdomainname.com.key,則可以配置 https 的訪問模式:

[root@registry Deploy]# cd config/nginx/
[root@registry nginx]# ls cert/
registry.yourdomainname.com.crt registry.yourdomainname.com.key
[root@registry nginx]# mv nginx.conf nginx.conf.bak
[root@registry nginx]# cp nginx.https.conf nginx.conf
[root@registry nginx]# vi nginx.conf

修改內(nèi)容如下:


修改內(nèi)容結(jié)束

安裝 docker-compose 命令:


添加 harbor 的啟停腳本:

添加 harbor 為 systemd 服務(wù):

管理 Harbor 的生命周期:

關(guān)于數(shù)字證書,上面的描述適用于向第三方根證書頒發(fā)機(jī)構(gòu)申請得到的數(shù)字證書文件,如果是自簽名數(shù)字證書,可參考 Harbor 官方文檔:https://github.com/vmware/har...

訪問 Harbor:

網(wǎng)頁訪問方式 https://registry.yourdomainna...

Linux Docker 客戶端如需要訪問這個(gè)倉庫服務(wù)器,如果數(shù)字證書的根證書頒發(fā)機(jī)構(gòu)不在系統(tǒng)列表里,則需要手動(dòng)添加信任關(guān)系(需要將證書文件 registry.yourdomainname.com.crt 拷貝至指定目錄),然后更新證書緩存:

cp registry.yourdomainname.com.crt /usr/local/share/ca-certificates/update-ca-certificates

以上兩條命令適用于 Ubuntu 系列

cp registry.yourdomainname.com.crt/etc/pki/ca-trust/source/anchors/update-ca-trust

以上兩條命令適用于 RHEL 或 CentOS 系列

登陸及 push image 過程:

[root@RancherHost01 ~]# docker login
registry.yourdomainname.com
Username: admin
Password:
Login Succeeded
[root@RancherHost01 ~]# 

登陸 Web 端即可看見已經(jīng)上傳的 image 了:

新增用戶界面:

Harbor 作為 Mirror Registry

Mirror 是 Docker Registry 的一種特殊類型,它起到了類似代理服務(wù)器的緩存角色,在用戶和Docker Hub 之間做 Image 的緩存。

其基本工作原理是,當(dāng)用戶 pull 一個(gè)鏡像時(shí),若鏡像在 mirror 服務(wù)器存在,則直接從 mirror 服務(wù)器拉取,否則若不存在該鏡像,則由 mirror server 自動(dòng)代理往 dockerhub(可配置)中拉取鏡像,并緩存到 mirror 服務(wù)器中,當(dāng)客戶再次拉取這個(gè)鏡像時(shí),直接從 mirror server 中拉取,不需要再次從docker hub 中拉取。

Harbor 目前不支持 pull cache 功能,已提交 Github issue #120。 https://github.com/vmware/har...

不過我們只需要手動(dòng)修改下配置即可完成,具體配置可查看官方 Registry as a pull through cache.
https://github.com/vmware/har...

我們在運(yùn)行./prepare 之前修改 config/registry/config.yml 文件,追加以下配置

:proxy:remoteurl: https://registry-1.docker.io

如果需要訪問私有倉庫,需要填寫 Docker Hub 的用戶名和密碼

:proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]

然后重新啟動(dòng) Harbor 服務(wù):(注意不要執(zhí)行./prepare)

docker-compose stop 
docker-compose rm -f 
docker-compose up -d

除了設(shè)置 Harbor(或者 registry),還需要配置本地 docker 服務(wù),指定--registry-mirror 參數(shù),修改docker 配置文件

Ubuntu:/etc/default/docker

DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://registry.yourdomainname.com

DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://registry.yourdomainname.com --insecure-registry 

registry.yourdomainname.com"

或者

RHEL/CentOS:/usr/lib/systemd/system/docker.service):
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --registry-mirror=https://registry.yourdomainname.com

注意:修改了 docker 配置文件,必須重啟 docker 服務(wù)才能生效。

Harbor 由于引進(jìn)了認(rèn)證功能,因此 push 操作時(shí),必須保證 project 存在,比如 push
krystism/ffmpeg,必須保證 Harbor 創(chuàng)建了 krystism project,否則會失敗。為了能夠正常 push/pulldockerhub 的官方鏡像,務(wù)必創(chuàng)建 library project,如圖:

(1)假設(shè)本地不存在 python 鏡像:

我們第一次 pull python 后,Harbor 發(fā)現(xiàn)不存在該鏡像,于是自己作為代理往 Docker Hub 里拉取,拉取后保存到本地,可以通過 Web UI 查看??蛻舳嗽俅卫?python 鏡像時(shí),由于 Harbor 已經(jīng)存在該鏡像,因此不需要再往 Docker Hub 拉取,速度大幅度提高!

注意,對于 Mirror Registry 模式,雖然可以 pull cache 了,但是 push 功能卻不被支持了:https://github.com/vmware/har...

(2)與 Rancher 的整合:

1)Add Harbor deploy stack and 5 services in Rancher:(在 Rancher 系統(tǒng)里添加包含 5 個(gè) services 的stack)

2)Add Registry server in Rancher:(在 Rancher 系統(tǒng)里添加 Registry 服務(wù)器,供 Rancher Agent Hosts調(diào)用)

3)Build a Catalog entry in Rancher:(為 Harbor 創(chuàng)建一個(gè) Rancher 專有的應(yīng)用模板項(xiàng),實(shí)現(xiàn)一鍵部署,使安裝調(diào)試復(fù)雜的 Harbor 產(chǎn)品簡單化、并實(shí)現(xiàn)彈性伸縮及高可用等特性)

(3)對接 LDAP 認(rèn)證:

Harbor 支持兩種認(rèn)證方式,默認(rèn)為本地存儲,即賬號信息存儲在 mysql 下,上文已經(jīng)具體介紹。接下來介紹另外一種認(rèn)證方式 LDAP,只需要修改配置文件即可。需要提供 ldap url 以及 ldap basedn 參數(shù),并且設(shè)置 auth_mode 為 ldap_auth。

快速部署 LDAP 服務(wù):

為了測試方便,我們使用 Docker 啟動(dòng)一個(gè) LDAP 服務(wù)器,啟動(dòng)腳本如下:

!/bin/bash
NAME=ldap_server
docker rm -f $NAME 2>/dev/null
docker run --env LDAP_ORGANISATION="Unitedstack Inc." --env LDAP_DOMAIN="ustack.com" 
--env LDAP_ADMIN_PASSWORD="admin_password" 
-v pwd/containers/openldap/data:/var/lib/ldap 
-v pwd/containers/openldap/slapd.d:/etc/ldap/slapd.d --detach --name $NAME osixia/openldap:1.1.2

創(chuàng)建新用戶,首先需要定義 ldif 文件,

new_user.ldif:dn: uid=test,dc=ustack,dc=com
uid: test
cn: test
sn: 3
objectClass: topobjectClass: posixAccountobjectClass: inetOrgPersonloginShell: /bin/bashhomeDirectory: 

/home/testuidNumber: 1001gidNumber: 1001userPassword: 1q2w3e4rmail: test@example.comgecos: test

通過以下腳本創(chuàng)建新用戶,其中 ldap_server 為 LDAP 服務(wù)容器名稱。

docker cp new_user.ldif ldap_server:/
docker exec ldap_server ldapadd -x 
-D "cn=admin,dc=ustack,dc=com" 
-w admin_password -f /new_user.ldif -ZZ

查看用戶是否創(chuàng)建成功:

docker exec ldap_server ldapsearch -x -h localhost 
-b dc=ustack,dc=com -D "cn=admin,dc=ustack,dc=com" 
-w admin_password

檢查 test 用戶是否存在,若存在,則說明創(chuàng)建成功,否則需要使用 docker logs 查看日志。

配置 Harbor 使用 LDAP 認(rèn)證
修改 harbor.cfg 文件關(guān)于 LDAP 配置項(xiàng),如下

:auth_mode = ldap_auth
ldap_url = ldap://42.62.x.x
ldap_basedn = uid=%s,dc=ustack,dc=com

然后重新部署 Harbor:

./prepare 
docker-compose stop 
docker-compose rm -f 
docker-compose up -d

測試是否能夠使用 test 用戶登錄:

docker login -u test -p 1q2w3e4r 
-e test@example.com 42.62.x.x 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27956.html

相關(guān)文章

  • 可能是最詳細(xì)部署:Docker Registry業(yè)級私有鏡像倉庫Harbor管理WEB UI

    摘要:私有倉庫是,并在中運(yùn)行。不要使用或?yàn)橹鳈C(jī)名注冊表服務(wù)需要由外部客戶端訪問或,默認(rèn)為用于訪問和令牌通知服務(wù)的協(xié)議。打開或關(guān)閉,默認(rèn)打開打開此屬性時(shí),準(zhǔn)備腳本創(chuàng)建私鑰和根證書,用于生成驗(yàn)證注冊表令牌。 上一篇文章搭建了一個(gè)具有基礎(chǔ)功能,權(quán)限認(rèn)證、TLS 的私有倉庫,但是Docker Registry 作為鏡像倉庫,連管理界面都沒有,甚至連一些運(yùn)維必備的功能都是缺失的,還有什么 Docker...

    沈儉 評論0 收藏0
  • 基于 Harbor 搭建 Docker 私有鏡像倉庫

    摘要:的每個(gè)組件都是以容器的形式構(gòu)建的,使用來對它進(jìn)行部署。登錄輸入用戶名,默認(rèn)密碼或已修改密碼登錄系統(tǒng)。 showImg(https://segmentfault.com/img/remote/1460000012261129?w=1280&h=786); 什么是 Harbor? 第一次使用這個(gè)的時(shí)候是剛進(jìn)公司處理的第一個(gè)任務(wù)的時(shí)候,發(fā)現(xiàn) Harbor 就是一個(gè)用于存儲和分發(fā) Docker...

    lvzishen 評論0 收藏0
  • Docker Registry Server 搭建,配置免費(fèi)HTTPS證書,及擁有權(quán)限認(rèn)證、TLS

    摘要:上一篇文章搭建了一個(gè)具有基礎(chǔ)功能的私有倉庫,這次來搭建一個(gè)擁有權(quán)限認(rèn)證的私有倉庫。移動(dòng)證書到目錄。身份驗(yàn)證為用戶創(chuàng)建一個(gè)帶有一個(gè)條目的密碼文件,密碼為創(chuàng)建倉庫啟動(dòng)注冊表,指示它使用證書。注冊表在端口默認(rèn)的端口上運(yùn)行。 上一篇文章搭建了一個(gè)具有基礎(chǔ)功能的私有倉庫,這次來搭建一個(gè)擁有權(quán)限認(rèn)證、TLS 的私有倉庫。 環(huán)境準(zhǔn)備 系統(tǒng):Ubuntu 17.04 x64 IP:198.13.48...

    liuchengxu 評論0 收藏0
  • 如何在Rancher Catalog中使用VMware Harbor

    摘要:這相當(dāng)于在原始安裝程序中調(diào)整文件。警告我并沒有告訴這件事,因?yàn)檫@可能會嚇到他或任何其他專家。在創(chuàng)建應(yīng)用商店條目的過程中,還有兩個(gè)問題需要解決變量需要設(shè)置為確切值,這樣用戶就可以通過它連接到該實(shí)例。 Harbor Registry是VMware公司的Docker鏡像管理產(chǎn)品。相較于其他鏡像倉庫,Harbor提供身份管理功能,安全性更高,支持單個(gè)主機(jī)上的多個(gè)registry,這些功能正是很...

    explorer_ddf 評論0 收藏0
  • 搭建Docker私有倉庫

    摘要:配置項(xiàng)數(shù)據(jù)持久化支持登錄授權(quán)驗(yàn)證測試做代理我的方式和遇到的問題作為一個(gè)容器其它方案相關(guān)鏈接官方提供了鏡像,可以方便的搭建私有倉庫,詳細(xì)文檔參考這里。支持為了使得私有倉庫安全地對外開放,需要配置支持。 摘要 這篇文章內(nèi)容包括搭建docker私有倉庫的一些配置項(xiàng)和遇到的問題及解決方案。 1.配置項(xiàng) 1.1. 數(shù)據(jù)持久化 1.2. TLS 支持 1.3. 登錄授權(quán)驗(yàn)證 1.4. docker...

    fizz 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<