Chuyển đến nội dung chính

第 23 課:高可用性、整合式儲存與生產強化

Raft 整合儲存深入研究、Autopilot、HA 架構模式、效能備用、唯讀副本概念、TLS 端對端、生產強化檢查表、作業系統調優 cho Vault。

<定義> <線性漸變 id="bg-4273" x1="0%" y1="0%" x2="100%" y2="100%">

<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-4273)”/>

<圓cx =“750”cy =“80”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“750”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“778”cy =“80”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“778”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“806”cy =“80”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“806”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“806”cy =“136”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“806”cy =“164”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“834”cy =“80”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“834”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“862”cy =“80”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“862”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“890”cy =“80”r =“1.5”填滿=“#fbbf24”不透明度=“0.15”/> <圓cx =“890”cy =“108”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“890”cy =“136”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <圓cx =“890”cy =“164”r =“1.5”填入=“#fbbf24”不透明度=“0.15”/> <多邊形點=「929.1147367097487,89.5 929.1147367097487,118.5 904,133 878.8852632902513,118.5 878.8852632902513,89.50000000000001 904,75" 填滿 = "無" 描邊 = "#fbbf24" 描邊寬度 = "1" 不透明度 = "0.12"/>

<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#fbbf24”/> <矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#fbbf24”不透明度=“0.15”/> 🔒 DevSecOps — 第 23 課

第 23 課:高可用性、整合 儲存與生產增強

HashiCorp Vault 從基礎到進階

第 7 部分:生產、企業和營運

xdev.asia

1. Raft 整合式儲存深入探究

從 Vault 1.4+ 開始,整合式儲存 (Raft) 是建議的儲存後端。它消除了對 Consul 等外部儲存的依賴,簡化了架構和操作。

Raft 共識架構

<預><代碼>┌────────────────────────────────────────────────────────┐ │ Vault HA集群 │ │ │ │ ┌────────────┐ ┌──────────────┐ ┌────────────┐ │ │ │ 節點 1 │ │ 節點 2 │ │ 節點 3 │ │ │ │ (領導者) │ │ (追隨者) │ │ (追隨者) │ │ │ │ ┌──────────┐ │ │ ┌────────┐ │ │ ┌──────────┐ │ │ │ │ │ 筏板 │ │ │ │ 筏板 │ │ │ │ 筏板 │ │ │ │ │ │ 記錄 │◄├──├─▶│ 記錄 │◄├──├─▶│ 記錄 │ │ │ │ │ └──────────┘ │ │ └────────┘ │ │ └──────────┘ │ │ │ │ ┌──────────┐ │ │ ┌────────┐ │ │ ┌──────────┐ │ │ │ │ │ BoltDB │ │ │ │ BoltDB │ │ │ │ BoltDB │ │ │ │ │ └──────────┘ │ │ └────────┘ │ │ └──────────┘ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └──────────────────────────────────────────────────────────────┘

Raft 儲存配置

#Vault-config.hcl
存放“筏”{
  路徑=“/opt/vault/data”
  node_id = “庫節點-1”

  重試加入{
    Leader_api_addr = "https://vault-node-2.company.com:8200"
    Leader_ca_cert_file = "/opt/vault/tls/ca.pem"
    Leader_client_cert_file = "/opt/vault/tls/client.pem"
    Leader_client_key_file = “/opt/vault/tls/client-key.pem”
  }

  重試加入{
    Leader_api_addr = "https://vault-node-3.company.com:8200"
    Leader_ca_cert_file = "/opt/vault/tls/ca.pem"
    Leader_client_cert_file = "/opt/vault/tls/client.pem"
    Leader_client_key_file = “/opt/vault/tls/client-key.pem”
  }# 效能調整
  Performance_multiplier = 1 # 針對快速網路進行最佳化(預設值:5)
}

偵聽器“tcp”{
  地址 =“0.0.0.0:8200”
  群集位址 = "0.0.0.0:8201"
  tls_cert_file = “/opt/vault/tls/server.pem”
  tls_key_file = “/opt/vault/tls/server-key.pem”
  tls_client_ca_file = “/opt/vault/tls/ca.pem”
}

cluster_addr = “https://vault-node-1.company.com:8201"
api_addr = “https://vault-node-1.company.com:8200"

密封“awskms”{
  區域 =“ap-東南-1”
  kms_key_id = "別名/vault-unseal"
}

Autopilot — 自動叢集管理

# Xem Autopilot 狀態
vault operator raft autopilot state

#Cấu hình 自動駕駛儀
vault operator raft autopilot set-config \
  -cleanup-dead-servers=true \
  -dead-server-last-contact-threshold=24h \
  -最小法定人數=3 \
  -伺服器穩定時間=10s

# 快照 tự động(企業)
vault operator raft autopilot snapshot-config set \
  -間隔=1小時\
  -保留=72 \
  -path-prefix =“筏/快照”

手動快照

# Tạo 快照
vault operator raft snapshot save /backup/vault-$(date +%Y%m%d%H%M).snap

# 復原快照
vault operator raft snapshot restore /backup/vault-20250101.snap

# 列出對等點
vault operator raft list-peers

# 刪除失效的對等點
vault operator raft remove-peer vault-node-4

2. HA架構模式

3 節點群集(標準)

<表> <標題>

特徵值 <正文> 節點號3 容錯1個節點故障 法定人數2 適合分期、中小型生產

5 節點叢集(企業/大型)

<表> <標題>

特徵值 <正文> 節點編號5 容錯2個節點故障 法定人數3 適合大生產、多AZ

多可用區域部署

<前><程式碼> 區域:ap-southeast-1 ┌──────────────┐ ┐────────────────┐ ┌──────────────┐ │ AZ-1 │ │ AZ-2 │ │ AZ-3 │ │ │ │ │ │ │ │ ┌────────┐ │ │ ┌──────────┐ │ │ ┌────────┐ │ │ │ Vault-1 │ │ │ │ Vault-2 │ │ │ │ Vault-3 │ │ │ │ (領導者) │ │ │ │(追隨者) │ │ │ (追隨者) │ │ └────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │ │ │ │ │ │ │ ┌────────┐ │ │ │ │ ┌──────────┐ │ │ │ LB │ │ │ ┌──────────┐ │ │ │ LB │ │ │ └──────────┘ │ │ │ LB │ │ │ └──────────┘ │ │ │ │ └──────────┘ │ │ │ └────────────────┘ └────────────────┘ └────────────────┘ ▲ ▲ ▲ └──────────────────┴──────────────────┘ 網路負載平衡/DNS

3. TLS 端對端

使用 Vault PKI 建立憑證

# 根 CA
vault secrets enable -path=pki-root pki
vault secrets tune -max-lease-ttl=87600h pki-root
vault write pki-root/root/generate/internal \
  common_name="公司根 CA" \
  生存時間=87600小時

中間 CA cho Vault 集群

vault secrets enable -path=pki-vault pki vault secrets tune -max-lease-ttl=43800h pki-vault

vault write pki-vault/intermediate/generate/internal
common_name="Vault 中間 CA"
| jq -r '.data.csr' >Vault-intermediate.csr

vault write pki-root/root/sign-intermediate
[email protected]
ttl=43800h
| jq -r '.data.certificate' >Vault-intermediate.pem

vault write pki-vault/intermediate/set-signed
證書[email protected]

Tạo 角色 cho Vault 伺服器憑證

vault write pki-vault/roles/vault-server
allowed_domains="vault.company.com,company.internal"
allowed_subdomains=true
最大生存時間=8760h

頒發證書

vault write pki-vault/issue/vault-server
common_name="vault-node-1.company.internal"
alt_names="vault.company.com"
ip_sans="10.0.1.10"
生存時間=720小時

4。生產強化清單

作業系統層級調整

# /etc/sysctl.d/99-vault.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 0
vm.dirty_ratio = 10

# 申請
sysctl--系統
# 檔案描述子限制
# /etc/security/limits.d/vault.conf
vault soft nofile 65536
vault hard nofile 65536
vault soft nproc 65536
vault hard nproc 65536

Systemd 服務強化

# /etc/systemd/system/vault.service
[單位]
描述=HashiCorp Vault
文檔=https://www.vaultproject.io/docs
需要=網路在線.target
After=網路在線.target
ConditionFileNotEmpty=/etc/vault.d/vault.hcl

[服務]
類型=通知
使用者=保管庫
組=庫
ExecStart=/usr/bin/vault 伺服器-config=/etc/vault.d/vault.hcl
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=進程
KillSignal=SIGINT
重新啟動=失敗時
重啟秒=5
超時停止秒=30
限制NOFILE=65536
LimitMEMLOCK=無窮大

# 安全加固
保護系統=完整
保護首頁=true
PrivateTmp=true
私人設備=true
無新權限=true
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_BIND_SERVICE
環境能力=CAP_IPC_LOCK

[安裝]
WantedBy=多用戶.target

Vault 配置強化

# ProductionVault.hcl
使用者介面=真
停用_mlock = false
log_level = “警告”

# 停用未使用的功能
raw_storage_endpoint = false

偵聽器“tcp”{
  地址 =“0.0.0.0:8200”
  群集位址 = "0.0.0.0:8201"
  tls_cert_file = “/opt/vault/tls/server.pem”
  tls_key_file = “/opt/vault/tls/server-key.pem”
  tls_client_ca_file = “/opt/vault/tls/ca.pem”
  tls_min_version =“tls13”
  tls_require_and_verify_client_cert = false

  # 遙測
  遙測{
    未經身份驗證的指標存取 = false
  }
}

# 審核設備 — BẮT BUỘC trong 生產
# Cấu hình sau khi 透過 CLI 解封

常規清單

<表> <標題> #項目狀態 <正文> 1TLS 端對端(API + 集群)☐ 2自動解封(KMS / HSM)☐ 3審核設備已啟用☐ 4初始根令牌已撤銷☐ 5mlock 已啟用(disable_mlock = false)☐ 6檔案描述子限制增加☐ 7交換已停用或交換性 = 0☐ 8專用機器/虛擬機器☐ 9防火牆 — 僅開放 8200、8201☐ 10網路分段☐ 11自動備份計畫☐ 12監控和警報☐ 13已配置日誌輪換 ☐ 14最低權限策略☐

5。摘要

  • Raft 整合式儲存 — 內建 HA 存儲,無需 Consul

  • Autopilot - 自動管理叢集成員資格、清除失效伺服器

  • 多可用區 - 跨可用區分佈節點以實現容錯

  • TLS 端對端 - 生產環境中必需

  • 強化 - 作業系統調整、systemd 安全、mlock、防火牆、審核