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

results matching ""

    No results matching ""