K8S - Harbor 鏡像倉庫部署與 GitLab CI 集成實戰

引言

在 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 流水線,完成鏡像構建與推送;

結合提交哈希與日期生成鏡像標簽,提高可追溯性;

配置流水線環境變量,增強安全性;

補充手動操作流程(登錄、構建、推送)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80562.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年best好用的3dsmax插件和腳本

copitor 可以從一個3dsmax場景里將物體直接復制到另一個場景中 Move to surface 這個插件可以將一些物體放到一個平面上 instancer 實體器&#xff0c;舉例&#xff1a;場景中有若干獨立的光源&#xff0c;不是實體對象&#xff0c;我們可以使用instancer將他變成實體。 paste …

Python爬蟲實戰:研究nodejs aes加密

1. 引言 1.1 研究背景與意義 在當今數字化時代,Web 數據的價值日益凸顯。通過爬蟲技術獲取公開數據并進行分析,能夠為企業決策、學術研究等提供有力支持。然而,為了保護數據安全和隱私,許多網站采用了加密技術對數據進行保護,其中 AES 加密是一種常見且安全的加密算法。…

LGDRL:基于大型語言模型的深度強化學習在自動駕駛決策中的應用

《Large Language Model guided Deep Reinforcement Learning for Decision Making in Autonomous Driving》2024年12月發表&#xff0c;來自北理工的論文。 深度強化學習&#xff08;DRL&#xff09;在自動駕駛決策方面顯示出巨大的潛力。然而&#xff0c;由于DRL的學習效率低…

TDEngine 與 Grafana

目錄 實踐目錄 Grafana 參考文檔 實踐目錄 10.60.100.194&#xff1a;/home/dualven/tdengine Grafana systemctl status grafana-server http://10.60.100.194:3000/ 這個端口與mydoor的new server服務沖突 &#xff08;同時只開一個&#xff09; 參考文檔 運行監…

Edge瀏覽器打開PDF文件顯示空白(每次需要等上一會)

概述 部分pdf文件用edge瀏覽器打開顯示空白&#xff0c;需要等一會才能顯示出來&#xff0c;這很讓人難以接受&#xff0c;用其他瀏覽器和pdf閱讀器打開是正常的&#xff0c;該怎么操作解決&#xff0c;卸載重裝&#xff0c;修復&#xff0c;重置瀏覽器等都無效。 解決辦法 可…

uniapp小程序輪播圖高度自適應優化詳解

在微信小程序開發過程中&#xff0c;輪播圖組件(swiper)是常用的UI元素&#xff0c;但在實際應用中經常遇到高度不匹配導致的空白問題。本文詳細記錄了一次輪播圖高度優化的完整過程&#xff0c;特別是針對固定寬高比圖片的精確適配方案。 問題背景 在開發"零工市場&quo…

Android第三次面試總結之網絡篇補充

一、網絡模型&#xff1a;OSI 七層 vs TCP/IP 四層&#xff08;必考點&#xff09; 1. 分層模型對比 OSI 七層模型TCP/IP 四層模型核心功能Android 相關場景應用層&#xff08;7 層&#xff09;應用層定義數據格式&#xff08;HTTP/HTTPS/FTP/API&#xff09;OkHttp/Retrofit…

postgresql主從集群一鍵搭建腳本分享

腳本1&#xff1a; cat pg_ms_install.sh #!/bin/bash # 基礎環境配置&#xff08;保持不變&#xff09; setenforce 0 >/dev/null 2>&1 || true sed -i "s/SELINUXenforcing/SELINUXdisabled/" /etc/selinux/config systemctl stop firewalld >/dev/n…

LWIP的ICMP協議

ICMP協議簡介 ICMP協議是一個網絡層協議 背景&#xff1a;如果丟包了&#xff0c;IP協議并不能通知傳輸層是否丟包以及丟包的原因。因此我們需要ICMP協議來完成這樣的功能 為什么需要ICMP協議 1&#xff0c;IP 協議本身不提供差錯報告和差錯控制機制來保證數據報遞交的有效…

具身智能機器人開源陪跑計劃(機器人實戰落地)

Who&#xff1a;我們是誰&#xff1f; 主理人背景 華南理工大學碩士畢業&#xff0c;10年機器人研發經驗&#xff0c;5年“互聯網機器人”創業經歷 累計牽頭落地的機器人30多款&#xff0c;累計授權專利80余項&#xff0c;累計論文發表10余篇。 技術履歷 C#、Sql server、SPSS…

Dify 配置網絡爬蟲為知識庫數據來源 (以Jina Reader為例) - 隨筆

API獲取 進入官網獲取免費的API密鑰 官網鏈接&#xff1a;https://jina.ai/reader/ 點擊“<> API”按鈕 點擊復制文本框中的API Key&#xff1a; 進入Dify的知識庫頁面 → 選擇“同步自Web站點” → 選擇“Jina Reader” → 點擊“配置”按鈕 選擇數據來源為Jina …

基于網絡爬蟲+Spark+Hadoop等大數據和SpringBoot技術實現的的汽車行業大數據分析與可視化平臺系統(源碼+論文+PPT+部署文檔教程等)

博主介紹&#xff1a;CSDN畢設輔導第一人、全網粉絲50W,csdn特邀作者、博客專家、騰訊云社區合作講師、CSDN新星計劃導師、Java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和學生畢業項目實戰,高校老師/講師/同行前輩交流? 技術范圍…

React學習路線圖-Gemini版

前端開發學習路線圖 (針對編程新手&#xff0c;主攻 React 框架) 總原則&#xff1a;先打好地基&#xff0c;再蓋樓。 無論學習哪個框架&#xff0c;扎實的 HTML、CSS 和 JavaScript 基礎是成功的關鍵。React 是基于 JavaScript 構建的&#xff0c;所以深入理解 JS 至關重要。…

空間計算:開啟人機交互新紀元的下一代技術范式

引言 當蘋果CEO蒂姆庫克在2023年WWDC大會上宣布Apple Vision Pro將引領“空間計算時代”時&#xff0c;這一宣言不僅標志著技術范式的迭代&#xff0c;更預示著一場融合虛實世界的革命已悄然來臨。 空間計算&#xff08;Spatial Computing&#xff09;作為連接物理世界與數字…

大語言模型訓練的兩個階段

先說結論&#xff1a;第一階段在云平臺訓練至收斂 第二階段本地GPU微調 一、階段劃分的核心邏輯 階段目標資源特點典型耗時占比成本敏感度預訓練獲取通用表征能力需要大規模分布式計算70-90%高&#xff08;追求每美元算力&#xff09;微調適配特定任務需要領域數據安全/低延遲…

【AI News | 20250512】每日AI進展

AI Repos 1、UI-TARS UI-TARS-1.5 是字節跳動開源的多模態智能體&#xff0c;基于強大的視覺語言模型構建&#xff0c;通過強化學習實現高級推理&#xff0c;顯著提升了在虛擬世界中執行多樣化任務的能力和適應性。相較前期模型&#xff0c;1.5 版本在 OSWorld、Windows Agent…

[git]如何關聯本地分支和遠程分支

主題 本文總結如何關聯git本地分支和遠程分支的相關知識點。 詳情 查看本地分支 git branch 查看遠程分支 git branch -r 查看所有分支(本地遠程) git branch -a 查看本地分支及其關聯的遠程分支(如有) git branch -vv 關聯本地分支到遠程分支&#xff1a; git branch …

CC53.【C++ Cont】二分查找的普通模版

目錄 1.知識回顧 2.關鍵點 特點 三個模版 普通的模版(有局限) 以LeetCode上的一道題為例:704. 二分查找 分析 引入二段性:分兩段,舍一段,操作另一段(這個是二分查找的本質!) 代碼 提交結果 當然也可以使用隨機數來分兩段 普通模版總結 1.知識回顧 之前在C語言專欄…

lua腳本+Redission實現分布式鎖

實現分布式鎖最簡單的一種方式&#xff1a;基于Redis 不論是本地鎖還是分布式鎖&#xff0c;核心都在于“互斥”。 在 Redis 中&#xff0c; SETNX 命令是可以幫助我們實現互斥。SETNX 即 set if not exists (對應 Java 中的 setIfAbsent 方法)&#xff0c;如果 key 不存在的…

設計模式之工廠模式(二):實際案例

設計模式之工廠模式(一) 在閱讀Qt網絡部分源碼時候&#xff0c;發現在某處運用了工廠模式&#xff0c;而且編程技巧也用的好&#xff0c;于是就想分享出來&#xff0c;供大家參考&#xff0c;理解的不對的地方請多多指點。 以下是我整理出來的類圖&#xff1a; 關鍵說明&#x…