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"
 | 
						|
    }
 | 
						|
  }
 | 
						|
} |