镜像供应链信任边界控制平面与Harbor集成部署 - 第4节

4.1 环境依赖矩阵:Docker、Docker Compose 与 Kubernetes

Harbor 作为容器镜像仓库与供应链安全控制平面,其安装环境需满足明确的运行时依赖。根据部署模式(单机测试 vs 生产高可用),底层容器运行时与编排工具的选择存在差异。下表列出了各组件的最低版本要求及推荐配置:

组件 最低版本 推荐版本 说明
Docker Engine 20.10.x 24.0.x 或更高 用于运行 Harbor 核心容器;需启用 containerd 快照器
Docker Compose v2.20.x v2.27.x 单节点部署必需;v1 已停止维护,请使用 v2 插件版
Kubernetes v1.24.x v1.28.x 或 v1.29.x 生产高可用部署时使用;需配合 Helm Chart 安装
Helm v3.12.x v3.14.x K8s 模式下管理 Harbor Chart 包
⚠ 版本兼容性警告: Harbor v2.10+ 已不再支持 Docker Compose v1(即 docker-compose 独立二进制)。请使用 docker compose(v2 插件)或直接迁移至 Kubernetes 部署。若使用 K8s,确保集群已安装 metrics-server 用于资源监控。

4.1.1 环境准备步骤

  1. 安装 Docker Engine:使用官方脚本或包管理器安装,并配置镜像加速器(如阿里云、中科大源)。
  2. 安装 Docker Compose v2:通过 apt 或 yum 安装 docker-compose-plugin,验证命令 docker compose version。
  3. 安装 Kubernetes 集群(可选):使用 kubeadm、K3s 或云托管集群,确保节点间网络互通。
  4. 安装 Helm CLI:下载二进制或使用包管理器,添加 Harbor 官方 Chart 仓库。
💡 生产建议: 生产环境强烈推荐使用 Kubernetes + Helm 部署 Harbor,以获得自动扩缩容、滚动更新、持久卷管理及网络策略隔离能力。单机 Docker Compose 仅适用于 PoC 或开发测试。
环境依赖与部署模式选择流程 部署模式选择 单机:Docker + Compose v2 集群:Kubernetes + Helm 适合 PoC / 开发 / 小规模 适合生产 / 高可用 / 多租户

4.2 离线安装包获取与完整性校验

在隔离网络或受控环境中,无法直接访问 Docker Hub 或 GitHub Release。Harbor 官方提供离线安装包(.tar.gz),包含所有预构建镜像及安装脚本。获取流程如下:

  • 下载地址:GitHub Releases 页面(https://github.com/goharbor/harbor/releases),选择对应版本(如 harbor-offline-installer-v2.10.2.tgz)。
  • 校验文件:同时下载同名的 .asc 签名文件或 sha256sum.txt,用于验证包完整性。
  • GPG 验证(推荐):导入 Harbor 官方 GPG 公钥,执行 gpg --verify 校验签名。
  • SHA256 校验(备选):sha256sum -c sha256sum.txt --ignore-missing。
🔐 安全提示: 离线包一旦被篡改,可能导致供应链投毒。务必在安装前完成 GPG 或 SHA256 校验。建议将校验步骤写入 CI/CD 流水线或自动化脚本中。

4.2.1 离线包结构解析

解压后的目录结构如下:

harbor/
├── harbor.yml.tmpl          # 主配置文件模板(必须修改)
├── install.sh               # 安装入口脚本
├── prepare.sh               # 环境准备与配置生成
├── common/                  # 公共脚本与证书工具
├── docker-compose.yml       # 生成的 Compose 文件(由 prepare.sh 生成)
└── harbor.v2.10.2.tar.gz    # 所有镜像的离线 tar 包
📦 关键文件说明: harbor.yml.tmpl 是唯一需要手动编辑的配置文件;install.sh 会自动加载离线镜像并启动服务。切勿直接修改 docker-compose.yml,它由 prepare.sh 根据 harbor.yml 动态生成。

4.3 配置文件详解:harbor.yml 核心参数

harbor.yml 是 Harbor 安装的单一配置入口,涵盖主机名、证书、存储后端、认证方式、组件开关等。以下按功能模块拆解关键字段:

配置段 参数示例 说明 必填
主机名 hostname: reg.example.com Harbor 对外访问的 FQDN;不可使用 localhost 是
HTTP/HTTPS http.port: 80
https.port: 443
生产环境必须启用 HTTPS;证书路径需正确 是
管理员密码 harbor_admin_password: Harbor12345 初始密码,安装后立即修改 是
数据库 database.password: root123 PostgreSQL 密码;生产建议使用外部数据库 是
存储后端 storage_service.filesystem
storage_service.s3
默认本地文件系统;可切换 S3/GCS/Azure 否
认证方式 auth_mode: ldap_auth
auth_mode: db_auth
默认本地数据库;支持 LDAP/OIDC 否
组件开关 trivy.enabled: true
notary.enabled: false
控制漏洞扫描、镜像签名等组件 否
代理缓存 proxy.proxy_registry 配置上游代理缓存(如 Docker Hub 镜像) 否
⚠ 配置陷阱:
  • hostname 必须与证书 CN 匹配,否则 HTTPS 握手失败。
  • 若启用 trivy 漏洞扫描,需确保离线环境能访问 Trivy 数据库或配置内部镜像源。
  • storage_service 切换为 S3 后,原有本地数据不会自动迁移,需提前规划。

4.3.1 典型生产配置片段

hostname: harbor.internal.company.com
https:
  port: 443
  certificate: /data/certs/harbor.crt
  private_key: /data/certs/harbor.key
harbor_admin_password: ${ADMIN_PASSWORD}
database:
  type: external
  host: postgres-cluster.company.com
  port: 5432
  username: harbor
  password: ${DB_PASSWORD}
  core_db: harbor_core
  clair_db: harbor_clair
storage_service:
  s3:
    region: us-east-1
    bucket: harbor-registry
    accesskey: ${AWS_ACCESS_KEY}
    secretkey: ${AWS_SECRET_KEY}
    secure: true
auth_mode: oidc_auth
oidc:
  name: Okta
  endpoint: https://okta.company.com
  client_id: ${OIDC_CLIENT_ID}
  client_secret: ${OIDC_CLIENT_SECRET}
  scope: openid,profile,email
trivy:
  enabled: true
  skip_update: false
  offline_scan: false
🔧 变量替换: 生产环境中建议使用环境变量或 Vault 注入敏感字段(如 ${ADMIN_PASSWORD}),避免明文写入配置文件。Harbor 的 prepare.sh 支持 --with-notary、--with-trivy 等参数,但更推荐在 harbor.yml 中统一声明。
harbor.yml 配置模块与数据流关系 harbor.yml 网络与 TLS 认证与授权 数据库连接 存储后端 (S3/FS) 组件开关 (Trivy/Notary) 所有模块配置最终由 prepare.sh 解析并生成 docker-compose.yml

4.4 初始化安装执行流程

完成环境准备与配置后,按以下步骤执行安装:

  1. 解压离线包:tar -xzf harbor-offline-installer-v2.10.2.tgz -C /opt
  2. 复制并编辑配置:cp harbor.yml.tmpl harbor.yml,按 4.3 节修改参数。
  3. 运行 prepare.sh:./prepare.sh,生成证书、密钥及 docker-compose.yml。
  4. 加载离线镜像:docker load -i harbor.v2.10.2.tar.gz(install.sh 会自动执行)。
  5. 启动服务:./install.sh,该脚本会调用 docker compose up -d。
  6. 验证状态:docker compose ps 确认所有容器为 Up 状态;访问 https://<hostname> 登录 UI。
✅ 安装后检查清单:
  • 核心容器(nginx、core、registry、db、redis、portal)全部运行。
  • HTTPS 证书无过期或域名不匹配错误。
  • 管理员可正常登录并创建项目。
  • 漏洞扫描器(Trivy)数据库已初始化。