218 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			HCL
		
	
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			HCL
		
	
	
	
| job "traefik-consul-kv" {
 | |
|   datacenters = ["dc1"]
 | |
|   type = "service"
 | |
| 
 | |
|   group "traefik" {
 | |
|     count = 1
 | |
| 
 | |
|     constraint {
 | |
|       attribute = "${node.unique.name}"
 | |
|       value     = "hcp1"
 | |
|     }
 | |
| 
 | |
|     network {
 | |
|       mode = "host"
 | |
|       port "http" {
 | |
|         static = 80
 | |
|         host_network = "tailscale0"
 | |
|       }
 | |
|       port "traefik" {
 | |
|         static = 8080
 | |
|         host_network = "tailscale0"
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     task "traefik" {
 | |
|       driver = "exec"
 | |
|       
 | |
|       config {
 | |
|         command = "/usr/local/bin/traefik"
 | |
|         args = [
 | |
|           "--configfile=/local/traefik.yml"
 | |
|         ]
 | |
|       }
 | |
| 
 | |
|       template {
 | |
|         data = <<EOF
 | |
| api:
 | |
|   dashboard: true
 | |
|   insecure: true
 | |
| 
 | |
| entryPoints:
 | |
|   web:
 | |
|     address: "0.0.0.0:80"
 | |
|   traefik:
 | |
|     address: "0.0.0.0:8080"
 | |
| 
 | |
| providers:
 | |
|   consulCatalog:
 | |
|     endpoint:
 | |
|       address: "warden.tailnet-68f9.ts.net:8500"
 | |
|       scheme: "http"
 | |
|     watch: true
 | |
|   file:
 | |
|     filename: /local/dynamic.yml
 | |
|     watch: true
 | |
| 
 | |
| metrics:
 | |
|   prometheus:
 | |
|     addEntryPointsLabels: true
 | |
|     addServicesLabels: true
 | |
|     addRoutersLabels: true
 | |
| 
 | |
| log:
 | |
|   level: INFO
 | |
| EOF
 | |
|         destination = "local/traefik.yml"
 | |
|       }
 | |
| 
 | |
|       template {
 | |
|         data = <<EOF
 | |
| http:
 | |
|   middlewares:
 | |
|     consul-stripprefix:
 | |
|       stripPrefix:
 | |
|         prefixes:
 | |
|           - "/consul"
 | |
|     
 | |
|     traefik-stripprefix:
 | |
|       stripPrefix:
 | |
|         prefixes:
 | |
|           - "/traefik"
 | |
| 
 | |
|     nomad-stripprefix:
 | |
|       stripPrefix:
 | |
|         prefixes:
 | |
|           - "/nomad"
 | |
| 
 | |
|     consul-redirect:
 | |
|       redirectRegex:
 | |
|         regex: "^/consul/?$"
 | |
|         replacement: "/consul/ui/"
 | |
|         permanent: false
 | |
| 
 | |
|     nomad-redirect:
 | |
|       redirectRegex:
 | |
|         regex: "^/nomad/?$"
 | |
|         replacement: "/nomad/ui/"
 | |
|         permanent: false
 | |
| 
 | |
|     traefik-redirect:
 | |
|       redirectRegex:
 | |
|         regex: "^/traefik/?$"
 | |
|         replacement: "/traefik/dashboard/"
 | |
|         permanent: false
 | |
| 
 | |
|   services:
 | |
|     consul-cluster:
 | |
|       loadBalancer:
 | |
|         servers:
 | |
|           - url: "http://warden.tailnet-68f9.ts.net:8500"  # 北京,优先
 | |
|           - url: "http://ch4.tailnet-68f9.ts.net:8500"     # 韩国,备用
 | |
|           - url: "http://ash3c.tailnet-68f9.ts.net:8500"   # 美国,备用
 | |
|         healthCheck:
 | |
|           path: "/v1/status/leader"
 | |
|           interval: "30s"
 | |
|           timeout: "15s"
 | |
| 
 | |
|     nomad-cluster:
 | |
|       loadBalancer:
 | |
|         servers:
 | |
|           - url: "http://ch2.tailnet-68f9.ts.net:4646"     # Nomad server leader
 | |
|         healthCheck:
 | |
|           path: "/v1/status/leader"
 | |
|           interval: "30s"
 | |
|           timeout: "15s"
 | |
| 
 | |
|   routers:
 | |
|     consul-redirect:
 | |
|       rule: "Path(`/consul`) || Path(`/consul/`)"
 | |
|       service: consul-cluster
 | |
|       middlewares:
 | |
|         - consul-redirect
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 100
 | |
| 
 | |
|     consul-ui:
 | |
|       rule: "PathPrefix(`/consul/ui`)"
 | |
|       service: consul-cluster
 | |
|       middlewares:
 | |
|         - consul-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 5
 | |
| 
 | |
|     consul-api:
 | |
|       rule: "PathPrefix(`/consul/v1`)"
 | |
|       service: consul-cluster
 | |
|       middlewares:
 | |
|         - consul-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 5
 | |
|     
 | |
|     traefik-api:
 | |
|       rule: "PathPrefix(`/traefik/api`)"
 | |
|       service: api@internal
 | |
|       middlewares:
 | |
|         - traefik-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 6
 | |
| 
 | |
|     traefik-dashboard:
 | |
|       rule: "PathPrefix(`/traefik/dashboard`)"
 | |
|       service: dashboard@internal
 | |
|       middlewares:
 | |
|         - traefik-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 5
 | |
| 
 | |
|     traefik-redirect:
 | |
|       rule: "Path(`/traefik`) || Path(`/traefik/`)"
 | |
|       middlewares:
 | |
|         - "traefik-redirect"
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 100
 | |
| 
 | |
|     nomad-redirect:
 | |
|       rule: "Path(`/nomad`) || Path(`/nomad/`)"
 | |
|       service: nomad-cluster
 | |
|       middlewares:
 | |
|         - nomad-redirect
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 100
 | |
| 
 | |
|     nomad-ui:
 | |
|       rule: "PathPrefix(`/nomad/ui`)"
 | |
|       service: nomad-cluster
 | |
|       middlewares:
 | |
|         - nomad-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 5
 | |
| 
 | |
|     nomad-api:
 | |
|       rule: "PathPrefix(`/nomad/v1`)"
 | |
|       service: nomad-cluster
 | |
|       middlewares:
 | |
|         - nomad-stripprefix
 | |
|       entryPoints:
 | |
|         - web
 | |
|       priority: 5
 | |
| EOF
 | |
|         destination = "local/dynamic.yml"
 | |
|       }
 | |
| 
 | |
|       resources {
 | |
|         cpu = 500
 | |
|         memory = 512
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 |