国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

simon_chen / 1693人閱讀

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

前言

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

Harbor 簡介

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

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

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

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

國際化:基于英文與中文語言進行了本地化。可以增加更多的語言支持。

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

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

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

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

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

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

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

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

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

(2)實現(xiàn)

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

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

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

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

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

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

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

(3)工作原理

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

1) docker login

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

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

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

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

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

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

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

2) docker push

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

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

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

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

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

Harbor 單機安裝調(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

修改的重點內(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)備好站點的數(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ā)機構(gòu)申請得到的數(shù)字證書文件,如果是自簽名數(shù)字證書,可參考 Harbor 官方文檔:https://github.com/vmware/har...

訪問 Harbor:

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

Linux Docker 客戶端如需要訪問這個倉庫服務(wù)器,如果數(shù)字證書的根證書頒發(fā)機構(gòu)不在系統(tǒ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 一個鏡像時,若鏡像在 mirror 服務(wù)器存在,則直接從 mirror 服務(wù)器拉取,否則若不存在該鏡像,則由 mirror server 自動代理往 dockerhub(可配置)中拉取鏡像,并緩存到 mirror 服務(wù)器中,當(dāng)客戶再次拉取這個鏡像時,直接從 mirror server 中拉取,不需要再次從docker hub 中拉取。

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

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

我們在運行./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]

然后重新啟動 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 由于引進了認(rèn)證功能,因此 push 操作時,必須保證 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 鏡像時,由于 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 個 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)建一個 Rancher 專有的應(yīng)用模板項,實現(xiàn)一鍵部署,使安裝調(diào)試復(fù)雜的 Harbor 產(chǎn)品簡單化、并實現(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 啟動一個 LDAP 服務(wù)器,啟動腳本如下:

!/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 配置項,如下

: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://specialneedsforspecialkids.com/yun/27956.html

相關(guān)文章

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

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

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

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

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

    摘要:上一篇文章搭建了一個具有基礎(chǔ)功能的私有倉庫,這次來搭建一個擁有權(quán)限認(rèn)證的私有倉庫。移動證書到目錄。身份驗證為用戶創(chuàng)建一個帶有一個條目的密碼文件,密碼為創(chuàng)建倉庫啟動注冊表,指示它使用證書。注冊表在端口默認(rèn)的端口上運行。 上一篇文章搭建了一個具有基礎(chǔ)功能的私有倉庫,這次來搭建一個擁有權(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)整文件。警告我并沒有告訴這件事,因為這可能會嚇到他或任何其他專家。在創(chuàng)建應(yīng)用商店條目的過程中,還有兩個問題需要解決變量需要設(shè)置為確切值,這樣用戶就可以通過它連接到該實例。 Harbor Registry是VMware公司的Docker鏡像管理產(chǎn)品。相較于其他鏡像倉庫,Harbor提供身份管理功能,安全性更高,支持單個主機上的多個registry,這些功能正是很...

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

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

    fizz 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<