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

  • Monte Carlo im Dungeon

    30.07.2017

    Der von mir neulich vorgestellte Dungeon-Generator war nur ein Schritt auf dem Weg: Ich wollte meine Studentenzeit aufleben lassen und einen Simulator bauen, in dem ich Monte-Carlo-Lokalisierung ausprobieren konnte...

    Weiterlesen...

Neueste Artikel

  • OpenSource - lieben, hassen - oder beides?

    Ich habe neulich zwei verschiedene Ideen verfolgt, die mich beide dazu brachten, OpenSource-Projekte mit meinem Input zu veredeln. Dabei sah ich, was schlecht an OpenSource-Projekten ist und warum deren Existenz trotzdem eine richtig gute Sache ist!

    Weiterlesen...
  • Links zu SNMP, Telegraf unf Grafana

    Nachdem die letzten Linksammlungen eher immer wilde Zusammenstellungen waren, die alle möglichen und unmöglichen Themen umfassten, hier nun eine thematisch eher enger begrenzte...

    Weiterlesen...
  • LinkCollections 2022 VIII

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet für dieses Jahr folgt hier nunmehr die nächste:

    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.