让 Harbor 达到生产就绪:部署的关键考虑因素

发布: (2025年12月2日 GMT+8 19:58)
4 min read

Source: VMware Blog

Harbor 是一个开源容器镜像仓库,通过策略和基于角色的访问控制来保护制品,确保镜像进行漏洞扫描并签名为可信。要了解更多关于 Harbor 以及如何在虚拟机 (VM) 和 Kubernetes (K8s) 上部署它,请参考系列的第 1 和 2 部分。

Harbor 概览

虽然部署 Harbor 相对简单,但要使其达到生产就绪水平,需要仔细考虑多个关键方面。本指南聚焦于通过 Helm 在 Kubernetes 上部署的上游 Harbor (v2.14),并提供针对该部署的建议。

高可用性 (HA) 与可扩展性

在生产环境中,单点故障是不可接受的。实现 Harbor 的高可用性涉及以下几个方面:

使用 Ingress 部署

在 Harbor 实例前配置一个 Ingress 类型的 Kubernetes Service(例如 Traefik),用于分发流量并提供统一入口。使用 cert‑manager 进行证书管理。

expose:
  type: ingress   # options: loadBalancer, ingress, clusterIP, nodePort

运行多个 Harbor 实例

为关键的 Harbor 组件(core、jobservice、portal、registry、trivy)增加副本数,以确保冗余:

core:
  replicas: 3
jobservice:
  replicas: 3
portal:
  replicas: 3
registry:
  replicas: 3
trivy:
  replicas: 3
exporter:
  replicas: 3   # optional, for monitoring availability
nginx:
  replicas: 3   # if using Ingress, improves Ingress availability

外部 PostgreSQL(数据库 HA)

Harbor 内置的 PostgreSQL 为单节点部署,不建议在生产环境使用。部署高可用的 PostgreSQL 集群(如 Patroni、CloudNativePG)或使用托管服务,然后将 Harbor 指向该数据库:

database:
  type: external
  external:
    host: "192.168.0.1"
    port: "5432"
    username: "user"
    password: "password"
    coreDatabase: "registry"
    existingSecret: ""   # if using a secret, the key must be "password"
    sslmode: "verify-full"   # options: disable, require, verify-ca, verify-full

外部 Redis(Redis HA)

部署高可用的 Redis 集群(如 Redis Sentinel 或 Redis Cluster)或使用托管 Redis 服务,然后在 Harbor 中进行相应配置:

redis:
  type: external
  external:
    addr: "192.168.0.2:6397"
    sentinelMasterSet: ""
    tlsOptions:
      enable: true
    username: ""
    password: ""

安全最佳实践

安全是任何生产系统的首要任务,容器镜像仓库尤为重要。

启用 TLS/SSL

始终为所有 Harbor 组件启用 TLS/SSL。结合 cert‑manager 实现证书的自动化申请:

expose:
  tls:
    enabled: true
    certSource: auto   # change to manual if using cert-manager
    auto:
      commonName: ""

internalTLS:
  enabled: true
  strong_ssl_ciphers: true
  certSource: "auto"
  core:
    secretName: ""
  jobService:
    secretName: ""
  registry:
    secretName: ""
  portal:
    secretName: ""
  trivy:
    secretName: ""

配置 RBAC 与身份提供者

利用 Kubernetes RBAC 管理对 Harbor 资源的访问。部署完成后,将 Harbor 与企业级身份提供者(如 LDAP 或 OIDC)集成。参考官方指南:

RBAC 配置

启用漏洞扫描

Harbor 默认使用 Trivy。确保已开启扫描功能:

trivy:
  enabled: true

漏洞扫描 UI

激活内容信任

Harbor 支持现代 OCI 制品签名机制,如 CosignNotation。通过 UI 或 Harbor API 在项目层面强制内容信任,只允许经过加密签名的镜像。

内容信任 UI

保持 Harbor 更新

定期升级 Harbor Helm Chart 以及底层的 Kubernetes 组件,以获取最新的安全补丁和 bug 修复:

helm repo update
helm upgrade harbor harbor/harbor -f values.yaml

存储考虑

高效且可靠的存储对 Harbor 的性能和稳定性至关重要。

  • 进一步的存储建议(例如共享存储后端、性能调优、备份策略)将在此处详细说明。
Back to Blog

相关文章

阅读更多 »