Etcd 存储后端

Etcd 存储后端可以用来将 Vault 的数据保存到Etcd 中。该存储后端同时支持 v2 和 v3 版本的 Etcd API,并且会根据集群的版本自动判定使用的协议版本。

注意:随着 Etcd v3.5 的发布, Etcd v2 API 已被废弃,并且在 Etcd v3.6 中退役。它将在 Vault 1.1.0 中被移除。Vault Etcd 存储后端的用户需要在使用 Vault 1.1.0 之前准备将 Vault 存储迁移到 Etcd v3 集群中。执行迁移之前需要先执行备份

  • 支持高可用集群 —— Etcd 存储后端支持高可用集群。v2 版本 API 在搭配高可用时存在问题,不可以用于高可用场景。
  • 仅有社区支持 —— Etcd 存储后端由 CoreOS 提供支持。虽然它已经过 HashiCorp 员工的审查,但他们可能对该技术并不了解。如果遇到问题,该问题可能会被转交给原作者。
storage "etcd" {
  address  = "http://localhost:2379"
  etcd_api = "v3"
}

etcd 参数

  • address (string: "http://localhost:2379") – 使用逗号分隔的列表来配置使用的 Etcd 实例地址。该参数也可以通过环境变量 ETCD_ADDR 来设置。
  • discovery_srv (string: "example.com") - 设置用以查询描述集群端点的 SRV 记录的域名。该参数也可以通过环境变量 ETCD_DISCOVERY_SRV 来设置。
  • discovery_srv_name (string: "vault") - 设置用以描述集群端点的 SRV 记录的服务名。该参数也可以通过环境变量 ETCD_DISCOVERY_SRV_NAME 来设置。
  • etcd_api (string: "<varies>") – 设置通信所使用的 API 版本。默认情况下这是自动派生的。如果集群版本是 3.1+ 并且尚无数据通过 v2 API 被写入过,那么将自动判定使用 v3。
  • ha_enabled (string: "false") – 设置是否自动启用高可用。该参数也可以通过环境变量 ETCD_HA_ENABLED 来设置。
  • path (string: "/vault/") – 设置 Vault 数据在 Etcd 中存储的路径。
  • sync (string: "true") – 设置是否在启动时同步可用 Etcd 服务的列表。该参数是一个强制转换成 boolean 值的字符串。如果集群处于代理服务器之后并且同步导致 Vault 服务失败,您可能需要将此设置为 false
  • username (string: "") – 设置 Etcd 服务身份验证时使用的用户名。该参数也可以通过环境变量 ETCD_USERNAME 来设置。
  • password (string: "") – 设置 Etcd 服务身份验证时使用的密码。该参数也可以通过环境变量 ETCD_PASSWORD 来设置。
  • tls_ca_file (string: "") – 设置与 Etcd 通信使用的 CA 证书的路径。默认使用系统捆绑包。
  • tls_cert_file (string: "") – 设置与 Etcd 通信使用的证书的路径。
  • tls_key_file (string: "") – 设置与 Etcd 通信使用的私钥文件的路径。
  • request_timeout (string: "5s") – 设置发往 Etcd 的请求的超时时间。大多数场景下 5 秒钟足以,即使是考虑到内部重试的场景。
  • lock_timeout (string: "15s") – 设置竞选 Vault 主节点的锁超时时间。如果不需要快速恢复集群,可以设置一个比较大的值。

etcd 例子

使用 DNS 发现机制发现集群成员

该例子演示了配置 Vault 根据 DNS 发现协议文档中相关记录来使用 SRV 记录发现 Etcd 集群成员:

storage "etcd" {
  discovery_srv = "example.com"
}

自定义身份验证

该例子演示了使用用户名和密码连接 Etcd 集群:

storage "etcd" {
  username = "user1234"
  password = "pass5678"
}

自定义路径

该例子演示了将数据存储在自定义路径上:

storage "etcd" {
  path = "my-vault-data/"
}

启用高可用

该例子演示了为 Etcd 存储后端启用高可用:

api_addr = "https://vault-leader.my-company.internal"

storage "etcd" {
  ha_enabled    = "true"
  ...
}

results matching ""

    No results matching ""