Einem Container eine eigene Adresse im Netz geben: was Sie gewinnen, was Sie zahlen
Man kann einen Container mit eigener Adresse statt über eine Portnummer veröffentlichen. Der Gewinn ist echt und der Preis auch, und Letzteren entdeckt man meist erst nach dem Aufbau.
AtlasPVE ·
Dieser Eintrag beantwortet
- docker container eigene ip adresse
- was ist docker macvlan
- docker macvlan host erreicht container nicht
- docker container nicht im netzwerk sichtbar
- docker container ip statt port geben
Die Standardanordnung ist diese: der Container teilt sich die Adresse der Maschine, und Sie erreichen ihn über eine Portnummer. Das ist einfach, sicher und für die meiste Arbeit ausreichend.
Es gibt Fälle, in denen es nicht reicht, und die sind vorhersehbar.
Wann eine Portnummer nicht reicht
Zwei Anwendungen wollen dieselbe Nummer. Sie verschieben eine auf eine andere Nummer, und dann tragen die Links, die diese Anwendung selbst erzeugt, jene Nummer nicht, und es wird unübersichtlich.
Die Anwendung meldet sich im Netz an. Drucker finden, Medienabspieler finden, Geräte im smarten Zuhause finden: das funktioniert über selbstankündigende Nachrichten. Diese Nachrichten überleben die Portzuordnung nicht. Die Anwendung kündigt sich an, aber die Adresse, die sie ankündigt, ist die der Maschine, und die Gegenseite erreicht sie nicht.
Sie wollen die Anwendung in der Geräteliste des Routers sehen. Um ihr eine feste Adresse zu geben, eine eigene Firewallregel zu schreiben, ihren Verkehr getrennt zu sehen. Mit Portzuordnung existiert diese Anwendung für das Netz nicht; nur die Maschine existiert.
Der andere Weg: dem Container eine eigene Identität geben
Der Container erscheint im Netz mit seiner eigenen Hardwareadresse, bekommt seine eigene Adresse vom Router und steht in der Geräteliste wie ein physisches Gerät.
Die erste Reaktion darauf ist meist "warum macht das nicht jeder so". Die Antwort liegt im Preis.
Preis eins: die Maschine erreicht ihren eigenen Container nicht
Das überrascht am meisten, und es wird meist erst nach getaner Arbeit entdeckt.
Alle Geräte im Netz erreichen diesen Container. Die Maschine, die ihn beherbergt, nicht.
Der Grund ist einleuchtend: beide benutzen dieselbe physische Schnittstelle, und der Verkehr kommt vom Switch nicht zurück. Die Maschine schickt das Paket hinaus, und das Paket kehrt nicht zur eigenen Karte zurück.
Die Folgen sind alltäglich: eine auf der Maschine laufende Zustandsprüfung erreicht die Anwendung nicht, ein anderer Container auf derselben Maschine kann sich nicht verbinden, ein von Ihnen geschriebenes Skript funktioniert nicht. Und das alles, während das Netz von außen einwandfrei aussieht.
Es gibt eine Lösung, aber sie ist ein zusätzliches Teil: auf der Maschine eine zweite virtuelle Schnittstelle an derselben Karte öffnen und den Weg zur Adresse des Containers darüber führen. Einmal eingerichtet ist das Problem weg, aber weil es eine Ergänzung ist, versteht es niemand, wenn es vergessen wird.
Preis zwei: Sie verbrauchen eine echte Adresse
Jeder Container verbraucht eine Adresse aus Ihrem Netz. Zehn Anwendungen heißt zehn Adressen. In einem kleinen Netz stoßen Sie schnell an die Grenze.
Außerdem kann sich die Adresse ändern, wenn sie eine Leihgabe ist. Ändert sie sich, zeigt alles, was daran festgemacht war, auch eine von Ihnen geschriebene Regel, stillschweigend an die falsche Stelle.
Preis drei: Netzwerkkarte und Firewall
Die Karte muss mehr als eine Hardwareadresse akzeptieren. Die meisten drahtlosen Verbindungen tun das nicht, und manche virtuellen Umgebungen kommen damit abgeschaltet. Entscheiden Sie nicht ohne Test.
Und Ihre Firewall sieht jetzt ein Gerät im Netz, das sie nicht kennt. Für Sie ist es ein Container; für den, der die Regeln schreibt, ein gewöhnliches Gerät. Das ist kein Problem, aber unausgesprochen verwirrt es eines Tages jemanden.
Eine Adresse reicht nicht, es braucht auch einen Namen
Eine Anwendung mit Adresse und ohne Namen ist der halbe Gewinn. Niemand will eine Adresse auswendig lernen.
Damit der Name im Netz angekündigt wird, muss etwas diese Aufgabe übernehmen. Das eigene Abbild der Anwendung enthält so ein Teil meist nicht, und das muss es auch nicht: ein Datenbankabbild hat sich in einem Netz nicht anzukündigen.
Die Regel
Eine Portzuordnung gibt einer Tür eine Nummer. Eine Netzidentität verleiht Staatsbürgerschaft.
Verleihen Sie die Staatsbürgerschaft nur, wenn das Netz jene Anwendung wirklich wie ein Gerät behandeln muss. Wenn nicht, ist eine Portnummer einfacher und sicherer zugleich.
Was Atlas macht
Beim Einrichten rührt Atlas das eigene Abbild der Anwendung nicht an. Es öffnet neben der Anwendung einen kleinen Helfer, und der Helfer teilt sich den Netzstapel der Anwendung. Der Helfer fragt beim Router die Adresse an, und der Helfer kündigt den Namen im Netz an.
Diese Anbindung ist gewollt und bringt zweierlei. Das Abbild der Anwendung braucht weder einen Adressclient noch einen Namensankündiger. Und weil der Netzstapel zur Anwendung gehört, fällt der Helfer von selbst mit, wenn die Anwendung anhält, sodass kein verwaister Container zurückbleibt.
Für das Problem, dass die Maschine ihren eigenen Container nicht erreicht, wird die oben beschriebene Brücke eingerichtet, und zwar als Dienst, damit sie sich beim Neustart der Maschine selbst wiederherstellt.
Erzählenswert ist eigentlich ein Fehler, der in dieser Brücke beim Test im laufenden Betrieb gefunden wurde.
Die Brücke legte einen Weg zur Adresse des Containers an. Aber sie löschte den Weg eines verschwundenen Containers nicht. Nach einem Neustart war der Weg einer vorübergehenden Adresse hängen geblieben. Die Folge: nimmt sich später ein anderes Gerät diese Adresse, wird der für dieses Gerät bestimmte Verkehr in die Brücke umgeleitet. Der Fehler trifft also nicht den Container, sondern einen unbeteiligten Dritten im Netz.
Die Korrektur bestand darin, die Brücke nicht länger als etwas zu belassen, das nur Wege hinzufügt, sondern als etwas, das Wege löscht, die keinem lebenden Container mehr entsprechen.
Die allgemeine Lehre gilt auch außerhalb der Netztechnik: Hinzufügen ist die leichte Hälfte. Ein Weg, eine Regel, eine Zuordnung ist eine Behauptung, die Sie über die Welt aufstellen. Ändert sich die Welt, wird eine nicht zurückgenommene Behauptung zur Lüge, und sie trifft meist nicht Sie, sondern jemanden, der mit Ihnen nichts zu tun hat.
Quellen
Die eigene Dokumentation von Proxmox. Auf Englisch, und sie hat in dieser Sache das letzte Wort.