打造獨立的Image Registry: Harbor

更新於 2024/10/21閱讀時間約 14 分鐘

今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。

通常在容器環境下,所有服務都是基於容器映像(container image)來建構並提供。為了更方便地管理整個環境的映像,並提供訪問。一般來說會建立一個專門用來存放容器映像的位置,也就是本文所使用的Harbor來與大家分享。本文使用常見的Harbor來與大家分享。

raw-image

本文將會分成以下幾點進行說明:

  1. Harbor基本說明
  2. Harbor建置
  3. 結論

1. Harbor基本說明

Harbor是一個從CNCF畢業的專案。透過Policies與RBAC來確保使用的安全性。也可以與弱掃工具整合來保證映像的安全性,更可以對映像進行簽章確保信任來實現合規、效能、操作性,有效地協助容器環境的管理工作順利進行。

Harbor有以下幾個特色:

raw-image
  • 安全性:包含使用者身份驗證、RBAC、內容簽名和加密,確保傳輸和儲存是安全的。例如整合Cosign/Notation來進行內容簽名(Content Trust)。
  • 映像複制:可以透過image-syncer在不同的Harbor之間進行映像同步,可以實現映像的備份與故障回復,或是做DR(災難復原)Site使用。
  • Project / Namespace : 透過將映像分組可以更好的控制存取與權限。


  • Audit Log: 可以根據Project來查詢所有操作的記錄,用來確保合規性。
  • API : 使用REST API與其他系統來進行整合,實現自動化與自定義的操作。
  • UI界面:透過Web UI,使用者可以更方便的進行管理。
  • 漏洞掃描:可以在安裝的時候整合Trivy scanner,或是在安裝完畢後再連接到其他的scanner都可以。
  • 儲存管理:一般會直接連接Object storage較為方便(Ex. MinIO),但不限於Object Storage

2. Harbor建置

#-------------------------------------------------------
# S2-1. 安裝Docker環境
#-------------------------------------------------------
[harbor]# yum install yum-utils
[harbor]# yum config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[harbor]# yum clean all ; yum repolist

#### RHEL8先移除podman
[harbor]# yum remove podman buildah
[harbor]# yum install containerd.io-1.6.15-3.1.el8.x86_64.rpm \
docker-ce-20.10.8-3.el8.x86_64.rpm \
docker-ce-cli-20.10.22-3.el8.x86_64.rpm \

[harbor]# systemctl enable --now docker
raw-image
#-------------------------------------------------
# S2-2. 安裝docker-compose
#-------------------------------------------------
[harbor]# curl -SL https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
[harobr]# mv docker-compose /usr/local/bin/
[harbor]# chmod +x docker-compose
[harbor]# docker-compose version
#-------------------------------------------------
# S2-3. 建立憑證
#-------------------------------------------------
[harbor]# openssl genrsa -out ca.key 4096
[harbor]# openssl req -x509 -new -nodes -sha512 -days 3650 -key ca.key -out ca.crt
...
Common Name (eg, your name or your servers hostname) []:harbor.test.example.poc.
...

[harbor]# openssl genrsa -out harbor.test.example.poc.key 4096
[harbor# openssl req -sha512 -new -key harbor.test.example.poc.key -out harbor.test.example.poc.csr
...
Common Name (eg, your name or your servers hostname) []:harbor.test.example.poc
...

[harbor]# vim v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=habor.test.example.poc
DNS.2=harbor.test.example.poc
DNS.3=harbor.test.example.poc

[harbor]# openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.test.example.poc.csr \
-out harbor.test.example.poc.crt
#--------------------------------------------
# s2-4. 套用憑證,啟動docker
#--------------------------------------------
[harbor]# mkdir -p /data/cert/
[harbor]# cp -rp harbor.test.example.poc.crt harbor.test.example.poc.key /data/cert/
[harbor]# ls -al /data/cert/
harbor.test.example.poc.crt
harbor.test.example.poc.key

### convert crt to cert for docker login
[harbor]# cd /root/docker/certs/
[harbor]# openssl x509 -inform PEM -in harbor.test.example.poc.crt -out harbor.test.example.poc.cert

### copy to docker certificate folder
[harbor]# mkdir -p /etc/docker/certs.d/harbor.test.example.poc
[harbor]# cp harbor.test.example.poc.cert /etc/docker/certs.d/harbor.test.example.poc
[harbor]# cp harbor.test.example.poc.key /etc/docker/certs.d/harbor.test.example.poc
[harbor]# cp ca.crt /etc/docker/certs.d/harbor.test.example.poc
[harbor]# systemctl restart docker
#------------------------------------------
# S2-5. Download & Config
#------------------------------------------
[harbor]# wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
[harbor]# tar zxvf harbor-offline-installer-v2.8.2.tgz
[harbor]# cd /data/harbor/
[harbor]# cp harbor.yml.tmpl harbor.yml
[harbor]# vim harbor.yml
hostname: harbor.test.example.poc #指定要部署harbor的位置
external_url: https://harbor.test.example.poc
http: #Production環境不要用
port: 80
https:
port: 443
certificate: /etc/docker/certs.d/harbor.test.example.poc:8443/test.example.poc.cert #SSL certificate
private_key: /etc/docker/certs.d/harbor.test.example.poc:8443/test.example.poc.key #SSL key
harbor_admin_password: Harbor12345 #設定第一次進入harbor的密碼(預設admin/Harbor12345)
#------------------------------------
# S2-6. Install
#------------------------------------
[harbor]# ./install.sh --with-notary --with-trivy
=> 確認都是Healty狀態

[harbor]# docker-compose ps

[harbor]# docker login harbor.test.example.poc
Username: admin
Password: Harbor12345
確認全部的狀態

確認全部的狀態

#---------------------------------------
# S2-7. 讓其他主機也可以正常登入使用
#---------------------------------------
[Client]# scp -rp /data/harbor/cert/ca.crt root@192.168.100.11:/root/
[Cleint]# cp /root/ca.crt /etc/pki/ca-trust/source/anchors/
[Client]# update-ca-trust

[Client]# docker login harbor.test.example.poc:8443
Username: admin
Password:
Login Succeeded!
[Client]# docker images
[Client]# podman pull harbor.test.example.poc/test/redis-photon:v2.4.3

※ browser
https://harbor.test.example.poc:8443
WebUI

WebUI

上傳Image成功

上傳Image成功

### 確認節點CA憑證
### Podman檢查CA的路徑與docker不同 (/etc/containers/certs.d/)

[worker01]# mkdir /etc/containers/certs.d/harbor.test.example.poc/
[harbor]# scp -rp ca.crt root@worker01:/etc/containers/certs.d/harbor.test.example.poc/
[worker01]# podman pull harbor.test.example.poc/example/nginx:latest


raw-image

3. 結論

以上說明Harbor的基本安裝流程,除了獨立安裝之外,也可以用容器的型式存在於K8S內運作。安裝時所整合的Trivy也是另一個專門的安全掃描專案,不只是針對容器映像,也支援檔案系統(filesystem)、VM映像(VM image)、遠端的Git、K8S、AWS等標的。並且還可以發現像是OS軟體套件與相依性、軟體授權、敏感資料等資訊。

基本上現在建置Harbor時,同時也會整合Trivy,如此一來,安裝完的Harbor便具有基礎的合規掃描工具,接下來如同上述,可以另外再整合其他Scanner亦可。

未來有機會的話,再繼續分享Harbor的進階應用,例如升級、離線更新、簽名等功能。


※ References:

  • https://github.com/aquasecurity/trivy
  • https://goharbor.io/docs/main/
avatar-img
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
本篇將說明關於StatefulSet的基本概念
所謂daemonset,簡單來說就是在每個節點上部署一個Pod副本。當今天有新的主機節點加入時,就自動再上面部署一個Pod副本。移除節點時,也會自動將Pod副本移除。
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
因為想要使用FQDN的方式連接到Kubernetes cluster內部的應用服務,加上早已使用Linux Bind為測試環境的主要DNS
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
本篇將說明關於StatefulSet的基本概念
所謂daemonset,簡單來說就是在每個節點上部署一個Pod副本。當今天有新的主機節點加入時,就自動再上面部署一個Pod副本。移除節點時,也會自動將Pod副本移除。
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
因為想要使用FQDN的方式連接到Kubernetes cluster內部的應用服務,加上早已使用Linux Bind為測試環境的主要DNS
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
Thumbnail
現今社會中,「Beta 男」正逐漸成為一股新興趨勢。他們常被描述為缺乏主動性、依賴他人,很難展現自我價值。然而,這種印象並非一成不變。本文將探討 Beta 男的特質根源,並提供實際的建議,幫助您重塑個人獨立性和自我價值觀,打破框框,邁向更出色的人生。 人們常常將 Beta 男標籤化,認為他們軟弱無
Thumbnail
這是一本教你增快閱讀速度、打造自己讀書系統的一本書。   作家Zen大一直是我的偶像。   當年和Q分手後, 我想說要去進修, 提升一下自己, 上網搜尋一下, 看到Zen大課程介紹挺吸引人的, 價錢也很便宜, 就報名上課了, 一上不得了, 被他的課程的知識密度震懾到, 想說
Thumbnail
Storybook 是一個用來透過獨立元件快速開發 UI 介面的工具,以往要開發元件時,我們可能需要建立一個全新的頁面才能進行開發,但這樣的開發方式可能會有一個狀況:沒有辦法事先開發或是預覽流程中不存在的元件。 透過 Storybook 我們在開發元件時,不需要重新建立複雜的頁面結構⋯⋯
Thumbnail
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
Thumbnail
提到「做筆記」你會想到什麼?如果說知識的消化可以分為「輸入、處理和輸出」三個階段,那麼你又認為筆記扮演的任務角色會落到哪一個階段?做筆記只是「輸入」成效不高,想要「輸出」又耗時費力。要如何解決這個問題呢?卡片盒筆記法,就是目前最有效的解方,特別是在數位工具智能化之後,更顯得這套方法的強大。
Thumbnail
《怡辰老師的高效時間管理課》的作者怡辰老師,不但是位國小教師、講師、作家、葡萄園小編,還是三個孩子的媽。每天準備家人的三餐,每年讀200本以上的書並寫書評。你以為她醒來時都在工作,生活中都沒有休閒嗎?不不不,不管是玩的、吃的、露營、運動,甚至該追的劇,她一樣都沒有少,到底是怎麼做到的?在《怡辰老師的
Thumbnail
當天加上我有四組客人。其他都是兩個兩個的(大概或許都是情侶吧?)來做戒指,只有我是一個人,而且是做手環。 搞特殊捏我。
★華特.迪士尼曾說:「迪士尼樂園永遠沒有完成的一天。」 ●創造客源的絕對法則不在於「技巧」,而是透過製作最根本的商業模式才能夠成立。 ●只有「理念與事業價值」、「價值行銷法則」和「打造熱心工作的人才」三項條件共存,「價值行銷法則」才得以成立。 ●吸引顧客的法則關鍵的7個步驟: 7.HOW/怎麼做?
Thumbnail
2022年的現在你的投資還好嗎?這次替大家帶來「股神思維」的導讀希望你能夠透過這次導讀的機會理解到如何在投資的路上,避免自己走上風險之路,讓自己的投資思維能夠更穩健,本書可以算是價值投資的入門,我會摘要書中關鍵知識點給你,讓你對於價值投資能夠有所入門。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
Thumbnail
現今社會中,「Beta 男」正逐漸成為一股新興趨勢。他們常被描述為缺乏主動性、依賴他人,很難展現自我價值。然而,這種印象並非一成不變。本文將探討 Beta 男的特質根源,並提供實際的建議,幫助您重塑個人獨立性和自我價值觀,打破框框,邁向更出色的人生。 人們常常將 Beta 男標籤化,認為他們軟弱無
Thumbnail
這是一本教你增快閱讀速度、打造自己讀書系統的一本書。   作家Zen大一直是我的偶像。   當年和Q分手後, 我想說要去進修, 提升一下自己, 上網搜尋一下, 看到Zen大課程介紹挺吸引人的, 價錢也很便宜, 就報名上課了, 一上不得了, 被他的課程的知識密度震懾到, 想說
Thumbnail
Storybook 是一個用來透過獨立元件快速開發 UI 介面的工具,以往要開發元件時,我們可能需要建立一個全新的頁面才能進行開發,但這樣的開發方式可能會有一個狀況:沒有辦法事先開發或是預覽流程中不存在的元件。 透過 Storybook 我們在開發元件時,不需要重新建立複雜的頁面結構⋯⋯
Thumbnail
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
Thumbnail
提到「做筆記」你會想到什麼?如果說知識的消化可以分為「輸入、處理和輸出」三個階段,那麼你又認為筆記扮演的任務角色會落到哪一個階段?做筆記只是「輸入」成效不高,想要「輸出」又耗時費力。要如何解決這個問題呢?卡片盒筆記法,就是目前最有效的解方,特別是在數位工具智能化之後,更顯得這套方法的強大。
Thumbnail
《怡辰老師的高效時間管理課》的作者怡辰老師,不但是位國小教師、講師、作家、葡萄園小編,還是三個孩子的媽。每天準備家人的三餐,每年讀200本以上的書並寫書評。你以為她醒來時都在工作,生活中都沒有休閒嗎?不不不,不管是玩的、吃的、露營、運動,甚至該追的劇,她一樣都沒有少,到底是怎麼做到的?在《怡辰老師的
Thumbnail
當天加上我有四組客人。其他都是兩個兩個的(大概或許都是情侶吧?)來做戒指,只有我是一個人,而且是做手環。 搞特殊捏我。
★華特.迪士尼曾說:「迪士尼樂園永遠沒有完成的一天。」 ●創造客源的絕對法則不在於「技巧」,而是透過製作最根本的商業模式才能夠成立。 ●只有「理念與事業價值」、「價值行銷法則」和「打造熱心工作的人才」三項條件共存,「價值行銷法則」才得以成立。 ●吸引顧客的法則關鍵的7個步驟: 7.HOW/怎麼做?
Thumbnail
2022年的現在你的投資還好嗎?這次替大家帶來「股神思維」的導讀希望你能夠透過這次導讀的機會理解到如何在投資的路上,避免自己走上風險之路,讓自己的投資思維能夠更穩健,本書可以算是價值投資的入門,我會摘要書中關鍵知識點給你,讓你對於價值投資能夠有所入門。