Consul 存储后端
Consul 存储后端可以用来将 Vault 的数据保存到Consul 键值存储中。除了提供持久存储之外,使用此存储后端还将在 Consul 中将 Vault 注册为具有默认健康检查的服务。
- 支持高可用集群 —— Consul 存储后端支持高可用集群。
- HashiCorp 官方支持 —— HashiCorp 提供对 Consul 存储后端的官方支持
storage "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
正确配置后,应该可以在以下位置使用和访问解封的 Vault 服务:
active.vault.service.consul
可以通过以下地址访问到解封后处于待机状态的 Vault 实例:
standby.vault.service.consul
可以通过以下地址访问所有解封后的 Vault 实例:
vault.service.consul
封印的 Vault 实例会将他们自己标记为不健康,以避免 Consul 服务发现层将它们返回。
需要注意的是如果为 Vault 配置了多个侦听器,我们必须通过 api_addr
和 cluster_addr
指定 Consul 通告哪一个地址 (例子)。
consul
参数
address
(string: "127.0.0.1:8500")
– 设置用来通信的 Consul agent 地址。它可以是一个 IP 地址、DNS 记录,或是 unix socket。推荐使用本地 Consul agent 而不是直接与 Consul 服务通信。check_timeout
(string: "5s")
– 设置发回健康检查数据的间隔。该参数的后缀类似于"30s"
或是"1h"
。consistency_mode
(string: "default")
– 设置 Consul 的一致性模式。可以设置的值有"default"
或是"strong"
。disable_registration
(string: "false")
– 设置是否禁止 Vault 该将其注册到 Consul 中。max_parallel
(string: "128")
– 设置与 Consul 通信的最大并行请求数。需要提前确认 Consul agent 被设置为支持这种程度的并发度,请参照 http_max_conns_per_client。path
(string: "vault/")
– 设置 Vault 数据要存储的 Consul 键值存储路径。scheme
(string: "http")
– 设置与 Consul 通信使用的协议。可以设置为http
或是https
。与非本机 Consul 通信时强烈建议使用https
。当使用 unix socket 时,该参数将被忽略。service
(string: "vault")
– 设置注册到 Consul 中的服务名称。service_tags
(string: "")
– 设置以逗号分隔的附加在注册到 Consul 服务上的一组标签。service_address
(string: nil)
– 设置一个特定的在 Consul 中注册的服务地址。如果没有设置该参数,Vault 将使用它所知道的 HA 重定向地址——这通常是推荐使用的地址。将此参数设置为""
将告诉 Consul 利用动态注册服务的节点的配置。如果打算利用 Consul 的translate_wan_addrs
参数时该参数可能会有所帮助。token
(string: "")
– 设置读写 Consul 键值存储中path
位置的数据时使用的 Consul ACL 令牌。该令牌并不是 Vault 令牌。也可以通过设置环境变量CONSUL_HTTP_TOKEN
来设置该参数。session_ttl
(string: "15s")
- 设置允许的最小的会话(session) TTL。Consul 服务每一个会话默认有 10s 的 TTL 下限。这里配置的session_ttl
不可以比 10s 小,除非 Consul 服务配置中的session_ttl_min
配置了一个更小的值。lock_wait_time
(string: "15s")
- 设置获取锁操作的等待时间。该参数会影响取消锁定获取所需的最短时间。
通过加密连接与 Consul 通信时可以使用下面的设置。可以在 Consul 加密页面上阅读有关加密 Consul 连接的更多信息。
tls_ca_file
(string: "")
– 设置用以与 Consul 通信使用的 CA 证书。默认使用系统捆绑包。该参数应根据 Consul 的ca_file
配置来设定。tls_cert_file
(string: "")
(optional) – 设置用以与 Consul 通信使用的证书。该参数应根据 Consul 的cert_file
配置来设定。tls_key_file
(string: "")
– 设置用以与 Consul 通信所使用的私钥文件的路径。该参数应根据 Consul 的key_file
配置来设定。tls_min_version
(string: "tls12")
– 设置所使用的 TLS 最低版本。可以设置的值有:"tls10"
、"tls11"
、"tls12"
以及"tls13"
。tls_skip_verify
(string: "false")
– 关闭对 TLS 证书的验证。强烈不推荐使用该选项。
ACLs
如果启用了 Consul 的 ACL,我们必须为 Vault 服务注册配置合适的权限。如果使用 Consul 0.8,服务名称为 vault
并且使用的前缀是 vault/
,下列权限将会适用于大多数场景:
{
"key": {
"vault/": {
"policy": "write"
}
},
"service": {
"vault": {
"policy": "write"
}
},
"agent": {
"": {
"policy": "read"
}
},
"session": {
"": {
"policy": "write"
}
}
}
如果使用的是 Consul 1.4+,请使用以下例子来配置账户权限:
{
"key_prefix": {
"vault/": {
"policy": "write"
}
},
"service": {
"vault": {
"policy": "write"
}
},
"agent_prefix": {
"": {
"policy": "read"
}
},
"session_prefix": {
"": {
"policy": "write"
}
}
}
consul
例子
使用本机 Agent
该例子演示了使用运行在 127.0.0.1:8500
上的本机 Consul Agent 作为物理存储后端:
storage "consul" {}
自定义细节
该例子演示了使用自定义地址与 ACL 令牌与 Consul 通信:
storage "consul" {
address = "10.5.7.92:8194"
token = "abcd1234"
}
自定义存储路径
该例子演示了将数据存储在 Consul 键值存储的自定义路径上。如果 Consul 启用了 ACL 那么使用的 ACL 令牌必须对该路径拥有读写权限:
storage "consul" {
path = "vault/"
}
使用 Unix Socket 与 Consul 通信
该例子演示了通过本机 unix socket 与 Consul 通信:
storage "consul" {
address = "unix:///tmp/.consul.http.sock"
}
自定义 TLS
该例子演示了如何使用自定义 CA、证书以及私钥文件基于 TLS 安全地与 Consul 通信:
storage "consul" {
scheme = "https"
tls_ca_file = "/etc/pem/vault.ca"
tls_cert_file = "/etc/pem/vault.cert"
tls_key_file = "/etc/pem/vault.key"
}