Nomad im Consul-DNS

Nur damit ich es hier mal aufgeschrieben habe (und nicht falsch in Erinnerung behalte): Tatsächlich ist es so, dass sich ein Nomad Cluster – wenn es mit Consul integriert ist (oder werden kann) – automatisch dort als Service "nomad" registriert.

Der Nomad Cluster

root@nomad-prod2-0:~# nomad server members
Name                    Address         Port  Status  Leader  Raft Version  Build  Datacenter  Region
nomad-prod2-0.de-north  192.168.0.184   4648  alive   false   3             1.9.4  prod2       de-north
nomad-prod2-1.de-north  192.168.0.9     4648  alive   false   3             1.9.4  prod2       de-north
nomad-prod2-2.de-north  192.168.0.143   4648  alive   true    3             1.9.4  prod2       de-north

registriert sich als bei Consul so:

root@consul-prod2-0:~# consul catalog services
consul
nomad
root@consul-prod2-0:~# consul members list
Node            Address             Status  Type    Build   Protocol  DC   Partition  Segment
consul-prod2-0  192.168.0.193:8301  alive   server  1.21.2  2         dc1  default    <all>
nomad-prod2-0   192.168.0.184:8301  alive   client  1.21.2  2         dc1  default    <default>
nomad-prod2-1   192.168.0.9:8301    alive   client  1.21.2  2         dc1  default    <default>
nomad-prod2-2   192.168.0.143:8301  alive   client  1.21.2  2         dc1  default    <default>
root@consul-prod2-0:~# dig -p 8600 +short @127.0.0.1 nomad.service.consul
192.168.0.184
192.168.0.9
192.168.0.143

Andere DNS-Anfragen sind unter Consul DNS Syntax erklärt. So kann man die einzelnen Nomad Nodes z. B. mit

root@consul-prod2-0:~# dig -p 8600 +short @127.0.0.1 nomad-prod2-0.node.consul
192.168.0.184

abfragen.

In der Consul-GUI sieht es so aus:

In diesem Fall habe ich nur eine simple Consul-Integration auf den Nomad-Servern verwendet:

[...]
consul {
  grpc_address = "127.0.0.1:8503"
  ssl          = false
  address      = "127.0.0.1:8500"
  auto_advertise = true
}
[...]

Bei einer Consul-Konfiguration mit TLS und ACLs sähe das natürlich noch etwas komplizierter aus.

Das Ganze ist m. E. für die Verwendung von Nomad Workload Identity wichtig, da hier ja JWT-Tokens bei Nomad angefragt werden und da ist es natürlich sinnvoll, wenn diese Anfragen immer auf einem laufenden Nomad-Server ankommen. Und das wiederum lässt sich hervorragend mit dynamischem DNS realisieren, welches Consul mitliefert.