基于CFSSL構建高可用ETCD集群全指南(含TLS證書管理)

基于CFSSL構建高可用ETCD集群全指南(含TLS證書管理)

摘要:本文深入講解使用CFSSL工具簽發TLS證書,并部署生產級高可用ETCD集群的完整流程。涵蓋證書全生命周期管理、集群配置優化及安全加固方案,適用于Kubernetes、分布式系統等場景。

一、環境規劃與架構設計

1.1 節點信息

節點IP角色主機名證書SAN擴展
192.167.14.228ETCD Masteretcd-1IP:228,229,246
192.167.14.229ETCD Backupetcd-2DNS:etcd-cluster
192.167.14.246ETCD Backupetcd-3

1.2 端口規劃

端口協議用途
2379HTTPS客戶端通信
2380HTTPS節點間Peer通信

二、CFSSL證書管理全流程

2.1 安裝CFSSL工具鏈

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 \https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 \https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod +x cfssl* && mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

2.2 生成根證書機構(CA)

mkdir -p ~/etcd_tls && cd ~/etcd_tls# CA配置文件
cat > ca-config.json <<EOF
{"signing": {"default": {"expiry": "876000h"},"profiles": {"kubernetes": {"expiry": "876000h","usages": ["signing", "key encipherment", "server auth", "client auth"]}}}
}
EOF# CA CSR請求文件
cat > ca-csr.json <<EOF
{"CN": "Kubernetes","key": {"algo": "rsa", "size": 2048},"names": [{"C": "CN", "L": "Xi'an", "O": "k8s", "OU": "Cluster"}]
}
EOF# 生成CA證書
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

2.3 簽發ETCD服務證書

cat > etcd-csr.json <<EOF
{"CN": "etcd","hosts": ["192.167.14.228","192.167.14.229", "192.167.14.246","etcd-cluster.local"],"key": {"algo": "rsa", "size": 2048},"names": [{"C": "CN", "L": "Xi'an", "O": "k8s", "OU": "ETCD"}]
}
EOFcfssl gencert -ca=ca.pem -ca-key=ca-key.pem \-config=ca-config.json -profile=kubernetes \etcd-csr.json | cfssljson -bare etcd

三、ETCD集群部署實戰

3.1 安裝ETCD二進制

ETCD_VER=v3.5.9
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gztar -zxvf etcd-${ETCD_VER}-linux-amd64.tar.gz
mkdir -p /opt/etcd/{bin,cfg,ssl}
mv etcd-${ETCD_VER}-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

3.2 節點配置模板(以etcd-1為例)

cat > /opt/etcd/cfg/etcd.conf <<EOF
[Member]
name = "etcd-1"
data-dir = "/var/lib/etcd"
listen-peer-urls = "https://192.167.14.228:2380"
listen-client-urls = "https://192.167.14.228:2379,https://127.0.0.1:2379"[Cluster]
initial-advertise-peer-urls = "https://192.167.14.228:2380"
advertise-client-urls = "https://192.167.14.228:2379"
initial-cluster = "etcd-1=https://192.167.14.228:2380,etcd-2=https://192.167.14.229:2380,etcd-3=https://192.167.14.246:2380"
initial-cluster-token = "etcd-cluster"
initial-cluster-state = "new"
EOF

3.3 Systemd服務配置

cat > /usr/lib/systemd/system/etcd.service <<EOF
[Unit]
Description=ETCD KeyValue Store
Documentation=https://etcd.io
After=network.target[Service]
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \--cert-file=/opt/etcd/ssl/etcd.pem \--key-file=/opt/etcd/ssl/etcd-key.pem \--peer-cert-file=/opt/etcd/ssl/etcd.pem \--peer-key-file=/opt/etcd/ssl/etcd-key.pem \--trusted-ca-file=/opt/etcd/ssl/ca.pem \--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
EOF

四、集群初始化與驗證

4.1 啟動集群

systemctl daemon-reload
systemctl enable --now etcd

4.2 集群健康檢查

ETCDCTL_API=3 /opt/etcd/bin/etcdctl \--cacert=/opt/etcd/ssl/ca.pem \--cert=/opt/etcd/ssl/etcd.pem \--key=/opt/etcd/ssl/etcd-key.pem \--endpoints="https://192.167.14.228:2379,https://192.167.14.229:2379,https://192.167.14.246:2379" \endpoint health --write-out=table

預期輸出

+---------------------------+--------+-------------+-------+
|         ENDPOINT          | HEALTH |    TOOK     | ERROR |
+---------------------------+--------+-------------+-------+
| https://192.167.14.228:2379 |   true |  14.567345ms |       |
| https://192.167.14.229:2379 |   true |  15.234512ms |       |
| https://192.167.14.246:2379 |   true |  16.789123ms |       |
+---------------------------+--------+-------------+-------+

五、生產級優化建議

5.1 安全加固

# 啟用客戶端證書認證
--client-cert-auth=true# 定期輪換證書(每年)
openssl x509 -in /opt/etcd/ssl/etcd.pem -noout -dates

5.2 性能調優

# 調整后端存儲配額
--quota-backend-bytes=8589934592  # 8GB# 優化日志配置
--log-level=warn
--logger=zap

六、防火墻策略(生產必配)

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.167.14.0/24" port port="2379-2380" protocol="tcp" accept'
firewall-cmd --reload

七、故障排查指南

現象排查命令解決方案
節點無法加入集群journalctl -u etcd -f檢查證書SAN與節點IP是否匹配
客戶端連接超時telnet <IP> 2379驗證防火墻和SELinux策略
存儲空間不足du -sh /var/lib/etcd/member/清理快照或擴容存儲
證書過期cfssl-certinfo -cert etcd.pem重新簽發證書并滾動重啟集群

擴展工具推薦

  • etcd-browser:Web管理界面
  • etcd-backup-operator:自動化備份工具

通過本文,您已掌握企業級ETCD集群的構建與維護技能。建議定期進行災難恢復演練確保集群高可用!

如果本教程幫助您解決了問題,請點贊??收藏?支持!歡迎在評論區留言交流技術細節!欲了解密碼學知識,請訂閱《密碼學實戰》專欄 → 密碼學實戰

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76374.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【設計模式】適配器模式:讓不兼容的接口和諧共處

引言 在軟件開發中&#xff0c;我們經常會遇到這樣的情況&#xff1a;兩個已經存在的接口無法直接協同工作&#xff0c;但我們又希望它們能夠無縫對接。這時&#xff0c;適配器模式就派上用場了。適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&…

doris/clickhouse常用sql

一、doris常用SQL 1、doris統計數據庫的總大小&#xff08;單位&#xff1a;MB&#xff09; SELECT table_schema AS database_name,ROUND(SUM(data_length) / 1024 / 1024, 2) AS database_size_MB FROM information_schema.tables WHERE table_schema NOT IN (information…

軟件架構分層策略對比及Go項目實踐

一、水平分層 vs 功能劃分 vs 組件劃分 維度水平分層功能劃分組件劃分核心思想按垂直層次劃分職責&#xff08;如表示層、業務層、數據層&#xff09;按業務功能模塊劃分&#xff08;如用戶管理、訂單服務、支付模塊&#xff09;按技術或業務能力劃分獨立組件&#xff08;如數…

Linux進程地址空間、寫時拷貝

1.進程地址空間 感知進程地址空間 C/C有內存的概念&#xff0c;內存空間包括棧、堆、代碼段等等&#xff0c;下面是32位下的內存分布圖&#xff0c;自底向上(由0x00000000至0xFFFFFFFF); 下面通過程序來驗證各個數據在該空間的地址&#xff0c;由此感知整個地址空間的分布情…

python成功解決AttributeError: can‘t set attribute ‘lines‘

文章目錄 報錯信息與原因分析解決方法示例代碼代碼解釋總結 報錯信息與原因分析 在使用 matplotlib繪圖時&#xff0c;若嘗試使用 ax.lines []來清除圖表中的線條&#xff0c;會遇到AttributeError: can’t set attribute錯誤。這是因為 ax.lines是一個只讀屬性&#xff0c;不…

從零搭建微服務項目Pro(第6-2章——微服務鑒權模塊SpringSecurity+JWT)

前言&#xff1a; 在上一章已經實現了SpringBoot單服務的鑒權&#xff0c;在導入SpringSecurity的相關依賴,以及使用JWT生成的accessToken和refreshToken能夠實現不同Controller乃至同一Controller中不同接口的權限單獨校驗。上一章鏈接如下&#xff1a; 從零搭建微服務項目Pr…

win安裝軟件

win安裝軟件 jdk安裝 jdk安裝 首先去官網下載適合系統版本的JDK&#xff0c;下載地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html進入下載頁面&#xff0c;如下圖&#xff1a; 首先選擇&#xff1a;Accept License Agreement單選按鈕&…

Prompt-Tuning 提示詞微調

1. Hard Prompt 定義&#xff1a; Hard prompt 是一種更為具體和明確的提示&#xff0c;要求模型按照給定的信息生成精確的結果&#xff0c;通常用于需要模型提供準確答案的任務. 原理&#xff1a; Prompt Tuning原理如下圖所示&#xff1a;凍結主模型全部參數&#xff0c;在…

【Vue生命周期的演變:從Vue 2到Vue 3的深度剖析】

Vue生命周期的演變&#xff1a;從Vue 2到Vue 3的深度剖析 1. 生命周期鉤子的概念與意義 Vue框架通過生命周期鉤子函數使開發者可以在組件不同階段執行自定義邏輯。這些鉤子函數是Vue組件生命周期中的關鍵切入點&#xff0c;對于控制組件行為至關重要。 2. Vue 2中的生命周期…

java ai 圖像處理

Java AI 圖像處理 圖像處理是人工智能&#xff08;AI&#xff09;領域中非常重要的一個應用方向。通過使用Java編程語言和相應的庫&#xff0c;我們可以實現各種圖像處理任務&#xff0c;如圖像識別、圖像分類、圖像分割等。本文將介紹一些常見的圖像處理算法&#xff0c;并通過…

從 0~1 保姆級 詳細版 PostgreSQL 數據庫安裝教程

PostgreSQL數據庫安裝 PostgreSQL官網 【PostgreSQL官網】 | 【PostgreSQL安裝官網_Windows】 安裝步驟 step1&#xff1a; 選擇與電腦相對應的PostgreSQL版本進行下載。 step2&#xff1a; 雙擊打開剛才下載好的文件。 step3&#xff1a; 在彈出的setup窗口中點擊 …

Keil MDK中禁用半主機(No Semihosting)

在 ARM 編譯器&#xff08;如 Keil MDK&#xff09; 中禁用半主機&#xff08;Semihosting&#xff09;并實現標準庫的基本功能&#xff0c;需要以下步驟&#xff1a; 1. 禁用半主機 #pragma import(__use_no_semihosting) // 禁用半主機模式作用&#xff1a;防止標準庫函數&…

github | 倉庫權限管理 | 開權限

省流版總結&#xff1a; github 給別人開權限&#xff1a;倉庫 -> Setting -> Cllaborate -> Add people GitHub中 將公開倉庫改為私有&#xff1a;倉庫 -> Setting -> Danger Zone&#xff08;危險區&#xff09; ->Change repository visibility( 更改倉…

快速部署大模型 Openwebui + Ollama + deepSeek-R1模型

背景 本文主要快速部署一個帶有web可交互界面的大模型的應用&#xff0c;主要用于開發測試節點&#xff0c;其中涉及到的三個組件為 open-webui Ollama deepSeek開放平臺 首先 Ollama 是一個開源的本地化大模型部署工具,提供與OpenAI兼容的Api接口&#xff0c;可以快速的運…

極狐GitLab 項目導入導出設置介紹?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 導入導出設置 (BASIC SELF) 導入和導出相關功能的設置。 配置允許的導入源 在從其他系統導入項目之前&#xff0c;必須為該…

信奧還能考嗎?未來三年科技特長生政策變化

近年來&#xff0c;科技特長生已成為名校錄取的“黃金敲門磚”。 從CSP-J/S到NOI&#xff0c;編程競賽成績直接關聯升學優勢。 未來三年&#xff0c;政策將如何調整&#xff1f;家長該如何提前布局&#xff1f; 一、科技特長生政策趨勢&#xff1a;2025-2027關鍵變化 1. 競…

AI測試用例生成平臺

AI測試用例生成平臺 項目背景技術棧業務描述項目展示項目重難點 項目背景 針對傳統接口測試用例設計高度依賴人工經驗、重復工作量大、覆蓋場景有限等行業痛點&#xff0c;基于大語言模型技術實現接口測試用例智能生成系統。 技術棧 LangChain框架GLM-4模型Prompt Engineeri…

操作系統-PV

&#x1f9e0; 背景&#xff1a;為什么會有 PV&#xff1f; 類比&#xff1a;內存&#xff08;生產者&#xff09; 和 CPU&#xff08;消費者&#xff09; 內存 / IO / 磁盤 / 網絡下載 → 不斷“生產數據” 例如&#xff1a;讀取文件、下載視頻、從數據庫加載信息 CPU → 負…

工廠方法模式詳解及在自動駕駛場景代碼示例(c++代碼實現)

模式定義 工廠方法模式&#xff08;Factory Method Pattern&#xff09;是一種創建型設計模式&#xff0c;通過定義抽象工廠接口將對象創建過程延遲到子類實現&#xff0c;實現對象創建與使用的解耦。該模式特別適合需要動態擴展產品類型的場景。 自動駕駛感知場景分析 自動駕…

基于 S2SH 架構的企業車輛管理系統:設計、實現與應用

在企業運營中&#xff0c;車輛管理是一項重要工作。隨著企業規模的擴大&#xff0c;車輛數量增多&#xff0c;傳統管理方式效率低下&#xff0c;難以滿足企業需求。本文介紹的基于 S2SH 的企業車輛管理系統&#xff0c;借助現代化計算機技術&#xff0c;實現車輛、駕駛員和出車…