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 인증서가 업데이트되면 vault-agent.service
신호가 Vault로 전송됩니다.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 }