使用Harbor管理鏡像(6)

在上一篇文章中,Jenkins在項(xiàng)目構(gòu)建完成之后,將最終生成的docker鏡像推送到阿里云上,但在有些情況下,比如公司政策或出于安全的考慮,并不希望將鏡像交由外部的網(wǎng)絡(luò),只允許在公司內(nèi)網(wǎng)中訪問(wèn),那這時(shí)可以使用Harbor來(lái)解決這個(gè)問(wèn)題。本文將通過(guò)部署Harbor來(lái)存儲(chǔ)Jenkins最終生成的docker鏡像。

1、Harbor簡(jiǎn)介

Harbor是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器,通過(guò)添加一些企業(yè)必需的功能特性,例如安全、標(biāo)識(shí)和管理等,擴(kuò)展了開源Docker Distribution。作為一個(gè)企業(yè)級(jí)私有Registry服務(wù)器,Harbor提供了更好的性能和安全。提升用戶使用Registry構(gòu)建和運(yùn)行環(huán)境傳輸鏡像的效率。Harbor支持安裝在多個(gè)Registry節(jié)點(diǎn)的鏡像資源復(fù)制,鏡像全部保存在私有Registry中, 確保數(shù)據(jù)和知識(shí)產(chǎn)權(quán)在公司內(nèi)部網(wǎng)絡(luò)中管控。另外,Harbor也提供了高級(jí)的安全特性,諸如用戶管理,訪問(wèn)控制和活動(dòng)審計(jì)等。其擁有如下的特點(diǎn):

  • 基于角色的訪問(wèn)控制:用戶與Docker鏡像倉(cāng)庫(kù)通過(guò)“項(xiàng)目”進(jìn)行組織管理,一個(gè)用戶可以對(duì)多個(gè)鏡像倉(cāng)庫(kù)在同一命名空間(project)里有不同的權(quán)限。
  • 鏡像復(fù)制:鏡像可以在多個(gè)Registry實(shí)例中復(fù)制(同步)。尤其適合于負(fù)載均衡,高可用,混合云和多云的場(chǎng)景。
  • 圖形化用戶界面:用戶可以通過(guò)瀏覽器來(lái)瀏覽,檢索當(dāng)前Docker鏡像倉(cāng)庫(kù),管理項(xiàng)目和命名空間。
  • AD/LDAP支持:Harbor可以集成企業(yè)內(nèi)部已有的AD/LDAP,用于鑒權(quán)認(rèn)證管理。
  • 審計(jì)管理:所有針對(duì)鏡像倉(cāng)庫(kù)的操作都可以被記錄追溯,用于審計(jì)管理。
  • 國(guó)際化:已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語(yǔ)言會(huì)添加進(jìn)來(lái)。
  • RESTful API RESTful API:提供給管理員對(duì)于Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
  • 部署簡(jiǎn)單:docker-compose和離線安裝。

2、安裝

Harbor的安裝支持離線和在線安裝,同時(shí)也可以通過(guò)helm在k8s集群中進(jìn)行安裝,這里采用在線安裝的方式。

2.1 準(zhǔn)備
  1. 硬件
    新建一臺(tái)虛擬機(jī),CPU 2核 內(nèi)存 4G 硬盤20+100(掛載到/data目錄)G
  2. 軟件
    docker:19.03.2
    docker-compose:1.24.1
    openssl:用于生成harbor的證書和key
  3. 網(wǎng)絡(luò)端口
    由于是在內(nèi)網(wǎng)中所以可以考慮關(guān)閉防火墻,但至少必須保證以下端口是開放的:
    443:harbor門戶和核心api使用的接口,使用https協(xié)議
    4443:連接到Harbor的Docker內(nèi)容信任服務(wù)
    80:harbor門戶和核心api使用的接口,使用http協(xié)議
  4. 域名和hosts文件
    1. 最終將新建的虛擬機(jī)的域名設(shè)置為:harbor.tlh.com

    2. 添加域名映射(需要訪問(wèn)harbor的都需要配置)

       echo "192.168.241.145    harbor.tlh.com" >> /etc/hosts
      

2.2 生成證書

  1. 創(chuàng)建文件夾,存放所有的生成文件

     mkdir ssl
     cd ssl
    
  2. 獲取證書授權(quán)

    openssl genrsa -out ca.key 4096
    # 設(shè)置證書的信息
    openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.tlh.com" \
    -key ca.key \
    -out ca.crt
    
  3. 創(chuàng)建私鑰key

    openssl genrsa -out harbor.tlh.com.key 4096
    
  4. 生成證書前面請(qǐng)求

    openssl req -sha512 -new \
     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.tlh.com" \
     -key harbor.tlh.com.key \
     -out harbor.tlh.com.csr
    
  5. 生成證書

     cat > v3.ext <<-EOF
     authorityKeyIdentifier=keyid,issuer
     basicConstraints=CA:FALSE
     keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
     extendedKeyUsage = serverAuth
     subjectAltName = @alt_names
     
     [alt_names]
     DNS.1=harbor.tlh.com
     DNS.2=harbor.tlh
     DNS.3=harbor
     EOF
    
     # 生成證書
     openssl x509 -req -sha512 -days 3650 \
     -extfile v3.ext \
     -CA ca.crt -CAkey ca.key -CAcreateserial \
     -in harbor.tlh.com.csr \
     -out harbor.tlh.com.crt
    

2.3 部署安裝

  1. 配置Harbor的證書和key

    mkdir /data/cert
    cp harbor.tlh.com.crt /data/cert/
    cp harbor.tlh.com.key /data/cert/
    
  2. 配置docker的證書、key和CA
    Docker進(jìn)程解析.crt文件作為CA證書,將.cert文件作為客戶端證書。

    1. 生成CA

      openssl x509 -inform PEM -in harbor.tlh.com.crt -out harbor.tlh.com.cert
      
    2. 復(fù)制文件:每個(gè)需要鏈接到Harbor的需要進(jìn)行如下操作

      mkdir -p /etc/docker/certs.d/harbor.tlh.com
      # 復(fù)制文件
      cp harbor.tlh.com.cert /etc/docker/certs.d/harbor.tlh.com/
      cp harbor.tlh.com.key /etc/docker/certs.d/harbor.tlh.com/
      cp ca.crt /etc/docker/certs.d/harbor.tlh.com/
      
  3. 配置Harbor

    1. 下載在線安裝文件
      通過(guò)這個(gè)鏈接https://github.com/goharbor/harbor/releases,下載需要安裝的在線安裝包,這里選擇:v1.9.3

    2. 解壓

       tar xvf harbor-online-installer-version.tgz
      
    3. 修改配置文件
      在解壓之后的文件夾中,修改harbor.yml文件,該文件中所有必填的數(shù)據(jù)都是沒有被注釋的,這里主要修改hostname和https的配置:

        hostname: harbor.tlh.com
        # https related config
        https:
           # https port for harbor, default is 443
           port: 443
           # The path of cert and key files for nginx,配置證書和私鑰的路徑
           certificate: /data/cert/harbor.tlh.com.crt
           private_key: /data/cert/harbor.tlh.com.key
        
        # The default data volume,設(shè)置數(shù)據(jù)存儲(chǔ)的路徑
        data_volume: /data
      
  4. 安裝

    1. 執(zhí)行準(zhǔn)備安裝腳本

      ./prepare
      
    2. 執(zhí)行安裝

      ./install.sh
      
    3. 可選插件

      1. Notary:內(nèi)容信任,對(duì)push到倉(cāng)庫(kù)的數(shù)據(jù)進(jìn)行簽名

      2. Clair:鏡像(appc和docker)缺陷靜態(tài)掃描工具

      3. Chart倉(cāng)庫(kù)

         # 攜帶安裝notary、Clair和chart
        ./install.sh --with-notary --with-clair --with-chartmuseum
        

3. 使用

  1. 瀏覽器訪問(wèn):https://harbor.tlh.com/,用戶名:admin 密碼:Harbor12345

  2. 創(chuàng)建用戶
    進(jìn)入主界面之后,在用戶管理中新建一個(gè)用戶名為:jenkins 密碼為:Jenkins!23的用戶,作為docker客戶端登陸harbor使用的賬戶。

  3. 創(chuàng)建項(xiàng)目
    在項(xiàng)目管理界面創(chuàng)建項(xiàng)目名為:tlhhup的項(xiàng)目,容量設(shè)置為不限制。


  4. 添加用戶
    將2中添加的用戶添加到該項(xiàng)目的成員中。

  5. 推送鏡像

    docker login reg.yourdomain.com
    docker push reg.yourdomain.com/myproject/myrepo:mytag
    

4. Jenkins中使用

  1. 新建一個(gè)id為harbor的憑證,具體方式查看上一篇文章的配置

  2. 修改tlhhup項(xiàng)目的配置,將docker倉(cāng)庫(kù)的地址修改為harbor的地址

     stage('Build Docker Image'){
         container('docker'){
             sh '''
                 mkdir context
                 cp target/tlhhup-1.0-SNAPSHOT.jar context
                 cp doc/Dockerfile context
             '''
             sh 'docker build -t harbor.tlh.com/tlhhup/jks:${BUILD_NUMBER} context'
         }
     }
     stage('Push Docker Image'){
         container('docker'){
             sh 'echo Push Docker Image'
             withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
                 sh '''
                     docker login harbor.tlh.com -u ${dockerHubUser} -p ${dockerHubPassword}
                     docker push harbor.tlh.com/tlhhup/jks:${BUILD_NUMBER}
                 '''
             }
         }
     }
    
  3. 構(gòu)建

    1. Jenkins結(jié)果


    2. harbor結(jié)果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容