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
英文地址,請注明出處:http://en.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_…