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 镜像。

相关推荐
❀͜͡傀儡师1 小时前
docker 部署OnlyOffice实现在线编辑Word文档
docker·容器·word
MyFreeIT2 小时前
Docker Manual
运维·docker·容器
修己xj4 小时前
Linux系统离线安装Docker完整指南
docker
周杰伦_Jay5 小时前
【 Kubernetes(K8s)完全指南】从入门到实战(含命令+配置+表格对比)
云原生·容器·kubernetes
__beginner__5 小时前
docker安装influxdb
运维·docker·容器
Empty_7777 小时前
K8S-daemonset控制器
云原生·容器·kubernetes
todoitbo7 小时前
openEuler 云原生实战:Docker Compose 部署 Nextcloud 企业级私有云
docker·云原生·容器·openeuler
一条懒鱼6668 小时前
K8S-daemonset控制器
云原生·容器·kubernetes
米花町的小侦探9 小时前
Rocky安装k8s
kubernetes