使用Harbor管理鏡像(6)

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

1、Harbor簡介

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

  • 基于角色的訪問控制:用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權(quán)限凤壁。
  • 鏡像復(fù)制:鏡像可以在多個Registry實例中復(fù)制(同步)吩屹。尤其適合于負(fù)載均衡,高可用拧抖,混合云和多云的場景煤搜。
  • 圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,檢索當(dāng)前Docker鏡像倉庫唧席,管理項目和命名空間擦盾。
  • AD/LDAP支持:Harbor可以集成企業(yè)內(nèi)部已有的AD/LDAP,用于鑒權(quán)認(rèn)證管理淌哟。
  • 審計管理:所有針對鏡像倉庫的操作都可以被記錄追溯迹卢,用于審計管理。
  • 國際化:已擁有英文徒仓、中文腐碱、德文、日文和俄文的本地化版本掉弛。更多的語言會添加進來症见。
  • RESTful API RESTful API:提供給管理員對于Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
  • 部署簡單:docker-compose和離線安裝殃饿。

2谋作、安裝

Harbor的安裝支持離線和在線安裝,同時也可以通過helm在k8s集群中進行安裝壁晒,這里采用在線安裝的方式瓷们。

2.1 準(zhǔn)備
  1. 硬件
    新建一臺虛擬機业栅,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. 最終將新建的虛擬機的域名設(shè)置為:harbor.tlh.com

    2. 添加域名映射(需要訪問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. 生成證書前面請求

    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進程解析.crt文件作為CA證書帮孔,將.cert文件作為客戶端證書雷滋。

    1. 生成CA

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

      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. 下載在線安裝文件
      通過這個鏈接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ù)存儲的路徑
        data_volume: /data
      
  4. 安裝

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

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

      ./install.sh
      
    3. 可選插件

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

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

      3. Chart倉庫

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

3. 使用

  1. 瀏覽器訪問:https://harbor.tlh.com/腊敲,用戶名:admin 密碼:Harbor12345

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

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


  4. 添加用戶
    將2中添加的用戶添加到該項目的成員中没宾。

  5. 推送鏡像

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

4. Jenkins中使用

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

  2. 修改tlhhup項目的配置潮尝,將docker倉庫的地址修改為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)容合作請聯(lián)系作者
  • 序言:七十年代末榕吼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勉失,更是在濱河造成了極大的恐慌羹蚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乱凿,死亡現(xiàn)場離奇詭異顽素,居然都是意外死亡,警方通過查閱死者的電腦和手機徒蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門胁出,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人段审,你說我怎么就攤上這事全蝶。” “怎么了寺枉?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵抑淫,是天一觀的道長。 經(jīng)常有香客問我姥闪,道長始苇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任筐喳,我火速辦了婚禮催式,結(jié)果婚禮上函喉,老公的妹妹穿的比我還像新娘。我一直安慰自己荣月,他們只是感情好管呵,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哺窄,像睡著了一般撇寞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堂氯,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天蔑担,我揣著相機與錄音,去河邊找鬼咽白。 笑死啤握,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晶框。 我是一名探鬼主播排抬,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼授段!你這毒婦竟也來了蹲蒲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤侵贵,失蹤者是張志新(化名)和其女友劉穎届搁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窍育,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡卡睦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了漱抓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片表锻。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乞娄,靈堂內(nèi)的尸體忽然破棺而出瞬逊,到底是詐尸還是另有隱情,我是刑警寧澤仪或,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布确镊,位于F島的核電站,受9級特大地震影響溶其,放射性物質(zhì)發(fā)生泄漏骚腥。R本人自食惡果不足惜敦间,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一瓶逃、第九天 我趴在偏房一處隱蔽的房頂上張望束铭。 院中可真熱鬧,春花似錦厢绝、人聲如沸契沫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懈万。三九已至,卻和暖如春靶病,著一層夾襖步出監(jiān)牢的瞬間会通,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工娄周, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涕侈,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓煤辨,卻偏偏與公主長得像裳涛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子众辨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353