Consul Datacenter Federation

Nur damit ich es nicht gleich wieder vergesse: Um Consul Cluster in verschiedenen Umgebungen miteinander zu "Föderieren" sind mehrere Schritte notwendig, die nicht alle an derselben Stelle der Dokumentation zu finden sind.

Generell sollen sich zwei Consul Cluster, die in verschiedenen (OpenStack) Regionen installiert sind, "sehen".

Dazu müssen (in dieser Art Setup) alle Consul Server eine öffentliche IP-Adresse bekommen und die erforderlichen Ports für ihr jeweiliges Gegenüber freigeben (und idealerweise nur für diese).

Zusätzlich müssen alle beteiligten Consul Knoten (also sowohl Server als auch Clients) denselben Gossip Encryption Key verwenden. Es gibt zwar ein Procedere, um den Gossip Encryption Key zu rotieren - das scheint aber nicht immer zuverlässig zu funktionieren.

Wenn man also zwei Cluster unabhängig voneinander installiert hat und dabei (natürlich) nicht denselben Gossip Encryption Key verwendet hat, kann es passieren, man den Key nicht getauscht bekommt. Dann hilft es, die entsprechenden Dateien im Arbeitsverzeichnis von Consul zu löschen und den Dienst neu zu starten.

Danach sollte es möglich sein, die "entfernten" Consul Server per consul join -wan <server-IP> dem aktuellen Cluster hinzuzufügen. Dabei werden als Server-IP die öffentlichen Adressen der entsprechenden Consul Server gewählt.

Es kann natürlich sein, dass sowohl die Consul Server als auch die Clients in ihren jeweiligen Regionen IP-Adressen aus denselben IP-Netzen zugewiesen bekommen (haben). Damit das nicht zur Verwirrung führt, gibt es einerseits den Parameter -advertise-wan <public IP> der nur beim Start von Consul (also im systemd Unit File) übergeben werden kann (und nicht als Parameter in der Konfigurationsdatei zur Verfügung steht).

Zusätzlich kann man (jetzt aber wieder in der Konfigurationsdatei) noch den Parameter translate_wan_addrs setzen, der dafür sorgen soll, daß Requests von lokalen Clients mit der lokalen IP-Adresse und Anfragen von entfernten Clients mit der öffentlichen IP-Adresse beantwortet werden.

Auf diese Weise sollte es dann schon möglich sein, die jeweils anderen Consul Server mit consul members -wan aufzulisten und die jeweils auf der anderen Seite registrierten Dienste abzufragen.

Inzwischen gibt es auch die Möglichkeit mit Hilfe von Mesh-Gateways zu föderieren (um nicht mehr alle Consul Server im Netz bekannt machen zu müssen). Dazu - und auch zum Zugriff über das Mesh-Netzwerk auf Dienste in anderen Clustern - dann später mehr.