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/