我已经安装了 Hachicorp Vault 并设置了 TLS 配置。我现在的目标是vault.service
在更新 TLS 证书时自动重新加载。
官方文档状态:
tls_key_file (string: , reloads-on-SIGHUP) – 指定证书私钥的路径。它需要 PEM 编码的文件。如果密钥文件已加密,系统将在服务器启动时提示您输入密码。使用 SIGHUP 重新加载配置时,密钥文件之间的密码必须保持相同。在 SIGHUP 上,Vault 启动时设置的路径将用于重新加载证书;在 Vault 运行时修改此值不会对 SIGHUP 产生影响。
这是否意味着更改后服务会自行重新加载tls_key_file
?或者我应该添加额外的逻辑?
vault.service
[Unit]
After=network.service hostname.service consul-init.service consul.service
Description="Hashicorp Vault - A tool for managing secrets"
Documentation=https://www.vaultproject.io/docs/
StartLimitInterval=200
StartLimitBurst=5
[Service]
User=vault
Group=vault
PermissionsStartOnly=true
ExecStart=/usr/bin/vault server -config="{{vault_server_config_file}}"
ExecReload=/bin/kill -HUP $MAINPID
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
LimitNOFILE=65536
LimitMEMLOCK=infinity
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
更新
在 @Jiri B 回答后,我重新调整了我的设置。
因此,现在当 TLS 证书更新时,会向 Vaultvault-agent.service
发送信号。SIGHUP
template {
source = "{{vault_template_dir}}/ca.crt.tpl"
destination = "{{vault_tls_dir}}/ca.crt"
command = "pkill --signal SIGHUP vault"
}
和vault-agent.service
[Unit]
After=network.service hostname.service
StartLimitInterval=600
StartLimitBurst=5
[Service]
PIDFile=/run/vault-agent.pid
User=vault
Group=vault
ExecStart=/usr/bin/vault agent -config="{{vault_agent_config_file}}"
ExecReload=/bin/kill -HUP $MAINPID
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
NoNewPrivileges=yes
LimitNOFILE=65536
LimitMEMLOCK=infinity
Restart=always
RestartSec=30
StartLimitInterval=600
[Install]
WantedBy=multi-user.target
这工作正常并且vault.service
正在重新加载。然而,另一个问题又出现了。两者vault.service
都有vault-agent.service
相同的用户和组,并且在更新证书时都应重新加载。保险库代理似乎没有编码来捕获SIGHUB
信号。因此,当该脚本运行时,command = "pkill --signal SIGHUP vault"
会vault.service
重新加载并运行。但是,vault-agent.service
无法启动。
● vault-agent.service - "Hashicorp Vault - A tool for managing secrets"
Loaded: loaded (/etc/systemd/system/vault-agent.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) since Tue 2021-04-06 12:17:26 UTC; 6s ago
Docs: https://www.vaultproject.io/docs/
Process: 13482 ExecStart=/usr/bin/vault agent -config=/etc/vault.d/agent.hcl (code=killed, signal=HUP)
Main PID: 13482 (code=killed, signal=HUP)
关于这个问题有什么想法吗?
答案1
不,这意味着vault
Goland 中的进程编码方式能够捕获信号,其中一个信号可能是 SIGHUP。当 SIGHUP 被捕获时,进程将在内部重新加载自身(即,它不会从头开始自行重新启动,它只会根据已经存在的参数重新加载自身)。
顺便说一句,您的代码中有一个拼写错误s/MAINIP/MAINPID
。
看https://en.wikipedia.org/wiki/Signal_(IPC)
看看它是如何完成的sshd.service
。
systemctl show -p ExecReload -l --no-pager sshd.service
ExecReload={ path=/bin/kill ; argv[]=/bin/kill -HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }