Harbor
介绍
Harbor 是一个开源的容器镜像仓库,旨在通过为用户提供高效、安全和可扩展的镜像管理功能,帮助企业更好地管理容器镜像。
访问控制:提供基于角色的访问控制(RBAC),可以限制用户对镜像的操作权限。多种身份认证支持: LDAP、OAuth 等外部认证系统。
ps: Docker reigstry与 Distribution:
Docker Registry 使用了 Distribution 的核心库,用于处理镜像的上传、下载和存储。
Distribution 是一个开源的底层实现,Registry 在其之上扩展了用户认证、访问控制等功能。
部署
以下是使用 Helm 部署 Harbor 的完整步骤。Harbor 是一个开源的镜像仓库,支持多种镜像格式,适合在 Kubernetes 环境中使用。我们将利用官方的 Harbor Helm Chart 来部署。
1. 环境准备
确保以下工具已安装:
Kubernetes 集群(可以使用 Minikube、Kubeadm 或云服务提供的 Kubernetes 集群)
kubectl(Kubernetes 命令行工具)
Helm(版本建议 v3 或以上)
准备必要的资源:
域名(用于访问 Harbor 的 Web UI)
配置证书(可选,推荐使用自签名证书或 Let's Encrypt)
2. 添加 Harbor Helm Chart 仓库
helm repo add harbor https://helm.goharbor.io
helm repo update
3. 创建命名空间
为 Harbor 创建一个单独的命名空间(非必须,但推荐)。
kubectl create namespace harbor
4. 获取默认 values.yaml
运行以下命令下载 Harbor Helm Chart 的 values.yaml
文件,并根据实际需求修改配置。
helm show values harbor/harbor > values.yaml
打开 values.yaml
,需要关注以下关键配置:
1. 域名配置
配置 Harbor 的访问地址(用于 Web UI 和 API 访问)。
expose:
type: ingress
ingress:
hosts:
core: "harbor.example.com" # 将此替换为你的域名
2. HTTPS 配置
如果有证书,可以配置 TLS:
expose:
ingress:
annotations: {}
tls:
- secretName: harbor-tls
hosts:
- harbor.example.com
如果没有证书,先使用 http
访问,将 type
修改为 clusterIP
,稍后可以配置 HTTPS:
expose:
type: clusterIP
3. 持久化存储配置
为持久化 Harbor 数据,需设置存储卷:
persistence:
enabled: true
persistentVolumeClaim:
registry:
size: 100Gi # 镜像存储大小
jobservice:
size: 1Gi
database:
size: 5Gi
redis:
size: 2Gi
trivy:
size: 5Gi
4. 数据库配置
默认会使用 Chart 自带的 PostgreSQL 和 Redis,但也可以配置外部数据库。
5. 其他配置
设置管理员密码:
harborAdminPassword: "YourStrongPassword"
5. 部署 Harbor
在配置完成的 values.yaml
文件基础上,执行以下命令开始部署:
helm install harbor harbor/harbor -n harbor -f values.yaml
6. 验证部署
运行以下命令,确认 Harbor 的 Pod 和服务正常运行:
kubectl get pods -n harbor
kubectl get svc -n harbor
如果配置了 Ingress,还需要验证 Ingress 是否生效:
kubectl get ingress -n harbor
7. 访问 Harbor
通过浏览器访问 http://harbor.example.com
或 https://harbor.example.com
(取决于是否配置了 TLS)。
默认管理员账号为 admin
,密码为配置文件中的 harborAdminPassword
。
8. 自签名证书(可选)
如果没有正式的域名和证书,可以生成自签名证书并挂载到 Harbor:
生成证书
openssl req -newkey rsa:4096 -nodes -keyout harbor.key -x509 -days 365 -out harbor.crt
创建 Kubernetes Secret
kubectl create secret tls harbor-tls --cert=harbor.crt --key=harbor.key -n harbor
修改 values.yaml
文件
确保 tls
配置指向创建的 Secret:
expose:
ingress:
tls:
- secretName: harbor-tls
hosts:
- harbor.example.com
重新应用:
helm upgrade harbor harbor/harbor -n harbor -f values.yaml
9. 配置 Docker 客户端(信任自签名证书)
编辑 Docker 客户端的配置文件(/etc/docker/daemon.json
):
{
"insecure-registries": ["harbor.example.com"],
"debug": true,
"experimental": false
}
重启 Docker:
sudo systemctl restart docker
10. 管理和使用 Harbor
通过 Web UI 管理项目、用户和镜像。
在 Kubernetes 集群中使用时,可配置 Harbor 为镜像仓库,直接拉取镜像。