溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker--------Harbor registry安全認證搭建 [ Https ]

發(fā)布時間:2020-08-03 20:58:06 來源:網(wǎng)絡 閱讀:12850 作者:asd1123509133 欄目:建站服務器

1. 背景

   docker中要使用鏡像,一般會從本地、docker Hup公共倉庫和其它第三方公共倉庫中下載鏡像,一般出于安全和外網(wǎng)(墻)資源下載速率的原因考慮企業(yè)級上不會輕易使用。那么有沒有一種辦法可以存儲自己的鏡像又有安全認證的倉庫呢? ----> 企業(yè)級環(huán)境中基于Harbor搭建自己的安全認證倉庫。

        Harbor是VMware公司最近開源的企業(yè)級Docker Registry項目, 其目標是幫助用戶迅速搭建一個企業(yè)級的Docker registry服務。


2. 選擇的理由

   * 提供了管理UI

     *  基于角色的訪問控制(Role Based Access Control)

     *  AD/LDAP集成

     *  審計日志(Audit logging)

   *  原生支持中文


3. 相關介紹

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

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

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

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

    * UI:提供圖形化界面,幫助用戶管理registry上的鏡像(p_w_picpath), 并對用戶進行授權(quán)。

    * webhook:為了及時獲取registry 上p_w_picpath狀態(tài)變化的情況, 在Registry上配置webhook,把狀態(tài)變化傳遞給UI模塊。

    * token 服務:負責根據(jù)用戶權(quán)限給每個docker push/pull命令簽發(fā)token. Docker 客戶端向Registry服務發(fā)起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向Registry進行請求。

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

 * Log collector:為了幫助監(jiān)控Harbor運行,負責收集其他組件的log,供日后進行分析。

各個組件之間的關系如下圖所示:

Docker--------Harbor registry安全認證搭建 [ Https ]


    Harbor的每個組件都是以Docker容器的形式構(gòu)建的,所以使用Docker Compose來對它進行部署。

    用于部署Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml. 打開這個模板文件,會發(fā)現(xiàn)Harbor由5個容器組成:

 * proxy: 由Nginx 服務器構(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)的服務端口。


    Harbor的認證流程

Docker--------Harbor registry安全認證搭建 [ Https ]

    A、首先,請求被代理容器監(jiān)聽攔截,并跳轉(zhuǎn)到指定的認證服務器。

        B、如果認證服務器配置了權(quán)限認證,則會返回401。通知dockerclient在特定的請求中需要帶上一個合法的token。而認證的邏輯地址則指向架構(gòu)圖中的core services。

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

        D、 當C的請求發(fā)送給ngnix以后,ngnix會根據(jù)配置的認證地址將帶有用戶名和密碼的請求發(fā)送到core serivces。

        E、 coreservices獲取用戶名和密碼以后對用戶信息進行認證(自己的數(shù)據(jù)庫或者介入LDAP都可以)。成功以后,返回認證成功的信息。


    Harbor的安裝方式

   * 在線online安裝  --> 由于國內(nèi)墻和網(wǎng)速率的原因,體驗不理想

 * 離線offline安裝  --> 下載包較大 [ 包含了相關依賴鏡像 ]

 此次選擇離線包安裝


4. 環(huán)境

[root@harbor ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@harbor ~]# uname -r
3.10.0-327.36.3.el7.x86_64


5. 服務器 IP 地址

    192.168.60.150


6. 創(chuàng)建證書

 * 創(chuàng)建證書存放目錄

[root@harbor ~]# mkdir -p /data/cert


 * 切換工作路徑切證書存放目錄

[root@harbor ~]# cd /data/cert/


 * 創(chuàng)建 CA 根證書

[root@harbor cert]# openssl req  -newkey rsa:4096 \
-nodes -sha256 -keyout ca.key -x509 -days 365 \
-out ca.crt -subj "/C=CN/L=wuhan/O=lisea/CN=harbor-registry"


 * 生成一個證書簽名, 設置訪問域名為 harbor.lisea.acn

[root@harbor cert]# openssl req -newkey rsa:4096 \
-nodes -sha256 -keyout harbor.lisea.cn.key \
-out server.csr -subj "/C=CN/L=wuhan/O=lisea/CN=harbor.lisea.cn"


 * 生成主機的證書

[root@harbor cert]# openssl x509 -req -days 365 \
-in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out harbor.lisea.cn.crt


7. harbor安裝部署

 * 安裝 docker

[root@harbor ~]# yum install docker -y


 * 設置 docker 服務開機啟動

[root@harbor ~]# systemctl enable docker.service


 * 啟動 docker 服務

[root@harbor ~]# systemctl start docker.service


 * 安裝 docker-compose

[root@harbor ~]# yum install python-pip -y
[root@harbor ~]# pip install --upgrade pip
[root@harbor ~]# pip install docker-compose
[root@harbor ~]# pip install --upgrade backports.ssl_match_hostname


 * 下載 harbor 離線包 [ https://github.com/vmware/harbor ]

[root@harbor ~]# wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz

 

 * 解壓下載的harbor包 [ harbor-offline-installer-v1.1.2.tgz ]

[root@harbor ~]# tar zxf harbor-offline-installer-v1.1.2.tgz


 * 切換進harbor包目錄

[root@harbor ~]# cd harbor


 * 修改habor配置文件 [ harbor.cfg ]

hostname = harbor.lisea.cn          # 指定私有倉庫的主機名,可以是IP地址,也可以是域名   
ui_url_protocol = https             # 用戶訪問私倉時使用的協(xié)議,默認時http,配置成https
db_password = root123             # 指定mysql數(shù)據(jù)庫管理員密碼
harbor_admin_password:Harbor12345  # harbor的管理員賬戶密碼
ssl_cert = /data/cert/harbor.lisea.cn.crt    # 設置證書文件路徑
ssl_cert_key = /data/cert/harbor.lisea.cn.key  # 設置證書密鑰文件路徑


 * 通過自帶腳本一鍵安裝

[root@harbor harbor]# ./install.sh


 * 通過瀏覽器訪問管理  [ 提前設置本地 hosts文件本地重定向至harbor服務器IP  ]

    https://harbor.lisea.cn  

   用戶默認為admin

   密碼默認為Harbor12345  [可通過安裝前 harbor.cfg 配置文件修改 harbor_admin_password 指定 ]

Docker--------Harbor registry安全認證搭建 [ Https ]



8. 客戶端使用測試 [ docker 機 ] 

  * 通過 admin 賬戶登陸創(chuàng)建 test 用戶

  * 退出 admin 賬戶登陸 test 用戶

 * 創(chuàng)建 test 項目, 訪問級別選擇公開

Docker--------Harbor registry安全認證搭建 [ Https ]


 * 創(chuàng)建倉庫證書存放目錄

[root@harbor client]# mkdir /etc/docker/certs.d/harbor.lisea.cn


 * 從harbor服務器獲取證書至倉庫證書目錄

[root@harbor client]# scp root@192.168.60.150:/data/cert/ca.crt /etc/docker/certs.d/harbor.lisea.cn/ca.crt


 * 用戶登陸?。?本地需要做hosts harbor.lisea.cn 域名重定向至harbor服務器IP ]

[root@harbor client]# docker login -u test -p Test123456 harbor.lisea.cn
Login Succeeded


 * 編寫dockerfile文件

# Url https://lisea.cn
# Base imgae
# Base imgae
FROM centos

# Maintainer
MAINTAINER lisea lisea@126.com

# Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN echo "this is test nginx p_w_picpath" > /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]


 * 通過Dockerfile構(gòu)建一個新鏡像, 直接指明registry和標簽

[root@harbor client]# docker build -t harbor.lisea.cn/test/nginx:v1.0.1 .


 * 上傳鏡像至 harbor registry

[root@harbor client]# docker push harbor.lisea.cn/test/nginx:v1.0.1


 * web中查看鏡像是否上傳成功  [ 成功上傳nginx ]

Docker--------Harbor registry安全認證搭建 [ Https ]

 * 刪除本地鏡像

[root@harbor client]# docker rmi harbor.lisea.cn/test/nginx:v1.0.1


 * 從harbor中下載鏡像

[root@harbor client]# docker pull harbor.lisea.cn/test/nginx:v1.0.1



9. 總結(jié)



以需求驅(qū)動技術(shù),技術(shù)本身沒有優(yōu)略之分,只有業(yè)務之分。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI