Harbor安装

1.安装

harbor下载地址

https://github.com/goharbor/harbor/releases

安装 Docker Compose

必须安装。Harbor v2.x+ 推荐使用 Docker Compose V2。

shell 复制代码
# 从 GitHub 直接下载 Docker Compose V2 二进制文件(推荐)
# 请根据你的架构选择正确的版本,通常是 x86_64
curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予可执行权限
chmod +x /usr/local/bin/docker-compose
# 创建符号链接以便在任意目录下使用
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version

解压 harbor

shell 复制代码
sudo mkdir -p /opt/harbor
cd /opt

# 先复制过来
sudo cp /home/yantao/下载/harbor-offline-installer-v2.14.1-rc1.tgz /opt/
cd /opt
sudo tar xzvf harbor-offline-installer-v2.14.1-rc1.tgz
sudo rm harbor-offline-installer-v2.14.1-rc1.tgz

# 进入新的 harbor 目录
cd harbor

配置数据目录配置

shell 复制代码
# 复制配置模板
sudo cp harbor.yml.tmpl harbor.yml

# 编辑配置
sudo vim harbor.yml
yml 复制代码
hostname: localhost

http:
  port: 80

harbor_admin_password: Harbor12345

# 修改数据目录到新位置
data_volume: /opt/harbor-data

log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /opt/harbor-logs

然后下面是禁用https的部分

yml 复制代码
#https:
  # https port for harbor, default is 443
  #  port: 443
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

创建目录结构

shell 复制代码
# 创建数据目录
sudo mkdir -p /opt/harbor-data
sudo chown -R 10000:10000 /opt/harbor-data

# 创建日志目录
sudo mkdir -p /opt/harbor-logs
sudo chown -R 10000:10000 /opt/harbor-logs

# 设置 harbor 目录权限
sudo chown -R $USER:$USER /opt/harbor

安装 Harbor

shell 复制代码
# 在 /opt/harbor 目录中安装
cd /opt/harbor
sudo ./install.sh
shell 复制代码
[Step 5]: starting Harbor ...
[+] Running 10/10
 ✔ Network harbor_harbor        Created                                                                                             0.0s 
 ✔ Container harbor-log         Started                                                                                             0.6s 
 ✔ Container harbor-db          Started                                                                                             0.9s 
 ✔ Container redis              Started                                                                                             0.9s 
 ✔ Container registryctl        Started                                                                                             0.8s 
 ✔ Container harbor-portal      Started                                                                                             0.9s 
 ✔ Container registry           Started                                                                                             0.8s 
 ✔ Container harbor-core        Started                                                                                             1.0s 
 ✔ Container nginx              Started                                                                                             1.2s 
 ✔ Container harbor-jobservice  Started                                                                                             1.2s 
✔ ----Harbor has been installed and started successfully.----

安装成功后的步骤

第1步:验证服务状态

bash

shell 复制代码
# 检查所有服务是否正常运行
docker-compose ps

# 应该看到所有服务状态都是 "Up" 或 "healthy"

第2步:配置 Docker 客户端

bash

shell 复制代码
# 编辑 Docker 配置
sudo vim /etc/docker/daemon.json

添加以下内容(因为使用的是 HTTP):

json 复制代码
{
  "insecure-registries": ["localhost"]
}
shell 复制代码
# 测试登录 Harbor
docker login localhost
# 用户名: admin
# 密码: Harbor12345

安装后的操作

  • 停止 Harbor :在 harbor 目录下运行 sudo docker-compose down
  • 重启 Harbor :在 harbor 目录下运行 sudo docker-compose up -d
  • 重新配置 :如果修改了 harbor.yml,需要运行 sudo ./prepare 更新配置,然后运行 sudo docker-compose up -d 重启服务。

比如修改80端口为8080

shell 复制代码
sudo vim harbor.yml
shell 复制代码
#你的修改
shell 复制代码
# 重新生成配置
sudo ./prepare
# 重新启动服务
sudo docker-compose up -d
  • 卸载 Harbor :在 harbor 目录下运行 sudo docker-compose down -v注意:这会删除所有容器,但会保留存储在 /data(或你配置的路径)的镜像数据。如果要彻底删除,需要手动删除该数据目录。

2.使用

登陆web

shell 复制代码
localhost:80

新建项目

  1. 新建项目
    1. 项目名称 development
    2. 访问级别 公开
shell 复制代码
    # 也可以创建更多项目
    production - 生产环境镜像

    tools - 工具类镜像

    base - 基础镜像

docker hub已经不行了,这是我曾经保存好的镜像

shell 复制代码
yantao@ubuntu22:~/文档/镜像$ ls |grep nginx
nginx-latest.tar

加载本地镜像文件

shell 复制代码
# 加载本地镜像文件
sudo docker load -i nginx-latest.tar

# 查看加载的镜像
docker images | grep nginx
WARNING: This output is designed for human readability. For machine-readable output, please use --format.
goharbor/nginx-photon:v2.14.1   51fa98e9c9f6        365MB          180MB   U    
nginx:latest                    0d17b565c37b        213MB         56.7MB   

推送镜像到 Harbor

shell 复制代码
# 登录 Harbor(如果还没有登录)
docker login localhost
# 用户名: admin
# 密码: Harbor12345

# 标记镜像(推送到您创建的项目)
docker tag nginx:latest localhost/development/nginx:latest

# 推送镜像到 Harbor
docker push localhost/development/nginx:latest

拉取测试

shell 复制代码
# 1. 删除本地镜像
docker rmi localhost/development/nginx:latest nginx:latest 2>/dev/null

# 2. 确认删除
echo "=== 删除后镜像列表 ==="
docker images | grep nginx || echo "没有 nginx 镜像"

# 3. 从 Harbor 拉取
echo "=== 开始从 Harbor 拉取镜像 ==="
docker pull localhost/development/nginx:latest

# 4. 验证拉取成功
echo "=== 拉取后镜像列表 ==="
docker images | grep nginx

# 5. 测试运行
echo "=== 测试运行镜像 ==="
docker run -d --name nginx-test -p 8080:80 localhost/development/nginx:latest
sleep 2
docker ps | grep nginx-test

# 6. 测试访问
echo "=== 测试访问 ==="
curl -s http://localhost:8080 | head -5

# 7. 清理
echo "=== 清理测试容器 ==="
docker stop nginx-test 2>/dev/null
docker rm nginx-test 2>/dev/null

重启脚本

复制代码
restart-harbor.sh
shell 复制代码
#!/bin/bash
# save as /usr/local/bin/restart-harbor.sh
cd /opt/harbor || exit 1
echo "Stopping Harbor..."
sudo docker-compose down
echo "Regenerating config..."
sudo ./prepare
echo "Starting Harbor..."
sudo docker-compose up -d
echo "Done."

----------------------------------

修改https

当然可以!以下是 Harbor 启用 HTTPS 并在 Kubernetes 节点安装证书 的完整、清晰、可复用的操作流程,适用于自建 Harbor + 私有 K8s 集群场景。

✅ Harbor 启用 HTTPS + Kubernetes 节点信任证书完整指南

环境假设:

  • Harbor 服务器 IP:192.168.31.130
  • Kubernetes 工作节点(worker)IP:172.16.157.130(可能有多个)
  • 操作系统:CentOS / RHEL / AlmaLinux
  • 容器运行时:containerd

第一步:在 Harbor 服务器生成带 SAN 的自签名证书

⚠️ 必须包含 Subject Alternative Name (SAN),否则 containerd 会拒绝连接!

bash 复制代码
# 进入 Harbor 证书目录
cd /opt/harbor/certs

# 创建 OpenSSL 配置文件
cat > harbor.cnf <<EOF
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = 192.168.31.130

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.31.130
EOF

# 生成私钥和证书
sudo openssl genrsa -out harbor.key 2048
sudo openssl req -x509 -new -nodes -key harbor.key \
  -days 3650 -out harbor.crt \
  -config harbor.cnf -extensions v3_req

# 验证 SAN 是否生效
openssl x509 -in harbor.crt -text -noout | grep -A1 "Subject Alternative Name"
# 应输出:IP Address:192.168.31.130

第二步:配置 Harbor 使用 HTTPS

编辑 /opt/harbor/harbor.yml

yaml 复制代码
hostname: 192.168.31.130

https:
  port: 443
  certificate: /your/path/to/certs/harbor.crt   # 实际路径如 /opt/harbor/certs/harbor.crt
  private_key: /your/path/to/certs/harbor.key

💡 如果之前是 HTTP,需取消注释 https 块,并确保路径正确。

重新生成配置并重启:

bash 复制代码
cd /opt/harbor
sudo ./prepare
sudo docker-compose down
sudo docker-compose up -d

验证 HTTPS 是否生效:

bash 复制代码
curl -k https://192.168.31.130
# 应返回 Harbor 登录页 HTML 或 401(说明 HTTPS 正常)

第三步:将 Harbor 证书分发到所有 Kubernetes 工作节点

📌 只需在运行 Pod 的节点(worker nodes)上操作,主节点通常不需要

对每个工作节点(例如 172.16.157.130)执行:

1. 拷贝证书到节点
bash 复制代码
# 在工作节点上执行(替换 yantao 为你的 Harbor 用户名)
scp yantao@192.168.31.130:/opt/harbor/certs/harbor.crt /tmp/harbor-ca.crt
2. 方法一(推荐):使用 containerd 的 certs.d 机制(最可靠)
bash 复制代码
# 创建 registry 专属证书目录
sudo mkdir -p /etc/containerd/certs.d/192.168.31.130

# 放入证书
sudo cp /tmp/harbor-ca.crt /etc/containerd/certs.d/192.168.31.130/ca.crt

📁 路径格式:/etc/containerd/certs.d/<registry-host>/ca.crt

3. 确保 containerd 启用了 config_path(关键!)

检查或编辑 /etc/containerd/config.toml

toml 复制代码
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"

如果文件不存在,先生成默认配置:

bash 复制代码
sudo containerd config default | sudo tee /etc/containerd/config.toml
4. 重启 containerd
bash 复制代码
sudo systemctl restart containerd

第四步:验证镜像拉取(在工作节点)

bash 复制代码
crictl pull 192.168.31.130/development/nginx:latest

✅ 成功输出:Image is up to date for sha256:...


第五步:部署测试 Pod(在主节点)

yaml 复制代码
# nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
spec:
  nodeName: 172.16.157.130  # 指定到已配置证书的 worker
  containers:
  - name: nginx
    image: 192.168.31.130/development/nginx:latest

应用并观察:

bash 复制代码
kubectl apply -f nginx-test.yaml
kubectl get pod nginx-test -o wide

✅ 状态应为 Running


🔒 补充建议

项目 建议
多个 worker 节点 编写脚本批量分发证书
使用域名 hostname 改为 harbor.local,并在 /etc/hosts 添加解析,证书 SAN 中加 DNS.1 = harbor.local
安全性 生产环境建议使用正式 CA 签发证书(如 Let's Encrypt 内网 ACME)

❌ 常见错误排查

错误信息 原因 解决
x509: certificate relies on legacy Common Name 证书无 SAN 重新生成带 SAN 的证书
certificate signed by unknown authority 节点未信任证书 检查 certs.d 目录 + config_path + 重启 containerd
connection refused Harbor 未启用 HTTPS 或防火墙阻断 检查 docker-compose psfirewall-cmd --list-ports

✅ 按照以上流程操作,即可实现 安全、稳定、可扩展 的 Harbor + Kubernetes 镜像拉取架构。

需要我提供 一键部署脚本模板 吗?

--------------------------

当然可以!以下是 Docker 客户端配置 HTTPS 访问自建 Harbor 私有仓库 的完整、清晰、可复用的操作步骤,适用于 Ubuntu/CentOS 等 Linux 系统。


✅ Docker 客户端配置 HTTPS 访问 Harbor(自签名证书)

前提 :Harbor 已启用 HTTPS(使用带 SAN 的自签名证书),地址为 https://192.168.31.130


🔧 步骤 1:从 Harbor 服务器获取证书

Docker 客户端机器 上执行:

bash 复制代码
# 替换 yantao 为你的 Harbor 服务器用户名
scp yantao@192.168.31.130:/opt/harbor/certs/harbor.crt ./harbor-ca.crt

💡 确保证书包含 SAN(IP 地址):

bash 复制代码
openssl x509 -in harbor-ca.crt -text -noout | grep "IP Address"
# 应输出:IP Address:192.168.31.130

🔧 步骤 2:配置 Docker 专用证书目录(用于 /v2/ API)

bash 复制代码
sudo mkdir -p /etc/docker/certs.d/192.168.31.130
sudo cp harbor-ca.crt /etc/docker/certs.d/192.168.31.130/ca.crt

📁 路径说明:

  • /etc/docker/certs.d/<registry-host>/ca.crt
  • 文件名必须是 ca.crt

🔧 步骤 3:将证书加入系统信任库(关键!用于 /service/token OAuth 接口)

bash 复制代码
# 复制到系统 CA 目录
sudo cp harbor-ca.crt /usr/local/share/ca-certificates/harbor-192.168.31.130.crt

# 更新系统证书信任库
sudo update-ca-certificates

✅ 这一步确保 Docker 在请求 token 时也能验证证书。


🔧 步骤 4:重启 Docker 服务

bash 复制代码
sudo systemctl restart docker

🔧 步骤 5:登录 Harbor(如果项目是私有的)

bash 复制代码
docker login 192.168.31.130
# 输入用户名和密码(如 admin / your-password)

🟢 如果项目设为 Public,此步可跳过。


✅ 步骤 6:测试拉取镜像

bash 复制代码
docker pull 192.168.31.130/development/nginx:latest

成功输出:

复制代码
Status: Downloaded newer image for 192.168.31.130/development/nginx:latest

📝 补充说明

配置项 作用
/etc/docker/certs.d/... 用于 Docker Registry v2 API(如 /v2/...
系统 CA 证书库 (update-ca-certificates) 用于 OAuth token endpoint(/service/token)等通用 HTTPS 请求
docker login 访问私有项目必需;公开项目无需登录

🚫 常见错误避免

  • ❌ 只配 /etc/docker/certs.d/ → token 请求失败
  • ❌ 证书无 SAN(仅 CN)→ TLS 验证失败
  • ❌ 未重启 Docker → 配置不生效
  • ❌ 使用 Snap Docker → 无法读取 /etc/docker/certs.d/(建议用官方 APT 安装)

🧩 一键配置脚本(可选)

bash 复制代码
#!/bin/bash
HARBOR_IP="192.168.31.130"
HARBOR_USER="yantao"

# 1. 获取证书
scp ${HARBOR_USER}@${HARBOR_IP}:/opt/harbor/certs/harbor.crt ./harbor-ca.crt

# 2. Docker 证书
sudo mkdir -p /etc/docker/certs.d/${HARBOR_IP}
sudo cp harbor-ca.crt /etc/docker/certs.d/${HARBOR_IP}/ca.crt

# 3. 系统信任
sudo cp harbor-ca.crt /usr/local/share/ca-certificates/harbor-${HARBOR_IP}.crt
sudo update-ca-certificates

# 4. 重启 Docker
sudo systemctl restart docker

echo "✅ 配置完成!请运行 'docker login ${HARBOR_IP}'(如需)"

✅ 按照以上步骤操作,即可安全、稳定地通过 HTTPS 使用 Docker 拉取/推送 Harbor 镜像。

相关推荐
IsPrisoner2 小时前
从 Docker 到 Kubernetes:一次“工程视角”的 K8s 核心概念深度梳理
docker·容器·kubernetes
liuxuzxx3 小时前
containerd的CPU过高的问题排查
容器·性能优化·kubernetes
看-清4 小时前
Docker离线安装部署xxl-job流程
运维·docker·容器
孤岛悬城4 小时前
47 Docker镜像编排
docker·容器·云计算
忙里偷闲学python5 小时前
ceph介绍和安装
linux·ceph·kubernetes
隔壁阿布都5 小时前
Docker 安装 MySQL 8.0
mysql·docker·容器
RustFS7 小时前
RustFS 如何实现对象存储的前端直传?
vue.js·docker·rust
摇滚侠7 小时前
40分钟的Docker实战攻略,一期视频精通Docker
运维·docker·容器
忍冬行者7 小时前
kubeadm安装的k8s集群涉及etcd数据库的参数优化
数据库·kubernetes·etcd
G_H_S_3_7 小时前
【网络运维】Docker网络:基础与实战
linux·运维·网络·docker