引言
在 Kubernetes 環境中,容器鏡像的存儲與管理至關重要。企業級鏡像倉庫(如 Harbor)為團隊提供了安全、穩定、可擴展的鏡像管理解決方案。
一、Harbor 安裝與配置
Harbor 是由 VMware 開源的企業級云原生鏡像倉庫,它不僅支持鏡像的存儲和管理,還提供了鏡像安全掃描、訪問控制和鏡像復制等高級功能。
1.使用 Helm 安裝 Harbor
Helm 是 Kubernetes 的包管理工具,可以快速部署復雜應用:
# 添加 Harbor Helm 倉庫
helm repo add harbor https://helm.goharbor.io
# 更新 Helm 倉庫
helm repo update
# 創建配置文件 harbor-values.yaml(可選,用于自定義配置)
# 安裝 Harbor
helm install harbor harbor/harbor \--namespace harbor \--create-namespace \--set expose.type=nodePort \--set externalURL=https://harbor.example.com
2.配置 Harbor
安裝完成后,通過以下步驟完成 Harbor 的初始配置:
訪問 Harbor Web 界面(默認地址:https://harbor.example.com 或 http://<節點IP>:)。
使用默認管理員賬戶登錄(用戶名:admin,初始密碼在安裝輸出中查看)。
創建項目(Project):用于存儲相關鏡像,可設置為公開或私有。
創建用于 CI/CD 的專用賬戶,并分配適當權限。
配置鏡像掃描策略(可選)。
二、Harbor 鏡像倉庫 操作示例
場景:基于 GitLab CI 與 Harbor 集成,實現自動構建鏡像并推送至私有倉庫。
my-project/
├── frontend/
│ ├── Dockerfile # 前端鏡像構建文件
│ └── src/ # 前端源碼
├── backend/
│ ├── Dockerfile # 后端鏡像構建文件
│ └── src/ # 后端源碼
├── deploy/
│ ├── k8s/ # Kubernetes 部署配置(可選 Helm Charts)
│ └── docker-compose.yml # 本地調試用 Compose 文件(可選)
└── .gitlab-ci.yml # GitLab CI 流水線定義
2.1 設置 GitLab CI 環境變量
在 GitLab 項目中配置 Harbor 的訪問憑證:
1.進入項目 Settings → CI/CD → Variables
2.添加以下變量(建議設置為 “Protected” 和 “Masked” 以增強安全性):
HARBOR_REGISTRY:Harbor 倉庫地址(例如:harbor.example.com)
HARBOR_USER:Harbor 的用戶名
HARBOR_PASSWORD:Harbor 的密碼或訪問令牌
HARBOR_PROJECT:Harbor 中的項目名稱
2.2 .gitlab-ci.yml 文件
以下為 GitLab CI 示例配置:
image: docker:20.10.16services:- docker:20.10.16-dindvariables:DOCKER_TLS_CERTDIR: "/certs"HARBOR_IMAGE: $HARBOR_REGISTRY/$HARBOR_PROJECT/myappstages:- build- pushbefore_script:- docker login -u $HARBOR_USER -p $HARBOR_PASSWORD $HARBOR_REGISTRYbuild_and_push:stage: buildscript:# 構建并推送完整SHA標簽- docker build -t $HARBOR_IMAGE:$CI_COMMIT_SHA ./app- docker push $HARBOR_IMAGE:$CI_COMMIT_SHA# 構建并推送日期標簽(可選)- docker tag $HARBOR_IMAGE:$CI_COMMIT_SHA $HARBOR_IMAGE:$(date +%Y%m%d)- docker push $HARBOR_IMAGE:$(date +%Y%m%d)rules:- if: $CI_COMMIT_BRANCH == "main"when: on_success- when: nevercache:key: ${CI_COMMIT_REF_SLUG}paths:- frontend/node_modules/- backend/.m2/repository/
關鍵說明:
docker:20.10.16-dind :
提供 Docker-in-Docker 功能,允許在 CI 容器內構建 Docker 鏡像。這是在 GitLab CI 中構建容器鏡像的標準方式,避免了對宿主機 Docker 守護進程的依賴。
before_script :
在執行主要任務前登錄 Harbor 倉庫,確保后續的鏡像推送操作有足夠的權限。這是一個預處理步驟,適用于所有任務。
$CI_COMMIT_SHA :
GitLab CI 內置變量,使用完整的提交哈希值作為鏡像標簽,確保每個鏡像版本與源代碼提交一一對應,提供完整的可追溯性。配置中還額外使用了日期標簽 $(date +%Y%m%d) 便于按日期追蹤版本。
rules 條件 :
使用現代的 rules 語法(而非舊的 only 語法)限制僅在 main 分支上觸發構建。
三 、Harbor 基本操作
3.1 手動推送鏡像到 Harbor
除了自動化流程外,手動推送鏡像常用在調試或緊急情況下:
1.登錄 Harbor
docker login harbor.example.com
系統會提示輸入用戶名和密碼。
2.構建鏡像
docker build -t harbor.example.com/myproject/myapp:v1.0 .
3.推送鏡像
docker push harbor.example.com/myproject/myapp:v1.0
3.2 Harbor高級功能應用
Harbor 不僅是一個簡單的鏡像倉庫,還提供了許多企業級功能:
鏡像漏洞掃描:自動檢測鏡像中的安全漏洞
鏡像簽名:確保鏡像完整性和來源可信
鏡像復制:支持在不同 Harbor 實例間同步鏡像
項目配額:限制項目存儲空間,防止資源濫用
RBAC 權限控制:細粒度的訪問控制
四、總結
4.1 重點總結
本文通過部署 Harbor 并與 GitLab CI 集成,完成了容器鏡像的自動構建與推送,建立了私有鏡像倉庫。主要包括:
使用 Helm 部署 Harbor,并配置項目與用戶;
配置 GitLab CI 流水線,完成鏡像構建與推送;
結合提交哈希與日期生成鏡像標簽,提高可追溯性;
配置流水線環境變量,增強安全性;
補充手動操作流程(登錄、構建、推送)。