openEuler 24.03 (LTS-SP1) 下私有镜像仓库部署与自签 SSL 全流程目标

目录

openEuler 24.03 (LTS-SP1) 下私有镜像仓库部署与自签 SSL 全流程

1 创建根 CA 与服务器证书(修正版:SAN 写法兼容所有 OpenSSL)

2 配置 Docker Compose 文件

3 客户端节点信任 CA

3.1 Docker

3.2 containerd

4 推送 / 拉取测试

5 常见问题 & 排查

结语


注意: ansible 相关命令请参考之前相关文章, 如下操作命令 实际验证可用

openEuler 24.03 (LTS-SP1) 下私有镜像仓库部署与自签 SSL 全流程

目标

  • 主机 IP10.130.135.145

  • 端口30500(映射到容器 5000)

  • 数据目录/app/registry

  • 运行时:Docker / containerd 均可使用

  • 证书目录/app/registry/certs

  • 客户端:其余 K8s 节点或开发机


1 创建根 CA 与服务器证书(修正版:SAN 写法兼容所有 OpenSSL)

# ① 准备目录
sudo mkdir -p /app/registry/certs
cd /app/registry/certs# ② 生成根 CA(有效期 10 年)
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \-subj "/CN=Brytech-Registry-CA" -out ca.crt# ③ 生成服务器私钥
openssl genrsa -out registry.key 4096# ④ 生成带 SAN 的 CSR(使用 alt_names 小节,100% 兼容)
cat > csr.cnf <<'EOF'
[ req ]
prompt             = no
default_md         = sha256
distinguished_name = dn
req_extensions     = req_ext[ dn ]
CN = 10.130.135.145                # Common Name[ req_ext ]
subjectAltName = @alt_names[ alt_names ]
IP.1 = 10.130.135.145
EOFopenssl req -new -key registry.key -out registry.csr -config csr.cnf# ⑤ 用根 CA 签发服务器证书(有效期 10 年)
openssl x509 -req -in registry.csr \-CA ca.crt -CAkey ca.key -CAcreateserial \-out registry.crt -days 3650 -sha256 \-extfile csr.cnf -extensions req_ext

验证:

openssl x509 -in registry.crt -noout -text | grep -A1 "Subject Alternative Name"
# ➜ 必须看到 IP Address:10.130.135.145

2 配置 Docker Compose 文件

/app/registry/docker-compose.yml

version: '3.7'
services:registry:image: registry:3container_name: registryrestart: alwaysports:- "0.0.0.0:30500:5000"environment:REGISTRY_STORAGE: filesystemREGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registryREGISTRY_HTTP_SECRET: "a0393a48d72c4428a5aa87766430cb39c4e38d736e569a6cf6089445c823817c"REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry.crtREGISTRY_HTTP_TLS_KEY: /certs/registry.keyOTEL_TRACES_EXPORTER: "none"volumes:- /app/registry:/var/lib/registry        # 镜像数据- /app/registry/certs:/certs:ro          # 证书只读挂载

启动:

cd /app/registry
docker compose up -d         # 或 docker-compose up -d

日志中出现 listening on [::]:5000, tls 即代表 TLS 启用成功。


3 客户端节点信任 CA

以下以 节点 IPNODE=10.130.135.145:30500

3.1 Docker
NODE=10.130.135.145:30500
sudo mkdir -p /etc/docker/certs.d/$NODE
# 将 ca.crt 拷贝到所有节点
sudo scp root@10.130.135.145:/app/registry/certs/ca.crt /etc/docker/certs.d/$NODE/
sudo systemctl restart docker
3.2 containerd
NODE=10.130.135.145:30500
sudo mkdir -p /etc/containerd/certs.d/$NODE
sudo cp /etc/docker/certs.d/$NODE/ca.crt /etc/containerd/certs.d/$NODE/cat <<EOF | sudo tee /etc/containerd/certs.d/$NODE/hosts.toml
server = "https://$NODE"[host."https://$NODE"]capabilities = ["pull", "resolve", "push"]ca           = "/etc/containerd/certs.d/$NODE/ca.crt"
EOFsudo systemctl restart containerd

Kubernetes 节点批量分发
可用 Ansible:

# 假设 NODE=10.130.135.145:30500
NODE=10.130.135.145:30500# ① 创建目录(Docker + containerd)
ansible all -m file -a "path=/etc/docker/certs.d/${NODE} state=directory mode=0755"
ansible all -m file -a "path=/etc/containerd/certs.d/${NODE} state=directory mode=0755"# ② 拷贝 ca.crt(Docker 用)
ansible all -m copy -a "src=/app/registry/certs/ca.crt dest=/etc/docker/certs.d/${NODE}/ca.crt owner=root mode=0644"# ③ 拷贝 ca.crt(containerd 用)
ansible all -m copy -a "src=/app/registry/certs/ca.crt dest=/etc/containerd/certs.d/${NODE}/ca.crt owner=root mode=0644"# ④ 创建 hosts.toml(用于 containerd 识别 Registry)
ansible all -m copy -a "content='server = \"https://${NODE}\"[host.\"https://${NODE}\"]capabilities = [\"pull\", \"resolve\", \"push\"]ca = \"/etc/containerd/certs.d/${NODE}/ca.crt\"
' dest=/etc/containerd/certs.d/${NODE}/hosts.toml mode=0644"# ⑤ 重启运行时服务
ansible all -m shell -a "systemctl restart docker containerd"

4 推送 / 拉取测试

REG=10.130.135.145:30500
docker pull busybox:latest
docker tag busybox $REG/busybox:test
docker push $REG/busybox:test
docker pull $REG/busybox:test
# containerd 用户:
# crictl pull $REG/busybox:test如果crictl 遇到错误 tls: failed to verify certificate: x509: certificate signed by unknown authority , 请参考如下文章解决:https://blog.csdn.net/gs80140/article/details/149248275?sharetype=blogdetail&sharerId=149248275&sharerefer=PC&sharesource=gs80140&spm=1011.2480.3001.8118

若过程无 x509: certificate signed by unknown authority 等错误,说明 CA 链配置成功。


5 常见问题 & 排查

现象原因解决
unsupported option: subjectAltName旧 OpenSSL 不支持 @alt_names 语法本文已改用兼容写法;或升级 OpenSSL 至 ≥1.1.1
x509: certificate signed by unknown authority节点未加载 ca.crt确认路径、文件权限,并重启 Docker/containerd
server gave HTTP response to HTTPS clientRegistry 未启用 TLS检查 REGISTRY_HTTP_TLS_* 环境变量、端口映射

结语

通过上述步骤,在 openEuler 24.03 (LTS-SP1) 上零依赖外网地搭建了安全的私有镜像仓库,并让集群节点可信任自签 CA,实现了镜像的高速本地化分发。后续可结合 Harbor 或 S3 远端存储进一步增强功能。祝部署顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914047.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql的LIMIT 用法

常见用法1. 限制返回行数-- 返回前5条记录 SELECT * FROM products LIMIT 5;2. 分页查询&#xff08;带偏移量&#xff09;-- 跳过前10条&#xff0c;返回接下来的5条记录&#xff08;第11-15条&#xff09; SELECT * FROM products LIMIT 10, 5;-- MySQL 8.0 也支持这种语法 S…

maven 发布到中央仓库之持续集成-03

maven 系列 maven-01-发布到中央仓库概览 maven-02-发布到中央仓库常用脚本 maven-03-发布到中央仓库之持续集成 maven-04-发布到中央仓库之 Ignore Licence maven-05-maven 配置进阶学习 maven-06-maven 中央仓库 OSSRH 停止服务&#xff0c;Central Publishing Portal …

(补充)RS422

RS4221. 基本定义与定位 官方名称&#xff1a; EIA/TIA-422&#xff08;电子工业协会/电信工业协会标准422&#xff09;。类型&#xff1a; 一种定义了电气特性的 平衡式差分 串行通信标准。目的&#xff1a; 克服 RS-232 在传输距离、速率和抗干扰能力上的严重局限性。核心思想…

自建ELK vs 云商日志服务:成本对比分析

在当今数据驱动的时代&#xff0c;日志管理已成为企业IT基础设施中不可或缺的一部分。面对日益增长的日志数据&#xff0c;许多团队都在纠结&#xff1a;是自建ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;堆栈&#xff0c;还是直接使用云服务商提供的日志服务…

Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解

文章目录0 写在前面1 数学背景对比2 Eigen 实现差异3 Isometry3d 是不是 4 4 矩阵&#xff1f;4 核心 API 速查5 实战示例5.1 SLAM 位姿链&#xff1a;相机点 → 世界点5.2 体素滤波&#xff1a;各向异性缩放&#xff08;X/Y → 5 cm&#xff0c;Z → 10 cm&#xff09;5.3 把…

python的病例管理系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 随着医疗…

博客系统开发全流程解析(前端+后端+数据库)与 AI 协作初体验

一、前言&#xff1a;为什么选择博客系统作为全栈入门&#xff1f; 对于初入编程世界的开发者来说&#xff0c;“全栈” 似乎是一个庞大而遥远的概念。前端、后端、数据库、部署运维… 知识体系繁杂&#xff0c;令人望而生畏。选择一个目标明确、功能完整且贴近实际应用的项目…

Xavier公式的原理

数学原理&#xff1a; (1) 前向传播的方差一致性 假设输入 x 的均值为 0&#xff0c;方差为 σx2σ_x^2σx2​&#xff0c;权重 W的均值为 0&#xff0c;方差为 σW2σ_W^2σW2​&#xff0c;则输出 zWxzWxzWx的方差为&#xff1a; Var(z)nin⋅Var(W)⋅Var(x) Var(z)n_{in}⋅Va…

pytorch学习笔记(二)-- pytorch模型开发步骤详解

简介&#xff1a; 本章主要是针对Pytorch神经网络的开发步骤做一个详细的总结&#xff0c;对每一步的前世今生做一个了解&#xff0c;下面先列一下开发需要的步骤有哪些&#xff1a; 模型构建&#xff0c;主要是前向传递函数的确认确认损失函数以及学习步频&#xff08;learni…

consul 的安装与服务发现

1. helm 安装 consul 到 k8s 安装放在这里了&#xff1a;https://github.com/lianan2/installation/tree/master/consul-helm consul 的常用命令&#xff1a; # 查看集群状态 kubectl -n consul exec -it consul-server-0 -- consul operator raft list-peers kubectl -n con…

ros topic和service的使用

在做ldiar slam的时候&#xff0c;最常用的当属topic&#xff0c;偶尔也会用一下service&#xff0c;action则很少使用。现在一块来看一下topic的使用。一、topic的使用topic的消息订阅和发布#include<ros/ros.h> #include<rosbag/bag.h> #include<rosbag/view.…

【TCP/IP】18. 因特网服务质量

18. 因特网服务质量18. 因特网服务质量18.1 服务质量&#xff08;QoS&#xff09;18.2 实时传输协议&#xff08;RTP&#xff09;18.3 实时传输控制协议&#xff08;RTCP&#xff09;18.4 集成业务&#xff08;IntServ&#xff09;18.5 区分业务&#xff08;DiffServ&#xff0…

数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter

【PyTorch】图像多分类项目 目录 StratifiedShuffleSplit transforms.ToTensor Counter StratifiedShuffleSplit sss StratifiedShuffleSplit(n_splits1, test_size0.2, random_state0) 创建StratifiedShuffleSplit对象&#xff0c;用于将数据集划分为训练集和测试集。 …

【环境配置】KAG - Windows 安装部署

前言 本博客将介绍如何在 Windows 系统上 部署运行 KAG 项目&#xff0c;将使用 WSL 和 Docker 和 Vscode 帮助我们之后利用 KAG 开发个人知识库问答项目。 KAG&#xff08;Knowledge-Augmented Generation&#xff09;知识增强生成系统 是一个融合知识图谱与大语言模型能力的…

《探索电脑麦克风声音采集多窗口实时可视化技术》

引言在当今数字化信息飞速发展的时代&#xff0c;声音作为一种重要的信息载体&#xff0c;其处理和分析技术日益受到广泛关注。声音可视化技术&#xff0c;作为声音处理领域的关键技术之一&#xff0c;具有极为重要的价值。它能够将抽象的声音信号转化为直观的视觉图像&#xf…

加工进化论:SPL 一键加速日志转指标

作者&#xff1a;劳贵泓&#xff08;泓逸&#xff09; 1. 背景 日志服务的 SPL&#xff08;Search Processing Language&#xff09;自推出以来&#xff0c;凭借其强大的数据处理能力&#xff0c;已经成为众多开发者和企业实现高效数据分析的首选工具。随着业务场景的不断拓展…

Web 应用防火墙:守护应用安全的核心屏障

当你在调试 Web 应用时&#xff0c;是否遇到过这样的情况&#xff1a;刚修复的 XSS 漏洞又被绕过&#xff0c;数据库日志里突然出现诡异的 SQL 语句&#xff0c;或者用户反馈登录后信息被篡改&#xff1f;这些问题的背后&#xff0c;往往是 Web 应用面临的持续安全威胁。据 OWA…

Python 网络爬虫的基本流程及 robots 协议详解

数据驱动的时代,网络爬虫作为高效获取互联网信息的工具,其规范化开发离不开对基本流程的掌握和对 robots 协议的遵守。本文将系统梳理 Python 网络爬虫的核心流程,并深入解读 robots 协议的重要性及实践规范。 一、Python 网络爬虫的基本流程 Python 网络爬虫的工作过程可…

字节二面(狠狠拷打系列):什么是http1.1,2.0,3.0,分别在什么场景里面用的多

文章目录从单行到新纪元&#xff1a;HTTP/0.9、1.0、1.1、2.0与3.0的核心区别HTTP/0.9&#xff1a;协议的黎明 (1991)HTTP/1.0&#xff1a;功能扩展与标准化 (1996)HTTP/1.1&#xff1a;持久连接与性能优化 (1997)HTTP/2.0&#xff1a;二进制与多路复用 (2015)HTTP/3.0&#xf…

Java教程:JavaWeb ---MySQL高级

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;大数据开发、.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_…