defined - nebula managed

Weil es bei nebula ja etwas nervt, die Hosts zu verwalten und händisch dem Overlaynetzwerk hinzuzufügen, war ich froh, als ich auf defined networking gestossen bin, die hinter nebula stehen und das Ganze auch "managed" anbieten.

Der Clou dabei ist, dass sie eine API bereithalten, mit der man Hosts automatisch dem Netz hinzufügen kann. Sie haben einen Guide dafür, der Automating Host Creation with the API heißt.

Netterweise gibt es bei defined einen "free tier", in dem man üben kann, wie das funktioniert. Mit einem API-Key bewaffnet, reicht es, sich mit einem Curl-Aufruf den Enrollment-Code zu generieren

curl -L 'https://api.defined.net/v1/host-and-enrollment-code' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer dnkey-grzlbrmpf' \
-d '{
  "name": "My new host",
  "networkID": "network-grzlbrmpf",
  "roleID": "role-grzlbrmpf"
}'

NetworkID und role-ID werden benötigt (wobei "role" hier nichts mit RBAC zu tun hat sondern die Rolle des Hosts beschreibt – insbesondere im Bezug auf die Firewallregeln, die dieser "Host-Rolle" zugewiesen werden sollen).

Mit dem Enrollment-Code kann man dann die folgenden Schritte (automatisiert) auf dem frischen Client durchführen:

Danach läuft auf dem Host der dnclient als systemd-Service. Die Konfiguration "entsteht" während des Enrollments in /etc/defined. Das Netzwerkinterface zum Overlaynetzwerk heisst dann defined1 und könnte dann z. B. in einer Nomad-Konfiguration entsprechend berücksichtigt werden:

[...] 
  host_network "overlay" {
    interface = "defined1"
  }
  host_network "internal" {
    interface = "ens3"
  }
  host_network "local" {
    interface = "lo"
  } 
}

advertise {
  # Defaults to the first private IP address.
  http = "{{ GetInterfaceIP \"defined1\" }}" # must be reachable by Nomad CLI clients
  rpc  = "{{ GetInterfaceIP \"defined1\" }}" # must be reachable by Nomad client nodes
  serf = "{{ GetInterfaceIP \"defined1\" }}" # must be reachable by Nomad server nodes
}
[...]

Das jetzt noch richtig in die Startsequenz eingebaut und dem Autoscaling auch im Overlaynetzwerk steht nicht mehr viel im Wege...


Offenbar hat sich da schonmal jemand Gedanken gemacht:

GitHub - quickvm/defined-systemd-units: Opinionated defined.net dnclient systemd units to automate host enrollment and unenrollment
Opinionated defined.net dnclient systemd units to automate host enrollment and unenrollment - quickvm/defined-systemd-units