K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战

发布于:2025-05-10 ⋅ 阅读:(11) ⋅ 点赞:(0)

引言

在 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.16

services:
  - docker:20.10.16-dind

variables:
  DOCKER_TLS_CERTDIR: "/certs"
  HARBOR_IMAGE: $HARBOR_REGISTRY/$HARBOR_PROJECT/myapp

stages:
  - build
  - push

before_script:
  - docker login -u $HARBOR_USER -p $HARBOR_PASSWORD $HARBOR_REGISTRY

build_and_push:
  stage: build
  script:
    # 构建并推送完整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: never
  cache:
    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 流水线,完成镜像构建与推送;

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到