iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
Cloud Native

從 Docker 到 K8s:我的 30 天雲原生筆記系列 第 21

Day 21: Harbor Registry:建立我們自己的私有映像檔倉庫

  • 分享至 

  • xImage
  •  

哈囉大家好~歡迎來到 CI/CD 自動化的第四天!

昨天的 Day 20,我們終於把 .gitlab-ci.yml 寫起來了,讓整個 CI Pipeline 可以自動幫我們測試、建置程式碼,甚至透過 Kaniko 把程式碼打包成 Docker Image。

聽起來超完美對吧?不過問題馬上來了:這個建好的 Image,要放哪裡去呢?

為什麼要自己建倉庫?

很多人第一個想到的就是 Docker Hub,畢竟它方便又公開。但在公司環境裡,這選項基本上不太可行,理由很簡單:

  1. 安全性:公司的商業邏輯如果公開放上去,那根本是自找麻煩。
  2. 存取控制:我們需要很清楚地知道誰可以 push,誰可以 pull。
  3. 效能與穩定性:如果所有東西都要繞到外部再拉回來,內網 CI/CD + K8s 叢集會慢到哭。

所以,答案呼之欲出 —— 我們要有一個 屬於自己的私有倉庫。這時候,CNCF 的畢業專案 Harbor 就登場啦!

Part 1:Harbor 到底有多厲害?

Harbor 不是單純的「自架版 Docker Hub」,它根本是 企業級武器庫。除了存放映像檔,它還有這些超實用的功能:

  • RBAC 權限管理:細緻控管誰能幹嘛。
  • 漏洞掃描 (Trivy):自動幫你掃出有沒有安全漏洞。
  • 映像檔簽章 (Notary):保證下載下來的東西沒被動過手腳。
  • 專案隔離:比 Docker Hub repo 還強的隔離機制。
  • 跨倉庫複製:一鍵把 Image 從測試環境複製到生產環境。

所以說,Harbor 根本就是為了「公司級使用」而設計的。

Part 2:實戰 – 在 K8s 部署 Harbor

最推薦的方式就是用 Helm Chart 來安裝。

步驟一:準備設定檔 harbor-values.yaml

簡單版長這樣:

expose:
  type: ingress
  ingress:
    hostname: harbor.example.com

externalURL: https://harbor.example.com

adminPassword: "NotSoSecretPassword"

persistence:
  enabled: true

trivy:
  enabled: true

記得先搞定 DNS,讓 harbor.example.com 指到你的 Ingress Controller。

步驟二:安裝 Harbor

helm repo add harbor https://helm.goharbor.io
helm repo update

helm install my-harbor harbor/harbor \
  -n harbor-system \
  --create-namespace \
  -f harbor-values.yaml

這個過程大概 5~10 分鐘,因為 Harbor 套件本身蠻大一包。

Part 3:第一次使用 Harbor

部署完成後,馬上來試試看!

  1. 瀏覽器打開 https://harbor.example.com
  2. 用 admin + 剛剛設的密碼登入
  3. 建立一個新 Project,像是:
    • Project Name: ota-project
    • Access Level: Private

之後你就能用 harbor.example.com/ota-project 當作專屬的倉庫路徑!

Part 4:Harbor 在 CI/CD 的角色

簡單說,流程就是:

  1. 開發者 push 程式碼
  2. GitLab Runner 觸發 Kaniko 打包成 Docker Image
  3. Image 推送到 Harbor
  4. K8s 叢集從 Harbor 拉取 Image,跑起來!

結論

從今天開始,我們的 CI/CD pipeline 就有了一個 專屬的倉庫,安全又好用!

明天,我們就要把 .gitlab-ci.yml 再升級 —— 把昨天 build 出來的 Docker Image,正式推送到 Harbor 倉庫中。


上一篇
Day 20: 撰寫 .gitlab-ci.yml:打造第一條 Pipeline
系列文
從 Docker 到 K8s:我的 30 天雲原生筆記21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言