You need to enable JavaScript to run this app. K8s部署HashiCorp Vault Raft HA模式TLS证书加载报错问题
优惠活动
大模型
产品
解决方案
定价
更多

K8s部署HashiCorp Vault Raft HA模式TLS证书加载报错问题

问题原因排查与修复方案

核心错误说明

Error initializing listener of type tcp: error loading TLS cert: open: no such file or directory

你当前的配置存在多处明确问题,直接导致证书加载失败:

  • 监听块未指定自定义TLS证书路径
    你已开启全局TLS开关(global.tlsDisable: false),但在listener "tcp"配置段中,没有显式声明自定义证书的存放路径。Vault 默认会去内置挂载路径/vault/tls下查找证书,该路径下没有你存储的证书文件,因此报错。
    你通过extraVolumes挂载的Secret默认实际路径就是/vault/userconfig/vault-server-tls/,K8s会自动把Secret里的vault.ca、vault.crt、vault.key三个键对应内容映射为该目录下的同名文件,这一步挂载逻辑没有问题,只是没有被Vault监听配置引用到。
  • 路径拼写错误
    第二个重试join的配置行里,证书路径多打了一个字符:
    leader_client_cert_file = "/vault/userconfig/vault-server-tlsr/vault.crt"
    
    原Secret挂载路径是vault-server-tls,这里写成了vault-server-tlsr,会导致raft节点互联时也找不到证书。
  • 证书与协议配置不匹配
    你在retry_join里用http://作为leader地址,但同时又配置了客户端证书参数。http协议本身不需要TLS加密,这部分配置逻辑矛盾,配合自签名TLS场景应当使用https://协议。
  • CA证书路径指向错误
    你在extraEnvironmentVars和retry_join块里,把vault.crt(服务器证书)当成了CA证书使用,实际CA证书是Secret里的vault.ca键对应文件。

修复后的配置示例

调整Helm Chart自定义配置,修改以下几个部分:

1. 补全tcp监听的TLS参数

listener "tcp" {
  address = "[::]:8200"
  cluster_address = "[::]:8201"
  # 显式指定挂载好的证书路径
  tls_cert_file = "/vault/userconfig/vault-server-tls/vault.crt"
  tls_key_file = "/vault/userconfig/vault-server-tls/vault.key"
  tls_client_ca_file = "/vault/userconfig/vault-server-tls/vault.ca"
}

2. 修正retry_join的拼写错误、协议与证书路径

retry_join {
  leader_api_addr = "https://vault-0.vault-internal:8200"
  leader_ca_cert_file = "/vault/userconfig/vault-server-tls/vault.ca"
  leader_client_cert_file = "/vault/userconfig/vault-server-tls/vault.crt"
  leader_client_key_file = "/vault/userconfig/vault-server-tls/vault.key"
}
retry_join {
  leader_api_addr = "https://vault-1.vault-internal:8200"
  leader_ca_cert_file = "/vault/userconfig/vault-server-tls/vault.ca"
  # 修正拼写错误,去掉多余的r
  leader_client_cert_file = "/vault/userconfig/vault-server-tls/vault.crt"
  leader_client_key_file = "/vault/userconfig/vault-server-tls/vault.key"
}
retry_join {
  leader_api_addr = "https://vault-2.vault-internal:8200"
  leader_ca_cert_file = "/vault/userconfig/vault-server-tls/vault.ca"
  leader_client_cert_file = "/vault/userconfig/vault-server-tls/vault.crt"
  leader_client_key_file = "/vault/userconfig/vault-server-tls/vault.key"
}

3. 调整环境变量的CA路径

extraEnvironmentVars:
  VAULT_CACERT: /vault/userconfig/vault-server-tls/vault.ca

验证步骤

修改配置后重新部署,可先执行以下命令确认Secret是否正确挂载到Pod内:

kubectl exec -n vault-foo vault-0 -- ls /vault/userconfig/vault-server-tls/

正常会输出vault.ca、vault.crt、vault.key三个文件,再观察Pod启动日志确认报错消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 13:15:04