我使用的是Hashicorp保险库,执政官。所以我有保险库,领事和Golang Vaultmanager服务。这些服务作为docker容器运行。我没有使用任何容器编排(如k8s或podman(。只需使用docker-compose.yaml文件在Linux环境中运行容器。
请参阅下面的docker撰写文件内容。
version: '3.6'
services:
vault:
image: imagename
networks:
- nwname
command: server -config=/vault/config/vault-config.json
cap_add:
- IPC_LOCK
restart: always
consul:
image: imagename
networks:
- nwname
command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect 1 -config-file=/consul/config/config.json
restart: always
vaultmanager:
image: imagename
devices:
- "/dev/tpm0:/dev/tpm0"
networks:
- nwname
restart: always
networks:
nwname:
name: nwname
driver: bridge
目前,Vault服务正在使用自签名证书进行TLS通信。但我们需要更新证书(.crt和.key(。一旦容器启动并运行,在VaultManager服务启动期间,我将生成新证书,并将其放入加载现有证书的相同位置。
因此,Vault服务器需要获取最新更新的TLS证书。我们如何实现这一功能?
注意:Vault、Consul和VaultManager服务在单独的容器中运行。在VaultManager容器中,我们需要在无需手动干预的情况下自动实现此功能。
VaultManager服务是用GoLang编写的。
我已尝试使用docker restart Vault
但使用从VaultManager容器重新启动Vault容器
docker命令。
请参阅下面的vault配置。
{
"backend": {
"consul": {
"address": "consul:8500",
"path": "vault/"
}
},
"listener": {
"tcp":{
"address": "0.0.0.0:8200",
"tls_disable": 0,
"tls_cert_file" : "/vault/config/certificate.crt",
"tls_key_file" : "/vault/config/private.key"
}
},
"ui": true
}
此外,请给出建议,在这个用例中我们如何使用SIGHUP
过程。
目前还不清楚您要在这里做什么。您在这里询问的问题不是Vault独有的,而是一个一般的系统管理员问题。此外,还不清楚您正在利用哪个容器化平台。
第一个选项是SIGHUP Vault进程。对于某些配置,这足以让Vault获取和处理更改。如果已将Vault注册为systemd服务,则可以使用systemctl reload vault.service
命令发送此信号。
第二种选择是systemctl restart vault
。这将导致停机,并可能需要解封(除非您配置了自动解封(。只有在SIGHUP不起作用时才使用此选项。
第三种选择是向主机发送docker container restart vault
。这是假设Docker——如果你使用的是Kubernetes、Nomad、Cloud Foundry或其他什么,你应该把这些细节放在你的问题中。这将有一些与简单地重新启动服务相同的缺点,并且只有当您的容器在启动时运行了一个正在做重要事情的脚本时才应该使用(希望不是这样(。
如果您询问如何将ssh
从一个容器连接到另一个容器,您应该在问题中添加标记,因为这超出了Hashicorp Vault的范围。
进一步阅读:https://support.hashicorp.com/hc/en-us/articles/5767318985107-Vault-SIGHUP-Behavior