Harbor 实例部署
本文档介绍 Harbor Operator 的订阅及基于 Harbor 实例部署的功能。
Harbor 部署的容器组安全准入(PSA)等级要求取决于所使用的存储方式:
-
HostPath 存储:PSA 等级 必须配置为
Privileged,因为hostPath卷在Restricted策略下不被允许。 -
PVC 或 StorageClass 存储:Harbor 可以部署在
RestrictedPSA 等级下。
各部署模板支持的 PSA 等级如下:
目录
前提条件部署规划基本信息部署前资源规划部署后配置规划实例部署基于Harbor 快速启动 模板部署基于 Harbor 高可用 模板部署基于 Harbor 对象存储 模板部署基于 YAML 部署高可用(YAML 片段)存储(YAML 片段)网络访问(YAML 片段)Redis 访问凭据配置PostgreSQL 访问凭据配置管理员账号配置完整 YAML 示例:单实例,节点存储,NodePort 网络访问完整 YAML 示例:高可用,存储类,Ingress 网络访问后续操作配置单点登录(SSO)配置 HTTPS配置镜像扫描漏洞数据库策略其他信息在 IPv6 环境中部署 Harbor前提条件
-
本文档适用于平台提供的 Harbor 2.14 及以上版本,基于 Operator 等技术实现与平台解耦。
-
请确保目标集群已部署(订阅)Harbor Operator,即 Harbor Operator 已准备好创建实例。
部署规划
Harbor 支持多种资源配置以满足不同客户场景。不同场景下所需资源和配置差异较大,因此本节介绍部署 Harbor 实例前需要考虑的方面及决策点的影响,帮助用户基于此信息进行后续具体实例部署。
基本信息
-
平台提供的 Harbor Operator 基于社区官方 Harbor Operator,增强了企业级能力,如 ARM 支持和安全漏洞修复。功能上与社区版本完全兼容,体验上通过可选和可定制模板提升 Harbor 部署便利性。
-
一个 Harbor 实例包含多个组件,如负责管理镜像文件的
Registry组件,提供应用元数据和用户信息存储的PostgreSQL组件,以及用于缓存的Redis组件等。平台提供专业的 PostgreSQL Operator 和 Redis Operator,因此部署 Harbor 实例时,不再直接部署 Redis 和 PostgreSQL 资源,而是通过配置已有实例的访问凭据进行访问。
部署前资源规划
部署前资源规划指部署前需做出的决策,并在部署时生效,主要内容包括:
高可用
-
Harbor 支持高可用部署,主要影响和限制如下:
-
各组件将使用多个副本
-
网络访问不再支持
NodePort,需通过Ingress配置的域名访问 -
存储方式不再支持
节点存储,需通过StorageClass或PVC访问
-
资源
根据社区建议和实践,非高可用 Harbor 实例最低可用 2 核 CPU 和 4Gi 内存,高可用模式下最低需 8 核 CPU 和 16Gi 内存以保证稳定运行。
存储
-
平台提供的常用存储方式均可用于 Harbor,如存储类、持久卷声明、节点存储等。
-
若想故意跳过 Trivy 的持久化,保持
spec.helmValues.persistence.persistentVolumeClaim.trivy.storageClass不设置。漏洞数据库将存放于emptyDir卷,每次 Trivy Pod 重启都会触发完整数据库下载并阻塞漏洞扫描直至完成。 -
节点存储不适合
高可用模式,因为它将文件存储在宿主节点指定路径。 -
此外,Harbor 支持对象存储,配置说明见使用对象存储作为 Registry 存储后端。
在 生产环境 或 高负载场景(如大规模镜像推拉操作或高并发镜像工作负载)中,不建议使用 NFS 作为 Harbor 的存储后端。由于协议特性,NFS 无法完全满足 Harbor Registry 的元数据密集型操作需求,重负载时常导致制品上传失败,可能出现如下错误:
- digest invalid: provided digest did not match uploaded content
- blob upload unknown
- blob upload invalid
若仍想在 测试环境 使用 NFS 作为 Harbor 存储后端,可在 NFS 服务器启用 sync 和 no_wdelay(具体配置请咨询存储提供商),并将 Registry 组件副本数设置为 1,以缓解上述问题。
网络
-
平台提供两种主流网络访问方式:
NodePort和Ingress-
NodePort需指定 HTTP 端口和 SSH 端口,且确保端口可用。NodePort不适合高可用模式。 -
Ingress需指定域名,且确保域名解析正常。
-
-
平台支持 HTTPS 协议,需在实例部署后配置,详见配置 HTTPS。
Redis
建议使用块存储(如 TopoLVM)以获得更高 IOPS 和更低延迟。
-
Harbor 依赖的 Redis 组件版本为 v6,建议使用平台提供的 Redis Operator 部署 Redis 实例,然后通过配置访问凭据完成 Redis 集成。
-
Redis 访问通过配置特定格式的
secret资源实现,详见配置 Redis、PostgreSQL 和账号访问凭据。 -
Harbor 支持连接启用 TLS 的外部 Redis,配置示例见TLS 启用的 Redis 示例。
-
PostgreSQL
建议使用块存储(如 TopoLVM)以获得更高 IOPS 和更低延迟。
-
支持的 PostgreSQL 版本请参考版本兼容矩阵。建议使用平台提供的 PostgreSQL Operator 部署 PostgreSQL 实例,并通过配置访问凭据完成集成。
- PostgreSQL 访问通过配置特定格式的
secret资源实现,详见配置 Redis、PostgreSQL 和账号访问凭据。
- PostgreSQL 访问通过配置特定格式的
账号凭据
初始化 Harbor 实例时需配置管理员账号及密码,通过配置 secret 资源实现,详见配置 Redis、PostgreSQL 和账号访问凭据。
部署后配置规划
部署后配置规划指无需部署前决策,可通过标准化操作按需变更的规划,主要包括单点登录(SSO)、HTTPS 配置、外部负载均衡配置等,详见后续操作。
实例部署
平台提供的 Harbor Operator 主要支持两种部署方式:基于模板部署和基于 YAML 部署。
平台内置两种模板供使用:Harbor 快速启动 模板和 Harbor 高可用 模板,同时支持自定义模板以满足特定客户场景。
内置模板及 YAML 部署信息如下:
基于 Harbor 快速启动 模板部署
该模板用于快速创建轻量级 Harbor 实例,适合开发测试场景,不建议用于生产环境。
- 计算资源:2 核 CPU,4Gi 内存
- 存储方式:使用本地节点存储,需配置存储节点 IP 和路径
- 网络访问:使用 NodePort 方式,节点 IP 与存储共用,需指定端口
- 依赖服务:需配置已有 Redis 和 PostgreSQL 访问凭据
- 其他设置:需配置账号凭据,默认关闭 SSO 功能
根据模板提示填写相关信息完成部署。
基于 Harbor 高可用 模板部署
部署高可用 Harbor 实例需更高资源配置,提供更高可用标准。
- 计算资源:16 核 CPU,16 Gi 内存
- 存储方式:使用存储类资源存储镜像文件、后台任务日志和镜像扫描漏洞数据库
- 网络访问:使用 Ingress 方式,需指定域名
- 依赖服务:需配置已有 Redis 和 PostgreSQL 访问凭据
- 其他设置:需配置账号凭据,默认关闭 SSO 功能
实现 Harbor 高可用需满足以下外部依赖条件:
Redis和PostgreSQL实例必须高可用- 网络负载均衡器必须高可用;使用 ALB 时需配置 VIP
- 集群节点数需大于 2
根据模板提示填写相关信息完成部署。
基于 Harbor 对象存储 模板部署
基于对象存储部署 Harbor 实例。
- 计算资源:8 核 CPU,16 Gi 内存
- 存储:镜像文件使用对象存储,后台任务日志使用数据库存储
- 网络访问:使用 Ingress 访问服务,指定域名
- 依赖:配置已有 Redis 和 PostgreSQL 访问凭据
- 其他设置:配置账号凭据,默认关闭 SSO 功能
该模板中 Trivy 扫描器不持久化数据,挂载 emptyDir,每次 Pod 重启都会重新下载漏洞数据库,暂时阻塞新扫描直至同步完成。
请确保所提供的对象存储凭据具备所需的 S3 API 权限,详见对象存储凭据。
根据模板提示填写相关信息完成部署。
基于 YAML 部署
YAML 部署是最基础且强大的部署能力。本文提供了 部署规划 各维度对应的 YAML 片段,并提供两个完整场景的 YAML 示例,帮助用户理解 YAML 配置方式并按需修改配置。
高可用(YAML 片段)
高可用模式下,Harbor 组件副本数应至少为 2。YAML 配置片段如下:
存储(YAML 片段)
Harbor 数据存储主要包括三部分:
- Registry:管理和存储容器镜像及制品,负责镜像上传、下载和存储操作。
- Jobservice:执行后台任务,如镜像间复制、垃圾回收及其他定时或按需任务。
- Trivy:对容器镜像进行漏洞扫描,识别安全问题,确保安全策略合规。
目前支持三种存储配置方式:存储类、PVC 和本地节点存储。使用存储类或 PVC 时,存储必须支持多节点读写(ReadWriteMany)。
Registry 还支持使用对象存储(S3)作为存储后端。
Jobservice 支持将任务日志存储在多个位置(文件、数据库、标准输出)。若未选择将任务日志输出到文件,则无需为 Jobservice 配置存储后端。详见配置任务日志存储。
存储类配置示例:
PVC 配置示例(PVC 需提前创建):
本地节点存储配置示例:
配置对象存储(S3)作为 Registry 存储后端:
-
使用 Amazon S3 或兼容 S3 的对象存储服务,如 MinIO、Ceph。
-
对象存储桶需提前创建。
-
<object-storage-secret>Secret 需提前创建。
更多详情见 S3 存储驱动
若想在平台使用 Ceph,请参考 Ceph 分布式存储。
Harbor 目前仅支持配置 Registry 组件使用 S3 存储,其他组件仍使用 PVC 或 StorageClass 进行持久化存储。
网络访问(YAML 片段)
网络访问主要包括两种方式:域名访问和 NodePort 访问。
域名访问配置示例:
NodePort 访问配置示例:
Redis 访问凭据配置
指在 Harbor 实例中配置 Redis 凭据 secret 资源后的配置片段:
独立模式示例:
Sentinel 模式示例:
TLS 启用的 Redis 示例
TLS 启用的 Redis 注意事项:
caBundleSecretName是全局 Harbor Helm 值,引用的 Secret 必须包含名为ca.crt的键。- 对于启用 TLS 的 Redis Sentinel,继续使用
redis.external.addr中的 Sentinel 地址,设置redis.external.sentinelMasterSet,并启用redis.external.tlsOptions.enable: true。 - Harbor 仅支持 Redis TLS 的服务器证书验证,不支持客户端证书。
- 目前不支持通过 TLS 连接 Alauda Cache Service for Redis OSS。
PostgreSQL 访问凭据配置
指在 Harbor 实例中配置 PostgreSQL 凭据 secret 资源后的配置片段:
管理员账号配置
指在 Harbor 实例中配置账号凭据 secret 资源后的配置片段:
完整 YAML 示例:单实例,节点存储,NodePort 网络访问
完整 YAML 示例:高可用,存储类,Ingress 网络访问
后续操作
配置单点登录(SSO)
仅当 Harbor 数据库中未添加任何本地用户时,才能将认证模式从数据库切换为 OIDC。如果 Harbor 数据库中存在除 admin 以外的用户,则无法更改认证模式。
详情参考:配置 OIDC 认证
配置 SSO 包括以下步骤:
- 在 global 集群注册 SSO 认证客户端
- 准备 SSO 认证配置
- 配置 Harbor 实例使用 SSO 认证
在 global 集群创建以下 OAuth2Client 资源以注册 SSO 认证客户端:
编辑 Harbor 实例,添加以下配置:
配置 HTTPS
部署 Harbor 实例后,可按需配置 HTTPS。
首先在实例所在命名空间创建 TLS 证书 Secret:
然后编辑 Harbor 实例 YAML 配置,启用 HTTPS 访问:
配置镜像扫描漏洞数据库策略
Harbor 的镜像扫描功能由 Trivy 组件实现。考虑用户网络环境,该组件默认使用内置离线漏洞数据库。由于漏洞数据库不更新,无法及时发现新漏洞。
若需保持漏洞数据库更新,可编辑 Harbor 实例 YAML 配置启用在线更新策略(该策略需访问 GitHub):
启用在线更新策略后,Trivy 会根据上次更新时间决定扫描前是否更新漏洞数据库。因下载漏洞数据库耗时,若不需要 Java 漏洞扫描,也可编辑 Harbor 实例 YAML 配置禁用 Java 漏洞数据库更新:
其他信息
在 IPv6 环境中部署 Harbor
Harbor 支持在 IPv6 环境中部署,但需确保客户端工具版本支持 IPv6。如遇 invalid reference format 错误,请检查客户端工具版本是否支持 IPv6。
相关社区问题: