容器镜像仓库搭建实战:Harbor私有仓库部署与安全扫描配置

Harbor容器镜像仓库架构与部署价值

Harbor是VMware开源的企业级容器镜像仓库,在DevOps实践和CI/CD流水线中承担镜像存储、版本管理、安全扫描和访问控制等核心职能。与Docker Hub等公共仓库相比,私有Harbor仓库部署在内网,镜像传输不经过公网,Push和Pull速度显著提升,同时满足数据合规要求。

Harbor的核心组件包括:Portal(Web管理界面)、Core(API服务)、Registry(镜像存储后端)、JobService(异步任务)、Trivy(漏洞扫描引擎)、Notary(镜像签名)。Docker自动化部署场景下,Harbor通过Docker Compose编排这些组件,安装过程约5分钟。

Docker Compose方式部署Harbor

Harbor官方提供离线安装包,包含所有依赖镜像,适合内网环境部署。

# 下载Harbor离线安装包
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar xzf harbor-offline-installer-v2.11.0.tgz
cd harbor

# 生成自签名TLS证书(生产环境建议使用正规CA证书)
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=Harbor-CA"

openssl genrsa -out harbor.key 4096
openssl req -new -key harbor.key -out harbor.csr -subj "/CN=harbor.yunthe.com"
openssl x509 -req -in harbor.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.crt -days 3650

# 配置harbor.yml
cp harbor.yml.tmpl harbor.yml
cat > harbor.yml << 'YAMLEOF'
hostname: harbor.yunthe.com
http:
  port: 80
https:
  port: 443
  certificate: /data/harbor/harbor.crt
  private_key: /data/harbor/harbor.key
harbor_admin_password: Harbor12345
database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 100
data_volume: /data/harbor
trivy:
  ignore_unfixed: false
  skip_update: false
  offline_scan: false
  security_check: vuln
jobservice:
  max_job_workers: 10
notification:
  webhook:
    enabled: false
YAMLEOF

# 执行安装(含Trivy扫描组件)
./install.sh --with-trivy

# 验证服务状态
docker-compose ps
# 所有组件状态应为 healthy

Harbor访问控制与项目配置

Harbor通过项目(Project)隔离镜像资源,每个项目可设置公开或私有访问权限。网站运维场景中,建议按团队或服务维度创建项目。

# Docker客户端配置信任Harbor证书
# 将自签名CA证书复制到Docker信任目录
mkdir -p /etc/docker/certs.d/harbor.yunthe.com
cp ca.crt /etc/docker/certs.d/harbor.yunthe.com/ca.crt

# 重启Docker
systemctl restart docker

# 登录Harbor
docker login harbor.yunthe.com
# Username: admin
# Password: Harbor12345

# 推送镜像
docker tag nginx:1.25 harbor.yunthe.com/web/nginx:1.25
docker push harbor.yunthe.com/web/nginx:1.25

# 拉取镜像
docker pull harbor.yunthe.com/web/nginx:1.25

Harbor支持基于角色的访问控制(RBAC):项目管理员可配置开发者、访客、维护者等角色,限制不同用户对镜像的推送和拉取权限。通过LDAP/OIDC集成,可实现与企业身份系统的统一认证。

Trivy镜像安全扫描配置

Harbor集成的Trivy引擎在镜像Push时自动触发漏洞扫描,识别镜像中的CVE漏洞、依赖包版本风险和配置问题。镜像安全扫描是容器安全防护的第一道防线。

# 在harbor.yml中配置Trivy扫描参数
trivy:
  ignore_unfixed: false        # 是否忽略未修复的漏洞
  skip_update: false           # 是否跳过漏洞库更新
  offline_scan: false          # 离线扫描模式
  security_check: vuln         # 安全检查类型:vuln(漏洞)/secret(密钥)
  timeout: 5m                  # 单次扫描超时
  server:
    mode: standalone           # 独立扫描模式
  vuln_type: "os,library"      # 扫描OS和库漏洞

# 查看扫描报告(API方式)
curl -u admin:Harbor12345 \
  "https://harbor.yunthe.com/api/v2.0/projects/web/repositories/nginx/artifacts/1.25/additions/vulnerabilities"

# 配置镜像安全策略:阻止有严重漏洞的镜像部署
# 在Harbor Web界面: 项目 -> 配置 -> 漏洞扫描策略
# 设置:Critical级别漏洞镜像禁止Pull

Trivy漏洞库每周更新,覆盖CVE、NVD等主流漏洞数据库。对于无法联网的内网环境,可通过offline_scan模式配合手动导入漏洞库文件实现离线扫描。

镜像签名与复制策略

Harbor支持Notary镜像签名,确保镜像在传输过程中未被篡改。容器镜像仓库的复制功能可实现多数据中心间的镜像同步。

# 启用镜像签名(需在安装时添加--with-notary参数)
./install.sh --with-trivy --with-notary

# 签名镜像
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://harbor.yunthe.com:4443
docker push harbor.yunthe.com/web/nginx:1.25
# 首次推送会提示设置签名密钥

# 配置远程复制(目标仓库为另一个Harbor实例)
# 在Harbor Web界面: 复制 -> 新建规则
# 源项目: web
# 目标: https://harbor-backup.yunthe.com
# 模式: 基于事件(实时同步)
# 过滤: nginx*

存储清理与配额管理

长期运行的Harbor会积累大量历史镜像层,需要定期清理无引用的Blob数据并设置项目存储配额。

# 配置Garbage Collection(垃圾回收)
# 在harbor.yml中设置
# 停止Harbor服务
docker-compose stop

# 执行垃圾回收(删除未被引用的Blob)
docker run -it --name gc --rm \
  -v /data/harbor:/storage \
  goharbor/registry-photon:v2.11.0 garbage-collect \
  /etc/registry/config.yml

# 重启Harbor
docker-compose start

# 设置项目存储配额(API方式)
curl -X PUT -u admin:Harbor12345 \
  -H "Content-Type: application/json" \
  -d '{"metadata":{"public":"false","storage_limit":"50"}}' \
  "https://harbor.yunthe.com/api/v2.0/projects/web"

# 查看项目存储使用情况
curl -u admin:Harbor12345 \
  "https://harbor.yunthe.com/api/v2.0/projects/web/summary" | jq .quota

建议配置定时GC任务(如每周日凌晨执行),配合存储配额限制,避免磁盘空间耗尽。对于Kubernetes容器编排环境,Harbor还可作为Chart仓库存储Helm Chart包,实现应用模板的统一管理。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/rong-qi-jing-xiang-cang-ku-da-jian-shi-zhan-harbor-si-you/

(0)
小编小编
上一篇 3小时前
下一篇 3小时前

相关推荐