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

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 流水线,完成镜像构建与推送;

结合提交哈希与日期生成镜像标签,提高可追溯性;

配置流水线环境变量,增强安全性;

补充手动操作流程(登录、构建、推送)。

相关文章:

  • 【亲测有效】如何清空但不删除GitHub仓库中的所有文件(main分支)
  • K8S扩缩容及滚动更新和回滚
  • 昆仑万维一季度营收增长46% AI业务成新增长点
  • 集成管理工具Gitlab
  • 软考高级系统架构设计师备考分享:操作系统核心知识点整理
  • Java设计模式之原型模式详解:从入门到精通
  • 纯Java实现反向传播算法:零依赖神经网络实战
  • Docker常见疑难杂症解决指南:深入解析与实战解决方案
  • 【阿里云免费领取域名以及ssl证书,通过Nginx反向代理web服务】
  • STM32TIM定时中断(6)
  • 数据统计的意义:钱包余额变动
  • 区块链详解
  • leetcode 383. Ransom Note
  • 高级可视化图表分析实践——以《大侠立志传》武器系统为例
  • Docker Compose 的详细使用总结、常用命令及配置示例
  • 数字经济时代下的消费行为变迁与经济学启示
  • 制造企业如何选择项目管理软件系统提高项目执行的效率和质量
  • Electron知识框架
  • Spring Cloud LoadBalancer (负载均衡)
  • MySQL 与 Elasticsearch 数据一致性方案
  • 保证断电、碰撞等事故中车门系统能够开启!隐藏式门把手将迎来强制性国家标准
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教
  • 98岁动物学家、北京大学教授杨安峰逝世
  • 阿曼宣布美国与胡塞武装达成停火协议
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招
  • 安赛乐米塔尔深化在华战略布局,VAMA总经理:做中国汽车板竞争力前三