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

基于认证的 Harbor 容器镜像仓库

一、Harbor 概览

1.1.Harbor 的核心定位

Harbor 是由 VMware 开源的企业级 Docker 镜像仓库,专为解决容器化应用在企业级部署中的痛点而设计。它提供了镜像存储、管理、安全和分发的全生命周期管理,是 Docker Registry 的企业级增强版本。

 

1.2.核心功能与用途

  1. 镜像存储与分发

    • 支持多租户隔离,通过 “项目” 组织镜像资源

    • 提供 HTTP/HTTPS 协议访问,支持镜像的拉取、推送和复制

    • 兼容 Docker 和 OCI 镜像格式

  2. 企业级安全能力

    • 基于角色的访问控制(RBAC)

    • 镜像内容扫描(集成 Clair)

    • 镜像签名与验证(支持 Notary)

    • 审计日志记录所有操作

  3. 高可用性与扩展性

    • 支持分布式部署和跨数据中心同步

    • 可扩展的存储后端(本地文件系统、S3、Ceph 等)

    • 水平扩展的微服务架构

  4. 与云原生生态集成

    • 无缝对接 Kubernetes、Helm、Jenkins 等工具

    • 支持 Helm Chart 仓库(需启用 ChartMuseum)

    • 提供 Webhook 支持 CI/CD 流水线

 

1.3.核心优势

  1. 企业级安全防护

    • 通过镜像扫描实现漏洞检测(CVE 分析)

    • 支持镜像签名确保来源可信

    • 细粒度的权限控制(项目→仓库→标签)

  2. 高效协作与管理

    • 基于项目的资源隔离

    • 镜像版本管理与标签策略

    • 支持镜像复制与垃圾回收

  3. 高可用架构设计

    • 分布式部署架构支持跨数据中心容灾

    • 负载均衡与自动故障转移

    • 支持容器化部署(Docker Compose/Kubernetes)

  4. 成本优化

    • 镜像分层存储减少冗余

    • 支持镜像代理缓存加速拉取

    • 离线安装包支持内网环境

  5. 开放生态集成

    • 兼容 Docker CLI 和 OCI 标准

    • 支持与 Prometheus、Grafana 集成监控

    • 提供 RESTful API 支持二次开发

 

1.4.典型应用场景

  1. 私有云 / 混合云环境

    • 企业内部镜像存储库,替代 Docker Hub

    • 跨公有云 / 私有云的镜像同步

  2. CI/CD 流水线

    • 作为镜像仓库支撑持续集成与部署

    • 结合 Jenkins 实现自动化构建 - 测试 - 发布

  3. 微服务架构

    • 管理大量微服务镜像版本

    • 支持灰度发布与回滚

  4. 敏感数据保护

    • 金融、医疗等行业的镜像加密存储

    • 审计日志满足合规性要求

 


 

二、安装配置 Harbor

1.1.安装 Docker-ce

构建 Docker 软件仓库,用于下载 Docker。

echo >> /etc/yum.repos.d/docker.repo << EOF
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
EOF

安装 Docker-ce

yum install docker-ce -y

 

1.2.配置加速器

在安装 Docker 后,配置 /etc/docker/daemon.json 文件并添加加速器地址具有多方面的重要作用,以下为你详细介绍:

1.2.1.作用

加速镜像拉取过程

在默认情况下,Docker 从 Docker Hub 等官方镜像仓库拉取镜像时,由于网络等因素,速度可能会比较慢。尤其是在国内,由于网络距离以及网络限制等问题,拉取镜像的速度常常不尽人意。

通过配置 /etc/docker/daemon.json 文件添加加速器,例如阿里云、网易云等提供的镜像加速器服务,Docker 会优先从这些加速器节点获取镜像。这些加速器节点通常在国内有多个数据中心,并且和 Docker Hub 等官方仓库有稳定快速的连接,能缓存大量常用镜像。这样一来,当你拉取镜像时,就可以直接从离你较近且速度快的加速器节点获取,大大缩短了镜像拉取的时间。

提高镜像拉取的稳定性

网络状况不稳定可能导致镜像拉取过程中出现中断、超时等问题,使得拉取操作失败,这会影响开发和部署的进度。

镜像加速器通过优化网络架构和采用分布式存储等技术,能够提供更稳定的服务。即使 Docker Hub 等官方仓库出现网络故障或者负载过高的情况,加速器节点依然可以为你提供镜像服务,保证镜像拉取的稳定性。

节省网络带宽和成本

由于镜像加速器节点可以缓存镜像,当多个用户或者多台服务器通过同一个加速器拉取相同镜像时,加速器节点可以直接提供缓存的镜像,无需每次都从官方仓库重新下载。

这样不仅减少了对官方仓库的访问压力,也降低了对本地网络带宽的占用,对于企业级用户来说,还能在一定程度上节省网络带宽成本。

支持多镜像源

/etc/docker/daemon.json 文件除了可以配置镜像加速器地址,还可以配置多个镜像源。这意味着你可以根据不同的需求,指定从不同的镜像仓库拉取镜像。

例如,你可以同时配置 Docker Hub 的加速器和国内其他的镜像仓库地址,当 Docker 在拉取镜像时,会按照配置的顺序依次尝试从这些镜像源获取,增加了获取镜像的途径和灵活性。

对 Docker 守护进程进行更多配置

/etc/docker/daemon.json 文件不仅仅用于配置镜像加速器,它还是 Docker 守护进程的配置文件。你可以在这个文件中进行其他各种配置,如调整 Docker 日志的存储方式、限制容器的资源使用、开启实验性特性等。

 

1.2.2.配置

echo >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
                        "https://docker.m.daocloud.io",         # DaoCloud 提供的 Docker 镜像加速器地址。
                        "https://hub-mirror.c.163.com",         # 网易云
                        "https://mirror.baidubce.com",          # 百度云
                        "https://docker.nju.edu.cn",            # 南京大学
                        "https://register.liberx.info",         
                        "https://mirror.ccs.tencentyun.com",    # 腾讯云
                        "https://2i1r7dqv.mirror.aliyuncs.com"  # 阿里云
                      ]
}
EOF

加载配置并启动 Docker。

systemctl daemon-reload 
systemctl enable --now docker

 

1.3.搭建基于认证的 Docker

1.3.1.生成认证 Key 和证书

创建存放证书的目录。

mkdir /root/certs 

生成证书和 Key。

openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/harbor.org.key -addext "subjectAltName = DNS:reg.harbor.org" -x509 -days 365 -out /root/certs/harbor.org.crt
  • openssl req:使用 openssl req 命令创建、处理证书签名请求,结合参数生成自签名证书

  • -newkey rsa:4096:用 RSA 算法生成 4096 位新私钥,位数越高安全性越好

  • -nodes:私钥不加密,方便使、用但要保障文件安全

  • -sha256:使用 SHA - 256 哈希算法保障证书完整性

  • -keyout /root/certs/harbor.org.key:指定私钥输出路径和文件名

  • -adext "subjectAltName = DNS:reg.harbor.org":为证书添加主题备用名称扩展,指定适用域名

  • -x509:直接生成自签名的 X.509 证书

  • -days 365:设置证书有效期为 365 天

  • -out /root/certs/harbor.org.crt:指定自签名证书输出路径和文件名

注意:

  • -addext "subjectAltName = DNS:reg.harbor.org" 参数:该参数为证书添加了主题备用名称,指定证书可用于访问 reg.harbor.org 这个域名。在现代的 TLS 配置中,浏览器和客户端通常会检查证书的主题备用名称。如果证书的主题备用名称与实际访问的域名不匹配,客户端会提示证书无效。如果需要支持多个域名,可以使用逗号分隔多个 DNS 条目,例如 -addext "subjectAltName = DNS:reg.harbor.org,DNS:another.harbor.org"。

 

1.3.2.Docker 加载证书

支持私有镜像仓库的 TLS 认证

在使用 Docker 与私有镜像仓库(如 Harbor)进行交互时,为确保通信安全,通常会使用 TLS(传输层安全协议)加密。私有镜像仓库一般会使用 SSL/TLS 证书来验证其身份,防止中间人攻击并保证数据在传输过程中的保密性和完整性。

Docker 客户端默认信任系统的 CA 证书,但私有镜像仓库的证书可能是自签名证书,或者由私有 CA 颁发,这些证书不会被 Docker 客户端默认信任。此时,就需要将私有镜像仓库的证书添加到 Docker 客户端的信任列表中。

/etc/docker/certs.d 是 Docker 客户端用于存储自定义证书的目录,其下的每个子目录对应一个特定的镜像仓库域名。/etc/docker/certs.d/reg.harbor.org 就是为 reg.harbor.org 这个私有镜像仓库准备的证书存储目录。通过在该目录下放置对应的证书文件,Docker 客户端在与 reg.harbor.org 进行通信时,会自动读取这些证书并验证仓库的身份。 

# 创建 docker 存放证书的目录
mkdir -p /etc/docker/certs.d/reg.harbor.org
# 拷贝前面生成的证书到此目录下
cp /root/certs/harbor.org.crt /etc/docker/certs.d/reg.harbor.org/ca.crt
# 重启 docker
systemctl restart docker

 

1.4.安装 Harbor

1.4.1.下载解压 Harbor

# 在家目录下下载 harbor,并解压到当前目录
wget https://github.com/goharbor/harbor/releases/download/v2.5.4/harbor-offline-installer-v2.5.4.tgz
tar zxf harbor-offline-installer-v2.5.4.tgz 
# hosts 解析
echo >> /etc/hosts << EOF
192.168.67.141 reg.docker.org
EOF

 

1.4.2.修改配置文件

cd /root/harbor
cp harbor.yml.tmpl harbor.yml
vim /root/harbor/harbor.yml

编辑以下内容。

 

1.4.3.证书认证

./install.sh --with-chartmuseum     # 报错,找不到认证文件,需拷贝证书到 harbor 配置文件所指定目录下
cp -r /root/certs/ /data/
cd /root/harbor/
./install.sh --with-chartmuseum     # 再次安装 harbor
# Harbor 出问题时可用下两条命令重启 Harbor
# docker compose down       # 用于清理 Docker Compose 项目所创建的资源,让环境恢复到初始状态。
# docker compose up -d      # 用于根据配置文件创建并在后台启动容器,开启项目的运行。这两条命令通常结合使用,在开发、测试和部署过程中发挥重要作用。
  • ./install.sh:这表示执行当前目录下的 install.sh 脚本。在 Harbor 的安装包中,install.sh 是官方提供的用于自动化安装 Harbor 的脚本。

  • --with-chartmuseum:这是 install.sh 脚本的一个参数选项。ChartMuseum 是一个开源的 Helm Chart 仓库服务器,Harbor 从 1.6 版本开始支持集成 ChartMuseum。使用 --with-chartmuseum 参数意味着在安装 Harbor 的过程中会同时安装并集成 ChartMuseum 服务。

执行 ./install.sh --with-chartmuseum 操作的主要目的是让 Harbor 具备 Helm Chart 仓库的功能,具体体现在以下几个方面:

  • 支持 Helm Chart 存储与管理

Helm 是 Kubernetes 的包管理工具,Helm Chart 是描述一组 Kubernetes 资源的文件集合。通过集成 ChartMuseum,Harbor 可以作为 Helm Chart 的存储仓库,用户能够方便地将自己创建的 Helm Chart 上传到 Harbor 中进行存储和管理。这有助于团队内部共享和复用 Helm Chart,提高开发和部署效率。

  • 实现 Helm Chart 的版本控制

Harbor 集成 ChartMuseum 后,可以对 Helm Chart 进行版本管理。用户可以为不同版本的 Helm Chart 打标签,方便追踪和回滚到特定版本的部署。这对于生产环境中的应用更新和故障恢复非常重要。

  • 增强安全性和访问控制

Harbor 本身提供了丰富的安全功能,如基于角色的访问控制(RBAC)、镜像扫描等。集成 ChartMuseum 后,这些安全功能同样适用于 Helm Chart。管理员可以根据用户角色和权限,精确控制哪些用户可以上传、下载和管理 Helm Chart,从而保障 Helm Chart 的安全性。

  • 与现有 Harbor 功能集成

将 ChartMuseum 集成到 Harbor 中,可以与 Harbor 的其他功能无缝集成,如日志记录、审计等。这使得整个容器镜像和 Helm Chart 的管理过程更加统一和高效,方便运维人员进行监控和管理。

综上所述,使用 ./install.sh --with-chartmuseum 命令安装 Harbor 可以让 Harbor 具备 Helm Chart 仓库的功能,为 Kubernetes 应用的部署和管理提供更全面的支持。

 

1.5.测试

浏览器访问 IP,输入用户名(默认 admin)和密码(上述配置文件里所修改的harbor_admin_password),进入 harbor 界面。

创建一个新的项目,选择公开,所有人多可以下载。

 


 

二、推送镜像

2.1.打标签推送镜像

docker login reg.harbor.org
docker tag nginx:v3 reg.harbor.org/openlab/nginx:v3     # 打标签,解释如下
docker push reg.harbor.org/openlab/nginx:v3

docker tag 命令用于为本地的 Docker 镜像添加一个新的标签。在将本地镜像推送到远程仓库时,需要按照远程仓库的要求为镜像添加合适的标签,标签中包含了远程仓库的地址、项目名称和镜像版本等信息。

reg.harbor.org 是 Harbor 镜像仓库的地址;openlab 是 Harbor 中的项目名称,用于对镜像进行分类管理;nginx 是镜像名称;v3 是镜像版本标签。

 

2.2.测试

刷新 Harbor 浏览器界面,可以看到刚推送上来的镜像。

 


 

三、客户端拉取镜像

前提:客户端也需下载 Docker-ce,配置加速器,如上步骤 2.1 和 2.2

3.1.Hosts 解析

echo >> /etc/hosts << EOF
192.168.67.141 reg.harbor.org
EOF

 

3.1.Docker 加载 Harbor 证书

  1. TLS 双向认证 Harbor 使用 HTTPS 通信时,客户端必须信任 Harbor 的证书(CA 签名或自签名),否则会因证书验证失败拒绝连接。

  2. Docker 证书机制 Docker 客户端默认信任系统证书库(如 /etc/pki/ca-trust/),但私有证书需手动添加到 certs.d 目录。

mkdir -p /etc/docker/certs.d/reg.harbor.org
scp /etc/docker/certs.d/reg.harbor.org/ca.crt 192.168.67.142:/etc/docker/certs.d/reg.harbor.org/ca.crt      # 从 Harbor 主机拷贝证书到客户端主机上
systemctl restart docker

 

3.2.拉取镜像

docker pull reg.harbor.org/openlab/nginx:v3

相关文章:

  • 基于koajsAdmin+mongodb的后台管理快速开发框架安装运行记录
  • 深度学习-151-Dify工具之创建一个生成财务报表的智能体Agent
  • 【容器运维】docker搭建私有仓库
  • 【MySQL篇】复合查询
  • 数学爱好者写的编程系列文章
  • Linux | make和Makefile命令详细篇
  • 深度学习:让机器学会“思考”的魔法
  • webpack使用详细步骤
  • SpringBootAdmin-clinet自定义监控CPU、内存、磁盘等health
  • Linux:xxx is not in the sudoers file. This incident will be reported.
  • macOS Sequoia 15.3 一直弹出“xx正在访问你的屏幕”
  • 深度学习篇---对角矩阵矩阵的秩奇异矩阵
  • 异地灾备介绍
  • STM32中断
  • 【Android】基于udp通信的智能家居移动应用开发
  • 强化学习中循环神经网络在序列决策中的应用研究
  • 每日一题-力扣-2680. 最大或值-20250321
  • 机器学习--DBSCAN聚类算法详解
  • [学习笔记] 部署Docker搭建靶场
  • 机器学习实战
  • 夜读丨喜马拉雅山的背夫
  • 太原一高中生指出博物馆多件藏品标识不当,馆方已邀请他和专家共同探讨
  • 印巴局势快速升级,外交部:呼吁印巴以和平稳定的大局为重
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 巴基斯坦军方:印度导弹袭击已造成至少3死14伤
  • 重温经典|中国首部剪纸动画片《猪八戒吃瓜》创作始末