You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置基于Raft与Transit自动解封的Vault HA集群遇TLS问题求助

Vault Raft集群启用TLS后节点加入失败的问题解决

问题描述

我参考文档搭建基于Raft后端的Vault集群,无TLS时可正常运行,但启用TLS后出现节点加入失败的问题。Transit引擎与第一个Raft节点配置正常,添加集群第二个节点(即第三个节点)时出现以下错误:

2022-07-21T11:08:41.407Z [INFO]  core: stored unseal keys supported, attempting fetch
2022-07-21T11:08:41.407Z [WARN]  failed to unseal core: error="stored unseal keys are supported, but none were found"
2022-07-21T11:08:41.407Z [INFO]  core: security barrier not initialized
2022-07-21T11:08:41.408Z [INFO]  core: attempting to join possible raft leader node: leader_addr=https://10.20.30.42:8200
2022-07-21T11:08:41.462Z [WARN]  core: join attempt failed: error="error during raft bootstrap init call: Put \"https://10.20.30.42:8200/v1/sys/storage/raft/bootstrap/challenge\": x509: certificate signed by unknown authority"
2022-07-21T11:08:41.462Z [INFO]  core: security barrier not initialized
2022-07-21T11:08:41.462Z [INFO]  core: attempting to join possible raft leader node: leader_addr=https://10.20.30.43:8200
2022-07-21T11:08:41.477Z [WARN]  core: join attempt failed: error="error during raft bootstrap init call: Put \"https://10.20.30.43:8200/v1/sys/storage/raft/bootstrap/challenge\": x509: certificate signed by unknown authority"
2022-07-21T11:08:41.477Z [ERROR] core: failed to retry join raft cluster: retry=2s
2022-07-21T11:08:41.477Z [INFO]  http: TLS handshake error from 172.17.0.1:56062: remote error: tls: bad certificate
2022-07-21T11:08:43.477Z [INFO]  core: security barrier not initialized

原本以为设置VAULT_CACERT环境变量指定正确证书路径即可解决x509证书未知颁发机构错误,该方法在初始节点配置时有效,但在加入集群时失效,请问还缺少哪些配置步骤?

解决步骤

1. 在节点配置文件中明确Raft通信的CA证书路径

仅依赖VAULT_CACERT环境变量无法覆盖Raft节点间内部通信的证书验证,必须在Vault配置文件(如vault.hcl)的storage "raft"块中指定CA证书:

listener "tcp" {
  address = "0.0.0.0:8200"
  tls_cert_file = "/path/to/your-node-cert.pem"
  tls_key_file = "/path/to/your-node-key.pem"
  tls_client_ca_file = "/path/to/ca-cert.pem" # 用于验证客户端及其他节点的证书
}

storage "raft" {
  path = "/path/to/raft/data"
  retry_join {
    leader_api_addr = "https://10.20.30.42:8200"
    tls_ca_cert_file = "/path/to/ca-cert.pem" # 关键:指定验证Leader证书的CA文件
  }
  retry_join {
    leader_api_addr = "https://10.20.30.43:8200"
    tls_ca_cert_file = "/path/to/ca-cert.pem"
  }
}

每个retry_join块中的tls_ca_cert_file是Raft节点间信任证书的核心配置,环境变量不会自动填充此处参数。

2. 确保所有节点证书包含正确的SAN字段

错误日志中的tls: bad certificate提示证书的Subject Alternative Name(SAN)未包含节点的IP或域名。生成证书时,必须为每个节点添加对应的IP和域名到SAN中,示例OpenSSL配置片段:

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 10.20.30.42
IP.2 = 10.20.30.43
IP.3 = 新节点的IP地址
DNS.1 = vault-node1.example.com
DNS.2 = vault-node2.example.com
DNS.3 = vault-node3.example.com

重新生成所有节点的证书,确保SAN覆盖节点的所有标识。

3. 启动节点时确保环境变量与配置文件一致

启动新节点前,确认环境变量正确设置,且与配置文件路径匹配:

export VAULT_ADDR="https://新节点IP:8200"
export VAULT_CACERT="/path/to/ca-cert.pem"
vault server -config=vault.hcl

4. 验证证书信任链

在新节点上先测试与Leader节点的证书信任,确保通信正常:

curl --cacert /path/to/ca-cert.pem https://10.20.30.42:8200/v1/sys/health

若返回正常的健康状态,再执行集群加入操作。


内容的提问来源于stack exchange,提问作者charlietaylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:54:27