TCP Routing in Traefik 2.x

12.06.2020

Ich hatte mich bereits for Einsatz von Traefik im Heimlabor für die Möglichkeit interessiert, mehrere virtualisierte Container den gleichen Dienst auf dem gleichen Port anbieten zu lassen und eine Art Applikationsrouter über den Namen, den der Client zum Verbindungsaufbau nutzt die Verbindung zur jeweiligen Instanz "routen" zu lassen...

Tatsächlich war die Idee, von der alles ihren Ausgenag nahm folgende: Man stelle mehrere Datenbank-Instanzen als Docker-Container bereit. Die unterschiedlichen Entwicklungsteams bekommen je eine Instanz zugeteilt. In einem normalen Dockerumfeld ohne zusätzliche Maßnahmen würden die Datenbank-Server alle den Standardport anbieten und Docker würde jede Instanz auf einen anderen Port mappen.

Jedes Team oder abstrakter: jeder Client müsste sich dann zum selben Host (dem Dockerhost), aber auf einen anderen Port verbinden. Nun weiß ich auch, dass man die Datenbank-Instanzen auch zu einem High-Availability-Cluster mit Replikation zusammenschalten und jedem Client sein eigenes Schema geben könnte - aber ich möchte hier verdeutlichen, wie die Idee antstand - und außerdem könnte es ja sein, dass die einzelnen Clients spezifische Versionen der Datenbanklösung benötigen. Dieses Szenario wäre mit einem HA-Cluster nicht mehr abzubilden.

Nachdem wir diese Idee einige Zeit besprochen und durchdacht hatten, kam ein Kollege mit der Inspiration Traefik. Leider stellte sich schnell heraus, dass Traefik zwar ideal für genau dieses Szenario war - aber nur wenn die Protokolle HTTP oder HTTPS zur Kommunikation zum Einsatz kamen.

Die neue Version 2.0 von Traefik änderte das - die Werbung versprach nun auch jedwede TCP-Kommunikation routen zu können. In den Zeiten der Quarantäne spare ich viel Zeit, die sonst mit Pendeln draufgeht, vor einiger Zeit hatte ich die Migration zu Traefik 2.2 bereits vollzogen und so hatte ich Muße, die alte Idee nochmals im Kontext von Traefik 2.x zu durchdenken.

Leider kam ich damit auch nicht weiter - denn die Voraussetzung für TCP-Routing in Traefik 2.0 heißt Transport Layer Security: Es wurde ein neues Konzept eingeführt, das SNI heißt: beim Aufbau verschlüsselter Verbindungen ist es mit Server Name Indication - dafür steht SNI nämlich - möglich, dass der Client, die Information darüber, mit welchem Host er eine Verbindung wünscht, unverschlüsselt überträgt.

Das heißt, dass der Server eine TLS-Schnittstelle anbieten muss, die der Client zur Verbindung benutzt und gleichzeitig muss der Client SNI unterstützen. Es lassen sich im Netz diverse Darstellungen finden, dass andere bereits das hier geschilderte Datenbank-Szenario probiert haben und an der fehlenden Unterstützung an der einen oder anderen Stelle gescheitert sind...

Ich habe hier trotz allem nochmals einige Links zusammengefasst, die mir bei der Recherche geholfen haben...

Artikel, die hierher verlinken

Keycloak, OTP, FIDO

11.06.2021

Ich berichtete neulich über die Installation und erste Tests von Keycloak. Nun bin ich tiefer eingetaucht und habe die diversen Möglichkeiten untersucht, die Authentifizierung mittels zweiten Faktors sicherer zu machen.

Traefik und HTTPS

11.06.2021

Ich habe nun endlich alle Docker-Container auf HTTPS ungestellt...

Dokumentenmanagement mit Docker

13.09.2020

Ich habe zur Vervollständigung meines Docker-Zoos nach einem Dokumenten-Management-System gesucht, das dem Katalog meiner Anforderungen entsprach

WireViz als Docker-Container

29.08.2020

Eine weitere Ergänzung meines Docker-Zoos wurde eingeleitet durch den Tip eines Kollegen.

Guacamole on Docker

18.07.2020

Auch heute soll es wieder um eine Erweiterung für meinen Docker-Zoo gehen.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Android als Smartcard (NFC) II

    05.05.2019

    Das letzte Mal war das ganze eher grobe Bastelei. Nachdem ich nun ein neues Smartphone angeschafft habe, wollte ich probieren, ob es inzwischen einfacher funktioniert - und ich wurde über alle Erwartungen hinaus überrascht...

    Weiterlesen...

Neueste Artikel

  • SQLite als Geodatenbank

    Wie bereits in einem früheren Artikel beschrieben treibe ich derzeit Anstrengungen voran, die sQLshell attraktiver für Nutzer zu machen, die mit Geodatenbanken arbeiten.

    Weiterlesen...
  • Contributor bei Rosetta Code

    Ich habe mich neulich einmal ein wenig auf Rosetta Code umgesehen und bin über die Rubrik Draft Programming Tasks gestolpert, wo ich sofort eine Aufgabe fand, die mich ansprach.

    Weiterlesen...
  • Graphics2D Implementierung für Java mit verlegtem Koordinatenursprung

    Es gibt seit vielen Jahren immer mal wieder Leute, die im Internet fragen, ob man in Javas diversen Methoden zum Zeichnen von Graphiken das Koordinatensystem so ändern könnte, dass sich der Koordinatenursprung links unten befindet und die positive y-Achse nach oben weist. Meist sind die Antworten dann, dass eine Affine Transformation eingeschaltet werden solle, die das Bild spiegelt.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.