Harbor 介绍
Harbor 是一个开源的 云原生制品(artifact)仓库,最初由 VMware 开发并捐赠给 CNCF(Cloud Native Computing Foundation),现已成为 CNCF 的毕业项目。Harbor 主要用于存储、签名和扫描容器镜像(如 Docker 镜像),同时也支持 Helm Chart、OCI Artifacts 等多种云原生制品。
Harbor 的核心功能
环境准备
系统概况
系统版本: Rocky Linux 8.10
主机名: harbor
IP: 10.0.0.4/24
Docker
添加中科大源:
1 2 3 4 5 6 7 8
| [jhon@harbor ~]$ sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
[jhon@harbor ~]$ sudo rpm --import https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg
[jhon@harbor ~]$ dnf list docker-ce --showduplicates
|
Harbor
使用离线安装模式, Harbor 版本 v2.13.2
安装包下载地址: harbor-offline-installer-v2.13.2.tgz
部署
将离线的资源上传到 harbor 主机上
安装 Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [jhon@harbor ~]$ sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
[jhon@harbor ~]$ sudo systemctl enable --now docker
[jhon@harbor ~]$ sudo systemctl is-active docker
[jhon@harbor ~]$ sudo usermod -aG docker jhon
[jhon@harbor ~]$ newgrp docker
|
- 注意: docker-compose-plugin 是新版 Docker Compose(v2+),以插件形式集成,命令为 docker compose(注意中间是空格,不是 -)。
证书管理
创建内部 CA 证书 (证书颁发机构)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [jhon@harbor ~]$ sudo mkdir -p /data/cert [jhon@harbor ~]$ cd /data/cert
[jhon@harbor cert]$ sudo openssl genrsa -out ca.key 4096
[jhon@harbor cert]$ sudo openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=MyHarborCA"
[jhon@harbor cert]$ ls ca.crt ca.key
|
/data/cert/ca.key → CA 私钥(绝对保密!不要外传!)
/data/cert/ca.crt → CA 证书(要分发给所有客户端信任)
用 “MyHarborCA” CA证书给 Harbor 创建一个证书
准备配置文件 支持域名:harbor.example.com
1 2 3 4 5 6 7 8
|
cat > /dev/stdout <<EOF | sudo tee v3.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = DNS:harbor.example.com EOF
|
生成 Harbor 证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [jhon@harbor cert]$ sudo openssl genrsa -out harbor.key 4096 [jhon@harbor cert]$ sudo chmod 600 harbor.key
[jhon@harbor cert]$ sudo openssl req -new -key harbor.key -out harbor.csr -subj "/CN=harbor.example.com"
sudo openssl x509 -req \ -in harbor.csr \ -CA ca.crt \ -CAkey ca.key \ -CAcreateserial \ -out harbor.crt \ -days 3650 \ -sha256 \ -extfile v3.ext
|
让系统信任自建 CA
1 2 3 4 5 6 7 8 9
| sudo cp /data/cert/ca.crt /etc/pki/ca-trust/source/anchors/harbor-ca.crt
sudo update-ca-trust
[jhon@harbor cert]$ trust list | grep -i harbor label: MyHarborCA
|
安装 Harbor
解压并移动
1 2 3 4 5 6 7
| [jhon@harbor ~]$ ls harbor-offline-installer-v2.13.2.tgz harbor-offline-installer-v2.13.2.tgz [jhon@harbor ~]$ tar -zxf harbor-offline-installer-v2.13.2.tgz [jhon@harbor ~]$ sudo mv harbor /usr/local/ [jhon@harbor ~]$ cd /usr/local/harbor/ [jhon@harbor harbor]$ ls common.sh harbor.v2.13.2.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
|
导入 harbor 镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [jhon@harbor harbor]$ docker load -i harbor.v2.13.2.tar.gz [jhon@harbor harbor]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE goharbor/harbor-exporter v2.13.2 25f5a194d298 3 months ago 132MB goharbor/redis-photon v2.13.2 4153f964b209 3 months ago 166MB goharbor/trivy-adapter-photon v2.13.2 60672d380012 3 months ago 390MB goharbor/harbor-registryctl v2.13.2 af207ccbe6db 3 months ago 166MB goharbor/registry-photon v2.13.2 a0a146d033c4 3 months ago 87.4MB goharbor/nginx-photon v2.13.2 aa191f956a23 3 months ago 151MB goharbor/harbor-log v2.13.2 9835b2c97248 3 months ago 163MB goharbor/harbor-jobservice v2.13.2 7678c8e2cc6e 3 months ago 179MB goharbor/harbor-core v2.13.2 a754b7d40a2a 3 months ago 200MB goharbor/harbor-portal v2.13.2 2cdbbbaec695 3 months ago 159MB goharbor/harbor-db v2.13.2 d454060ee4b6 3 months ago 273MB goharbor/prepare v2.13.2 53905b30703f 3 months ago 208MB
|
修改 harbor 配置文件
这里不启用 mTLS, 之后有时间在配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [jhon@harbor harbor]$ cp harbor.yml.tmpl harbor.yml
[jhon@harbor harbor]$ vim harbor.yml
5 hostname: harbor.example.com
8 10
17 certificate: /data/cert/harbor.crt 18 private_key: /data/cert/harbor.key 47 harbor_admin_password: <登陆密码>
|
预安装环境检查,生成项目文件
1 2 3 4
| [jhon@harbor harbor]$ ./prepare ...output omitted... ca file /hostfs/data/secret/tls/harbor_internal_ca.crt is not exist ...output omitted...
|
注意:
1 2
| Harbor 检测到你可能想使用内部 CA 证书(用于信任外部 HTTPS 服务,比如后端存储、Redis 等),但没找到对应的文件。 不过——如果你只是用自签名证书给 Harbor 自己提供 HTTPS 访问(最常见场景),这个警告可以忽略!
|
安装
有 2 种方式:
install.sh
docker compose -f docker-compose.yml up -d
安装包提供的 install.sh 更加推荐,会做得更加全面。
1 2 3 4 5 6 7 8
| [jhon@harbor harbor]$ sudo ./install.sh
[jhon@harbor harbor]$ docker compose ls -a NAME STATUS CONFIG FILES harbor running(9) /usr/local/harbor/docker-compose.yml
|
访问
由于是内网访问,所以需要配置 hosts 文件。
1 2
| vim /etc/hosts 添加内容 <你的harbor主机 ip> harbor.example.com
|
浏览器访问:https://harbor.example.com
登陆界面

控制界面

配置 systemd 管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| [jhon@harbor harbor]$ sudo vim /etc/systemd/system/harbor.service [Unit] Description=Harbor Container Registry After=docker.service Requires=docker.service Documentation=https://goharbor.io
[Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/usr/local/harbor ExecStart=/usr/bin/docker compose -f /usr/local/harbor/docker-compose.yml up -d ExecStop=/usr/bin/docker compose -f /usr/local/harbor/docker-compose.yml down ExecReload=/usr/bin/docker compose -f /usr/local/harbor/docker-compose.yml up -d TimeoutStartSec=600 TimeoutStopSec=180
[Install] WantedBy=multi-user.target
[jhon@harbor harbor]$ sudo systemctl daemon-reload
[jhon@harbor harbor]$ sudo systemctl enable --now harbor.service
|
使用 Harbor
等到 docker 和 k8s 在补充