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"
...
}