引言
在 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 流水线,完成镜像构建与推送;
结合提交哈希与日期生成镜像标签,提高可追溯性;
配置流水线环境变量,增强安全性;
补充手动操作流程(登录、构建、推送)。