当前位置: 首页 > backend >正文

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.xdnf.cn/news/4906.html

相关文章:

  • 工业与协议融合篇:如何将多个协议集成进一个系统?
  • OpenCV中适用华为昇腾(Ascend)后端的逐元素操作(Per-element Operations)
  • MCU存储系统架构解析
  • 面试问题(连载。。。。)
  • 【Bootstrap V4系列】学习入门教程之 组件-下拉菜单(Dropdowns)
  • k8s术语之secret
  • 数据库——关系代数之扩展操作
  • Java—— 集合 Collection
  • SNMP 协议介绍、开发方法及示例
  • 0X. Linux嵌入式系统(课堂笔记)
  • 基于STM32、HAL库的FT232RL USB转UART收发器 驱动程序设计
  • 基于主成分分析(PCA)的数据降维
  • 泰勒展开式
  • Ollama调优,提高性能与安全性
  • 15.thinkphp的上传功能
  • 基于redis的定时状态更新
  • SpringBoot指定项目层日志记录
  • 广东省省考备考(第五天5.8)—言语:逻辑填空(每日一练)
  • 2025 EAU UTUC指南学习笔记③:诊断策略精读——从症状到活检,如何科学判断治疗路径?
  • nextjs站点地图sitemap添加
  • Don’t Mesh with Me 论文阅读 brep llm
  • YY/T 1732-2020口腔曲面体层X射线模体
  • 系统思考助力富维东阳
  • ui生成提示词
  • ROP链-BUUCTF-cmcc_simplerop(ret2syscall)
  • 【JS逆向基础】面向对象
  • Spring AI 集成 DeepSeek V3 模型开发指南
  • Dify工作流接收API请求带文件(有小坑)
  • Android开发补充内容
  • python作业5