Harbor私有镜像仓库入门实战:从部署配置到镜像扫描与权限管理
Harbor私有镜像仓库入门实战:从部署配置到镜像扫描与权限管理
一、Harbor是什么
Harbor 是 CNCF 毕业的云原生私有镜像仓库,比 Docker Registry 多做了企业最关心的几件事:
| 能力 | 说明 |
|---|---|
| 项目隔离 | 每个项目独立存放镜像、成员与权限 |
| RBAC 权限 | 系统管理员、项目管理员、开发、访客、匿名五类角色 |
| 镜像扫描 | 对接 Trivy,自动检出 CVE 漏洞 |
| 镜像签名 | 基于 Notary / Cosign 保障供应链安全 |
| 保留策略 | 自动清理 tag,回收存储 |
团队从"一台机器跑 docker run"走向"K8s 多集群生产化"后,镜像从哪来、谁可以推、哪个版本有漏洞,必须由镜像仓库回答。
二、部署 Harbor
测试环境可用 Docker Compose,生产推荐 Helm。
tar zxf harbor-offline-installer-v2.10.0.tgz && cd harbor
vi harbor.yml # 改 hostname、数据库与 admin 密码
./install.sh
hostname: harbor.example.com
harbor_db:
password: Harbor@12345
harbor_admin_password: Harbor@12345
访问 http://harbor.example.com,用 admin / Harbor@12345 登录,上线前务必改掉默认密码。
生产要点:外部 PostgreSQL、Redis 集群、对象存储替代本地磁盘;必配 HTTPS 并设置 externalURL。
三、基本使用
对象模型是项目 → 仓库 → 制品 → 标签。新建项目 myapp 后,在「成员」页给开发人员分配开发角色(可推拉删),给只读用户分配访客。
推送镜像:
docker login harbor.example.com -u admin
docker tag myapp:1.0.0 harbor.example.com/myapp/myapp:1.0.0
docker push harbor.example.com/myapp/myapp:1.0.0
K8s 拉取私有镜像需要 Robot 账户(只读足够):
kubectl create secret docker-registry harbor-secret \
--docker-server=harbor.example.com \
--docker-username='robot$myapp-pull' \
--docker-password='<token>'
spec:
containers:
- name: myapp
image: harbor.example.com/myapp/myapp:1.0.0
imagePullSecrets:
- name: harbor-secret
四、镜像扫描与漏洞治理
Harbor 默认集成 Trivy,镜像推送后自动扫描,列表里直接显示 CVE 等级。
推荐开启阻断策略 Prevent images with severity >= Critical from being pushed,高危镜像直接进不了仓库,比事后人工复核有效得多。
五、常见坑
- 没改默认密码 → 上线前必改
- 客户端写错 registry → 拉私有镜像必须写完整域名,不能用
docker.io - K8s 报 ImagePullBackOff → 九成是 secret 名字或命名空间不匹配
- 扫描任务不执行 → 检查 Trivy 服务与
harbor.yml中的trivy配置 - 磁盘被 tag 撑满 → 配置保留策略自动清理
备份只需三件套:/etc/harbor 配置、数据库、registry 存储。
六、小结
Harbor 把镜像仓库从存储服务升级成了 DevSecOps 平台:权限、扫描、签名、清理一条龙。入门阶段重点掌握项目隔离、Robot 账户拉取、扫描阻断策略三点,基本能覆盖绝大多数团队的落地需求。
- 点赞
- 收藏
- 关注作者
评论(0)