当前位置: 首页 > news >正文

替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案

经过验证 替换 Docker.io 的方式失败了, 以下的过程中还是需要设置 registry-mirrors 才行

以下是一篇详细教程,展示如何基于 openssl.conf 配置生成域名为 registry-1.docker.io 和 IP 地址为 172.16.20.20 的证书,构建 Harbor 服务。


环境准备

  1. 系统环境

    • 一台支持 Docker 和 Docker Compose 的主机(推荐 Linux 系统,例如 CentOS 7)。
    • 安装 openssldocker-compose
  2. 软件版本

    • Docker ≥ 20.x
    • Docker Compose ≥ 2.x
    • Harbor ≥ 2.0
  3. 网络配置

    • 确保主机 IP 地址为 172.16.20.20,域名 registry-1.docker.io 指向该 IP 地址(可在 /etc/hosts 配置)。

Step 1: 生成自签名证书

1.1 创建 openssl.conf

创建 openssl.conf 文件,内容如下:

[req]
default_bits        = 2048
default_keyfile     = harbor.key
distinguished_name  = req_distinguished_name
req_extensions      = v3_req
x509_extensions     = v3_ca
string_mask         = utf8only[req_distinguished_name]
countryName         = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = JiangSu
localityName        = Locality Name (eg, city)
localityName_default = NanJing
organizationalName = Organization Name (eg, company)
organizationalName_default = HT Inc.
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default  = registry-1.docker.io
commonName_max      = 64[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names[alt_names]
DNS.1 = registry-1.docker.io
IP.1 = 172.16.20.20

1.2 使用 OpenSSL 生成证书和私钥

# 生成私钥
openssl genrsa -out harbor.key 2048# 生成 CSR(证书签名请求) 只要 openssl.cnf默认值配置好, 如下命令一路回车即可
openssl req -new -key harbor.key -out harbor.csr -config openssl.cnf# 使用自签名证书
openssl x509 -req -in harbor.csr -signkey harbor.key -out harbor.crt -days 36500 -extensions v3_req -extfile openssl.cnf给授个权
chmod 777 harbor.*

生成的文件:

  • harbor.key: 私钥
  • harbor.crt: 证书


Step 2: 安装并配置 Harbor

2.1 下载 Harbor 安装包

从 Harbor 官方 GitHub 下载最新版本的安装包。

# 示例下载命令(根据最新版本替换链接)
wget https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz# 解压安装包
sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /opt/cd /opt/harbor

2.2 修改 Harbor 配置

编辑 harbor.yml 文件,设置域名、IP 和证书路径:

hostname: docker.iohttps:port: 443certificate: /opt/harbor/cert/harbor.crtprivate_key: /opt/harbor/cert/harbor.keyharbor_admin_password: Harbor12345data_volume: /data/harbor
log:level: inforotate_count: 50rotate_size: 200Mlocation: /var/log/harbor

harbor.crtharbor.key 拷贝到实际路径 /opt/harbor/cert 。


Step 3: 配置主机和客户端

3.1 配置 /etc/hosts

在主机和需要访问 Harbor 的客户端上,编辑 /etc/hosts 文件,添加以下内容:

172.16.20.20 registry-1.docker.io
172.16.20.20 docker.io可以使用如下命令快速添加echo "172.16.20.20 registry-1.docker.io" | sudo tee -a /etc/hosts
echo "172.16.20.20 docker.io" | sudo tee -a /etc/hostsecho: 输出内容 172.16.20.20 registry-1.docker.io。
| sudo tee -a /etc/hosts: 将输出内容以追加模式(-a)写入 /etc/hosts 文件。
sudo: 确保拥有权限修改系统文件。

3.2 配置 Docker 信任 Harbor

我们证书生成后, 在客户端, 需要信任证书

3.21 windows机器

 验证机器上机要安装上述 harbor.crt证书, 下载后双击安装, 存储到 受信任的根证书颁发机构

 Linux环境

3.22 centos7 上面, 复制证书

若遇到证书报错, 请参考解决办法 https://blog.csdn.net/gs80140/article/details/144662367icon-default.png?t=O83Ahttps://blog.csdn.net/gs80140/article/details/144662367

sudo cp harbor.crt /usr/local/share/ca-certificates/sudo yum install -y ca-certificatessudo update-ca-trust force-enable
sudo update-ca-trust extractcurl https://172.16.20.20 --verbose报错* About to connect() to 172.16.20.20 port 443 (#0)
*   Trying 172.16.20.20...
* Connected to 172.16.20.20 (172.16.20.20) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crtCApath: none
* Server certificate:
*       subject: CN=registry-1.docker.io,L=NanJing,ST=JiangSu,C=CN
*       start date: Dec 20 08:54:50 2024 GMT
*       expire date: Nov 26 08:54:50 2124 GMT
*       common name: registry-1.docker.io
*       issuer: CN=registry-1.docker.io,L=NanJing,ST=JiangSu,C=CN
* NSS error -8156 (SEC_ERROR_CA_CERT_INVALID)
* Issuer certificate is invalid.
* Closing connection 0
curl: (60) Issuer certificate is invalid.
More details here: http://curl.haxx.se/docs/sslcerts.htmlcurl performs SSL certificate verification by default, using a "bundle"of Certificate Authority (CA) public keys (CA certs). If the defaultbundle file isn't adequate, you can specify an alternate fileusing the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented inthe bundle, the certificate verification probably failed due to aproblem with the certificate (it might be expired, or the name mightnot match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, usethe -k (or --insecure) option.
3.23 Ubuntu 22.04上面

sudo cp harbor.crt /etc/ssl/certs/registry-1.docker.io.server.crtchmod 777 /etc/ssl/certs/registry-1.docker.io.server.crtsudo update-ca-certificates若遇到证书报错可以通过 curl-config --ca 命令查看用的是哪个证书将证书直接写进 /etc/ssl/certs/ca-certificates.crtcat harbor.crt >> /etc/ssl/certs/ca-certificates.crt

3.24  在每个 Docker 客户端 , 添加 Harbor 的地址为可信:
mkdir -p /etc/docker/certs.d/registry-1.docker.io
mkdir -p /etc/docker/certs.d/docker.io

上传 harbor.crt 并重命名为 ca.crt

cp harbor.crt /etc/docker/certs.d/registry-1.docker.io/ca.crtcp harbor.crt /etc/docker/certs.d/docker.io/ca.crt

重启 Docker 服务:

systemctl restart docker未重启时测试会报错docker pull mysql:8.0.32
Error response from daemon: Get "https://registry-1.docker.io/v2/": x509: certificate signed by unknown authority但是这样pull是可以的docker pull registry-1.docker.io/library/mysql:8.0.32

Step 4: 启动 Harbor 服务

4.1 安装依赖并启动

运行以下命令安装 Harbor 依赖并启动服务:

注意检查 上述 harbor.yml 文件中配置的存储路径 data_volume: /data/harbor 目录是否有残留的证书文件,需要清除掉, 否则不会被更新如果有旧的证书, 可以删除如下证书存放目录 rm -rf /data/harbor/secret/*sudo ./install.sh --with-trivy

4.2 验证服务运行状态


 

访问 https://registry-1.docker.io,使用默认管理员账号登录:

  • 用户名:admin
  • 密码:Harbor12345(可以在 harbor.yml 中修改)。


Step 5: 推送和拉取镜像

5.1 登录 Harbor

在 Docker 客户端执行以下命令:

docker login registry-1.docker.io
admin
输入密码: Harbor12345

输入 Harbor 的管理员账号和密码。

5.2 设置 docker默认镜像

vi /etc/docker/daemon.json  {"log-opts": {"max-size": "5m","max-file":"3"},"exec-opts": ["native.cgroupdriver=systemd"],"data-root": "/home/docker","registry-mirrors": ["https://registry-1.docker.io"]
}systemctl restart docker

5.3 推送镜像

标记一个测试镜像并推送到 Harbor:

docker tag mysql:8.0.32 registry-1.docker.io/library/mysql:8.0.32
docker push registry-1.docker.io/library/mysql:8.0.32根据上述 配置客户机信任Harbor解决报错: Get "https://registry-1.docker.io/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority报错: unauthorized: unauthorized to access repository: library/mysql, action: push: unauthorized to access repository: library/mysql, action: pushdocker push registry-1.docker.io/library/mysql:8.0.32 命令可以正常push

5.3 拉取镜像

从 Harbor 拉取镜像测试:

docker pull registry-1.docker.io/library/mysql:8.0.32 可以正常拉取docker pull mysql:8.0.32 只有设置了registry-mirrors才可以成功"registry-mirrors":["https://registry-1.docker.io"]

总结

通过以上步骤,你已经成功:

  1. 配置 OpenSSL 生成支持 IP 和域名的证书。
  2. 使用证书部署并配置 Harbor。
  3. 测试了镜像的推送和拉取。

这套方案适用于生产和开发环境中需要自签名证书的 Harbor 部署场景。

相关文章:

替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案

经过验证 替换 Docker.io 的方式失败了, 以下的过程中还是需要设置 registry-mirrors 才行 以下是一篇详细教程,展示如何基于 openssl.conf 配置生成域名为 registry-1.docker.io 和 IP 地址为 172.16.20.20 的证书,构建 Harbor 服务。 环境准备 系统环境…...

Python知识图谱框架

Python中用于构建知识图谱的框架和库有很多,它们各自有不同的特点和功能,适用于不同的应用场景。以下是一些常用的框架: 1. NetworkX 功能:NetworkX是一个用于创建、操作和研究复杂网络的Python库。它可以用于构建知识图谱&…...

elasticsearch 杂记

8.17快速安装与使用 系统:ubuntu 24 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录:cd ./elasticsearch-8.17.0 运行:./bin/elasticsearch 创…...

Text2Reward学习笔记

1. 环境配置 1.1 安装 PyTorch-1.13.1 pip install torch1.13.1cu116 torchvision0.14.1cu116 \ torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu1161.2 安装工具库 pip install stable-baselines31.8.0 wandb tensorboard \ -i https://pypi.tuna…...

KylinOS V10 SP3下编译openGauss与dolphin插件

编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...

NPM老是无法install,timeout?npm install失败

NPM老是无法install,timeout? 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…...

安卓project级别build.gradle和主module的build.gradle

以穿山甲为例讲解 如下图 gradle和gradle插件对应关系 Android Gradle 插件 8.7 版本说明 | Android Studio | Android Developers gradle对应在项目里的配置为 gradle插件对应的位置为...

大模型(LLM)提示工程(Prompt Engineering)初识

大模型提示工程(Prompt Engineering)是指设计和优化给定任务的输入提示,以便从大型语言模型(如GPT-4、GPT-3等)中获得最佳输出。其核心目标是通过合理设计输入内容(提示词或提示结构)&#xff0…...

大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…...

gaussian_splatting 构建submodules的diff-gaussian-rasterization失败报错

c:\program files\nvidia gpu computing toolkit\cuda\v11.8\include\crt/host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”: No such file or directory 配置: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin\nvcc.profil…...

template<typename Func, typename = void> 在类模板中的应用

1、基础语法 在 C 中&#xff0c;template<typename Func, typename void> 这一模板声明不仅仅限于函数模板&#xff0c;它在类模板中同样具有强大的应用。结合 SFINAE&#xff08;Substitution Failure Is Not An Error&#xff09;和 类型特征&#xff08;type trait…...

如何确保数据大屏的交互设计符合用户需求?(附实践资料下载)

确保数据大屏的交互设计符合用户需求是一个多步骤的过程&#xff0c;涉及到用户研究、设计原则、原型测试和持续迭代。以下是一些关键步骤和策略&#xff1a; 用户研究&#xff1a; 目标用户识别&#xff1a;明确大屏的目标用户群体&#xff0c;包括他们的背景、角色和需求。用…...

Linux使用教程及常用命令大全

Linux是一个开源的操作系统&#xff0c;具有高度的可定制性和可扩展性。以下是一份 Linux 使用教程及常用命令的总结&#xff0c;帮助你快速入门 Linux。 1. 安装 Linux 下载 Linux 安装程序&#xff08;可参考我的这篇文章&#xff09;&#xff1a;VMware虚拟机超详细安装Linu…...

基于openlayers 开发vue地图组件

先看效果 主要功能如下&#xff1a; 测量图源更换放大缩小地图添加点hover点数据切换到地图位置&#xff1b;也设定层级2D3D切换&#xff0c;3D为cesium开发&#xff0c;技术交流可以加V&#xff1a;bloxed 地图工具做了插槽&#xff0c;分为toolbar&#xff08;左上角工具…...

音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…...

【C++】B2069 求分数序列和题目解析与优化详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式输入输出样例输入&#xff1a;输出&#xff1a; &#x1f4af;解题思路分析题目解题步骤 &#x1f4af;代码实现我的代码实现实现特点 老师的代码…...

4.FPGA如何实现设计

在前面分别引入了&#xff0c;LUT的知识&#xff0c;全局时钟网络&#xff0c;以及FPGA内部的资源。 LUT的知识&#xff1a; 在FPGA设计中实现的逻辑运算在不借用其他的硬核的基础上都是在LUT中通过查表的方式进行完成的&#xff0c;比如实现的c a & b;就是将a&b的所…...

SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测

SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测&#xff08;多输入单输出&#xff09; 目录 SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测&#xff08;多输入单输出&#xff09;分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matl…...

大模型-Ollama使用相关的笔记

大模型-Ollama使用相关的笔记 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09;Postman请求样例 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09; 安装Ollama完毕后&#xff0c; /etc/systemd/system/ollama.service进行如下修改&#…...

OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理

目录 图片修改&#xff08;打码、组合、缩放&#xff09; 图像运算 边缘填充 ​阈值处理 上一篇文章&#xff1a; OpenCV计算机视觉 01 图像与视频的读取操作&颜色通道 图片修改&#xff08;打码、组合、缩放&#xff09; # 图片打码 import numpy as np a cv2.imre…...

如何高效管理多平台网盘文件:LinkSwift直链获取工具深度解析

如何高效管理多平台网盘文件&#xff1a;LinkSwift直链获取工具深度解析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...

音乐自由解决方案:Listen1音乐聚合工具使用指南

音乐自由解决方案&#xff1a;Listen1音乐聚合工具使用指南 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension 你是否曾…...

从零手写VSCODE 配置文件

VSCODE 配置文件书写详解 一.task.json 决定文件怎么编译,本质就是在指定的type下不断重复执行command和args构成的命令 1.基本框架 {"version":"2.0.0",//固定版本号"tasks":[ //任务数组,可以定义多个任务 {//任务一},{//任务二}],"i…...

Rails API应用数据一致性终极指南:乐观锁与悲观锁对比详解

Rails API应用数据一致性终极指南&#xff1a;乐观锁与悲观锁对比详解 【免费下载链接】rails-api Rails for API only applications 项目地址: https://gitcode.com/gh_mirrors/ra/rails-api 在现代Web应用开发中&#xff0c;数据一致性是API设计的核心挑战之一。Rails…...

结合YOLOv8的目标检测:为LiuJuan生成画作智能添加题跋与印章

结合YOLOv8的目标检测&#xff1a;为AI生成画作智能添加题跋与印章 1. 引言 想象一下&#xff0c;你刚用AI工具生成了一幅意境优美的山水画&#xff0c;画中山水空灵&#xff0c;笔触细腻&#xff0c;颇有几分古意。但总觉得少了点什么——对&#xff0c;就是那种传统国画特有…...

OpenClaw代码审查助手:Qwen2.5-VL-7B生成带示意图的代码优化建议

OpenClaw代码审查助手&#xff1a;Qwen2.5-VL-7B生成带示意图的代码优化建议 1. 为什么需要AI代码审查助手 作为开发者&#xff0c;我每天都要面对大量的代码审查工作。传统的人工CR&#xff08;Code Review&#xff09;过程往往耗时费力&#xff0c;尤其是当项目规模扩大后&…...

SEO_如何通过内容优化有效提升SEO效果?(403 )

如何通过内容优化有效提升SEO效果&#xff1f; 在当今竞争激烈的网络环境中&#xff0c;如何通过内容优化有效提升SEO效果&#xff0c;成为了每一个网站运营者的关键问题。搜索引擎优化&#xff08;SEO&#xff09;是一门艺术&#xff0c;需要我们在内容策略和技术手段上不断探…...

EVA-01实战案例:高校实验室用EVA-01分析显微图像+生成科研记录与假设建议

EVA-01实战案例&#xff1a;高校实验室用EVA-01分析显微图像生成科研记录与假设建议 1. 引言&#xff1a;当科研遇上“初号机” 想象一下这个场景&#xff1a;生物实验室的研究生小李&#xff0c;正对着电脑屏幕上密密麻麻的细胞显微图像发愁。他需要从上百张图片里&#xff…...

GESP C++三级真题解析:小猫分鱼问题背后的数学逻辑与代码实现

GESP C三级真题解析&#xff1a;小猫分鱼问题背后的数学逻辑与代码实现 1. 问题背景与数学建模 小猫分鱼问题乍看像一道简单的算术题&#xff0c;实则蕴含了递归思想和模运算的精妙应用。题目描述N只小猫分一堆鱼&#xff0c;每只小猫都将当前鱼数平分成N份后&#xff0c;扔掉多…...

OpenClaw技能开发入门:为Qwen2.5-VL-7B扩展截图分析功能

OpenClaw技能开发入门&#xff1a;为Qwen2.5-VL-7B扩展截图分析功能 1. 为什么需要截图分析技能 上周我在整理项目文档时&#xff0c;突然意识到一个痛点&#xff1a;每次截图后都需要手动添加文字说明&#xff0c;这个过程既耗时又容易出错。作为一个长期关注自动化工具的技…...