1

如何在领事模板配置文件中使用变量?

我有要运行的领事模板,下面是我的领事模板配置:

vault {

  address      = "http://$VAULT_ADDR:8200"
  token        = "sometoken"
  unwrap_token = false
  renew_token  = false
}


template {
  source      = "somepath/agent.crt.tpl"
  destination = "somepath/agent.key"
  command     = "sh -c 'date && systemctl restart consul'"
}

我一整天都在尝试以动态方式放置保险库地址,或者将其作为变量传递,或者从 env 变量或通过 consul-template API 获取,但均未成功。

最后,我最终在我的服务文件中编写了这个巫术:

ExecStart=/bin/sh -c "/usr/local/sbin/consul-template -config /opt/consul/templates/tls-consul.hcl \
-vault-addr http://$(curl -s -XGET $(hostname -I | awk '{ print $1 }'):8500/v1/health/service/vault | jq .[0].Node.Address -r):8200"

有什么方便的方法吗?我可以token以某种方式使用环境变量,还是被迫对其进行硬编码?

4

1 回答 1

1

除了在 Consul 模板的配置文件中静态定义 Vault 令牌外,Consul 模板还可以从环境变量中检索 Vault 令牌,或者从命令行标志或配置文件选项VAULT_TOKEN定义的文件路径中检索。-vault-agent-token-filevault_agent_token_file

示例配置令牌文件配置

vault {
  address      = "http://$VAULT_ADDR:8200"
  vault_agent_token_file = "/path/to/token_file"
  unwrap_token = false
  renew_token  = false
}

这些选项中的任何一个都将消除将值硬编码到配置文件中的需要,同时还为您提供了一些额外的灵活性,能够使用单独的配置过程填充该文件的值。

于 2022-01-02T21:05:49.360 回答