94 lines
1.9 KiB
HCL
94 lines
1.9 KiB
HCL
job "vault-cluster" {
|
|
datacenters = ["dc1"]
|
|
type = "service"
|
|
|
|
group "vault-servers" {
|
|
count = 3
|
|
|
|
constraint {
|
|
attribute = "${node.unique.name}"
|
|
operator = "regexp"
|
|
value = "(warden|ash3c|master)"
|
|
}
|
|
|
|
task "vault" {
|
|
driver = "podman"
|
|
|
|
config {
|
|
image = "hashicorp/vault:latest"
|
|
ports = ["api", "cluster"]
|
|
|
|
# 确保容器在退出时不会自动重启
|
|
command = "vault"
|
|
args = [
|
|
"server",
|
|
"-config=/vault/config/vault.hcl"
|
|
]
|
|
|
|
# 容器网络设置
|
|
network_mode = "host"
|
|
|
|
# 安全设置
|
|
cap_add = ["IPC_LOCK"]
|
|
}
|
|
|
|
template {
|
|
data = <<EOH
|
|
storage "consul" {
|
|
address = "127.0.0.1:8500"
|
|
path = "vault/"
|
|
token = "{{ with secret "consul/creds/vault" }}{{ .Data.token }}{{ end }}"
|
|
}
|
|
|
|
listener "tcp" {
|
|
address = "0.0.0.0:8200"
|
|
tls_disable = 1 # 生产环境应启用TLS
|
|
}
|
|
|
|
api_addr = "http://{{ env "NOMAD_IP_api" }}:8200"
|
|
cluster_addr = "http://{{ env "NOMAD_IP_cluster" }}:8201"
|
|
|
|
ui = true
|
|
disable_mlock = true
|
|
EOH
|
|
destination = "vault/config/vault.hcl"
|
|
}
|
|
|
|
volume_mount {
|
|
volume = "vault-data"
|
|
destination = "/vault/data"
|
|
read_only = false
|
|
}
|
|
|
|
resources {
|
|
cpu = 500
|
|
memory = 1024
|
|
|
|
network {
|
|
mbits = 10
|
|
port "api" { static = 8200 }
|
|
port "cluster" { static = 8201 }
|
|
}
|
|
}
|
|
|
|
service {
|
|
name = "vault"
|
|
port = "api"
|
|
|
|
check {
|
|
name = "vault-health"
|
|
type = "http"
|
|
path = "/v1/sys/health"
|
|
interval = "10s"
|
|
timeout = "2s"
|
|
}
|
|
}
|
|
}
|
|
|
|
volume "vault-data" {
|
|
type = "host"
|
|
read_only = false
|
|
source = "vault-data"
|
|
}
|
|
}
|
|
} |