Harbor on Kubernetes:从零到生产构建企业级容器镜像仓库

📅 发布时间:2026/7/6 4:54:28 👁️ 浏览次数:
Harbor on Kubernetes:从零到生产构建企业级容器镜像仓库
Harbor on Kubernetes:从零到生产构建企业级容器镜像仓库目录引言Harbor 概述环境准备使用 Helm 部署 Harbor核心功能配置生产环境最佳实践实际案例场景监控与运维故障排查总结引言随着云原生技术的普及,容器化应用已成为企业数字化转型的核心驱动力。Kubernetes 作为容器编排的事实标准,需要一个安全、可靠、高性能的容器镜像仓库来支撑整个 DevOps 流程。Harbor 是由 VMware 中国团队开源的企业级容器镜像仓库项目,现已成为 CNCF(云原生计算基金会)的毕业项目。它提供了企业级用户所需的安全扫描、镜像复制、漏洞管理等功能。本文将带你从零开始,在 Kubernetes 集群上部署生产级的 Harbor,并分享实际生产环境中的最佳实践和案例。Harbor 概述核心架构Harbor 由以下核心组件构成:┌─────────────────────────────────────────────────────────────┐ │ Harbor 架构 │ ├─────────────────────────────────────────────────────────────┤ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Portal │ │ Core │ │ Job │ │ Registry │ │ │ │ (UI) │ │ (API) │ │ Services │ │ (存储) │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Token │ │ Redis │ │ Database │ │ Trivy │ │ │ │ Service │ │ (缓存) │ │ (PostgreSQL)│ │(扫描器) │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────┘核心功能特性功能描述镜像管理支持 Docker、Helm Chart、CNAB 等多种制品格式安全扫描集成 Trivy 进行漏洞扫描,支持 CVE 数据库访问控制基于角色的访问控制(RBAC),支持 LDAP/AD 集成镜像复制支持多实例间镜像同步,跨地域分发内容信任支持 Notary 进行镜像签名和验证审计日志完整的操作审计追踪环境准备硬件要求# 生产环境推荐配置 minimum: cpu: 4 核 memory: 8GB storage: 100GB recommended: cpu: 8 核 memory: 16GB storage: 500GB+软件要求# Kubernetes 集群版本要求 kubectl version --short # 输出示例: # Client Version: v1.28.0 # Server Version: v1.28.0 # Helm 版本要求 helm version # 输出示例: # version.BuildInfo{Version:"v3.12.0", ...} # 存储类检查(必须存在) kubectl get storageclass # 输出示例: # NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE # standard (default) rancher.io/local-path Delete WaitForFirstConsumer命名空间准备# 创建 Harbor 命名空间 kubectl create namespace harbor # 创建 TLS 证书 Secret(生产环境强烈建议使用有效证书) kubectl create secret tls harbor-tls \ --cert=path/to/tls.crt \ --key=path/to/tls.key \ -n harbor # 或者使用 cert-manager 自动管理证书 kubectl apply -f - EOF apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: harbor-tls namespace: harbor spec: secretName: harbor-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer dnsNames: - harbor.example.com EOF使用 Helm 部署 Harbor添加 Helm Chart 仓库# 添加 Harbor 官方 Helm 仓库 helm repo add harbor https://helm.goharbor.io helm repo update # 搜索可用的 Harbor Chart 版本 helm search repo harbor --versions基础部署(开发/测试环境)# 创建 values-dev.yaml 配置文件 cat values-dev.yaml EOF expose: type: ingress tls: enabled: true certSource: secret secret: secretName: harbor-tls ingress: hosts: core: harbor.example.com notary: notary.example.com externalURL: https://harbor.example.com persistence: enabled: true persistentVolumeClaim: registry: storageClass: "standard" size: 50Gi database: storageClass: "standard" size: 10Gi redis: storageClass: "standard" size: 5Gi database: type: internal redis: type: internal trivy: enabled: true EOF # 安装 Harbor helm install harbor harbor/harbor \ -n harbor \ -f values-dev.yaml \ --version 1.13.0 # 检查部署状态 kubectl get pods -n harbor kubectl get svc -n harbor kubectl get ingress -n harbor生产环境高可用部署# values-prod.yaml - 生产环境配置 expose: type: ingress tls: enabled: true certSource: secret secret: secretName: harbor-tls ingress: hosts: core: harbor.example.com annotations: nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" externalURL: https://harbor.example.com # 禁用内部组件,使用外部服务 database: type: external external: host: postgresql-ha.database.svc port: 5432 username: harbor password: "your-secure-password" database: harbor sslmode: require redis: type: external external: host: redis-ha.database.svc port: 6379 password: "your-redis-password" # 对象存储配置(推荐使用 S3 兼容存储) persistence: enabled: true persistentVolumeClaim: database: storageClass: "premium-ssd" size: 50Gi redis: storageClass: "premium-ssd" size: 10Gi trivy: storageClass: "premium-ssd" size: 20Gi imageChartStorage: type: s3 s3: region: cn-north-1 bucket: harbor-images accesskey: YOUR_ACCESS_KEY secretkey: YOUR_SECRET_KEY regionendpoint: https://s3.cn-north-1.myhuaweicloud.com encrypt: false keyid: "" secure: true v4auth: true chunksize: "52428800" rootdirectory: /harbor storageclass: STANDARD # 高可用副本配置 portal: replicas: 2 resources: requests: memory: 256Mi cpu: 100m limits: memory: 512Mi cpu: 500m core: replicas: 3 resources: requests: memory: 512Mi cpu: 250m limits: memory: 2Gi cpu: 1000m jobservice: replicas: 2 maxJobWorkers: 10 registry: replicas: 2 resources: requests: memory: 256Mi cpu: 100m limits: memory: 1Gi cpu: 500m trivy: enabled: true replicas: 2 resources: requests: memory: 512Mi cpu: 200m limits: memory: 2Gi cpu: 1000m # 日志配置 logLevel: INFO# 生产环境部署 helm install harbor harbor/harbor \ -n harbor \ -f