Skip to main content

Hashicorp Nomad with NGINX Loadbalancer

Shen Zhen, China

NGINX

https://learn.hashicorp.com/tutorials/nomad/load-balancing-nginx https://www.hashicorp.com/blog/configuring-third-party-loadbalancers-with-consul-nginx-haproxy-f5 https://learn.hashicorp.com/tutorials/nomad/external-application-load-balancing?in=nomad/load-balancing https://www.nomadproject.io/docs/job-specification/gateway https://www.consul.io/docs/connect/gateways/ingress-gateway https://www.consul.io/docs/agent/config-entries https://learn.hashicorp.com/tutorials/consul/service-mesh-ingress-gateways

job "nginx" {
datacenters = ["dc1"]
type = "service"
group "nginx" {
count = 3
task "nginx" {
driver = "docker"
config {
image = "nginx"
port_map {
http = 8080
}
port_map {
https = 443
}
volumes = [
"custom/default.conf:/etc/nginx/conf.d/default.conf"
]
}
template {
data = <<EOH
server {
listen 8080;
server_name nginx.service.consul;
location /nginx {
root /local/data;
}
}
EOH
destination = "custom/default.conf"
}
# consul kv put features/demo 'Consul Rocks!'
template {
data = <<EOH
Nomad Template example (Consul value)
<br />
<br />
{{ if keyExists "features/demo" }}
Consul Key Value: {{ key "features/demo" }}
{{ else }}
Good morning.
{{ end }}
<br />
<br />
Node Environment Information: <br />
node_id: {{ env "node.unique.id" }} <br/>
datacenter: {{ env "NOMAD_DC" }}
EOH
destination = "local/data/nginx/index.html"
}
resources {
cpu = 100 # 100 MHz
memory = 128 # 128 MB
network {
mbits = 10
port "http" {
static = 8080
}
port "https" {
static= 443
}
}
}
service {
name = "nginx"
tags = [ "nginx", "web", "urlprefix-/nginx" ]
port = "http"
check {
type = "tcp"
interval = "10s"
timeout = "2s"
}
}
}
}
}