Zurück zum Blog

Ordnung im Maschinenraum: Wie sich über 60 Container sauber gruppieren und abschotten lassen

Ordnung im Maschinenraum: Wie sich über 60 Container sauber gruppieren und abschotten lassen

Datum 16. Juli 2026
Kategorie Architektur
Lesezeit 9 Minuten

Wenn aus einem Dienst sechzig werden

Eine selbstgehostete Cloud beginnt meist klein: ein Reverse-Proxy, eine Anwendung, eine Datenbank. Doch das wächst. Jeder neue Dienst bringt seine eigene Datenbank mit, oft einen Cache, manchmal einen Hintergrund-Arbeiter, einen Metrik-Exporter. Aus einer Handvoll Containern werden schnell Dutzende – bei uns inzwischen über sechzig, verteilt auf dreizehn Funktionsgruppen.

Ab einer gewissen Größe stellt sich die Frage nicht mehr „Läuft es?“, sondern „Verstehe ich noch, was da läuft und warum es miteinander reden darf?“ Genau das ist der Punkt, an dem eine bewusste Architektur den Unterschied macht zwischen einem wartbaren System und einem Kartenhaus. Dieser Beitrag beschreibt das Ordnungsprinzip dahinter – bewusst generisch, als Blaupause für jeden, der vor demselben Wildwuchs steht.

Hinweis zur Darstellung: Aus Sicherheitsgründen nennt dieser Beitrag keine konkreten Produkte, Versionen, Container-Namen oder Ports. Eine detaillierte Auflistung der eingesetzten Software wäre für einen Angreifer eine bequeme Landkarte. Es geht hier um das Muster, nicht um die Bauteile.

Das Ordnungsprinzip: Funktion und Isolation

Zwei Fragen strukturieren die gesamte Landschaft. Erstens: Welche Funktion erfüllt ein Container? Zweitens: Mit wem muss er dafür reden – und mit wem auf keinen Fall?

Die erste Frage bündelt Container zu Funktionsgruppen: Alles, was zusammen einen Dienst ergibt, gehört zusammen. Die zweite Frage zieht die Grenzen: Jede Gruppe bekommt ihr eigenes, privates Netzwerk. Container innerhalb einer Gruppe sehen einander; über die Gruppengrenze hinweg sehen sie nichts – es sei denn, es ist ausdrücklich erlaubt.

Kernidee: Ein Datenbank-Container muss nur von seiner eigenen Anwendung erreichbar sein – von sonst niemandem, und schon gar nicht aus dem Internet. Ein separates internes Netz pro Dienst macht genau das zur Voreinstellung, statt es dem Zufall zu überlassen.

Die Funktionsgruppen im Überblick

Nach Funktion sortiert ergibt sich eine überschaubare Landkarte. Jede Gruppe hat eine klar umrissene Aufgabe:

Die Eingangsschicht

Ein einziger Reverse-Proxy ist der alleinige Eingangspunkt für allen verschlüsselten Web-Verkehr. Er entscheidet, welche Anfrage zu welchem Dienst geht, kümmert sich um Zertifikate und setzt Sicherheits-Regeln durch. Dazu gehören ein Dienst für ausgehende E-Mail-Zustellung und die tägliche Datensicherung. Diese Schicht ist die einzige, die sowohl nach außen als auch in die Backend-Netze reicht.

Kommunikation

Eine vollständige Mail-Suite – Versand, Empfang, Webmail, Spam- und Virenfilter, ein eigener DNS-Resolver – bildet die größte einzelne Gruppe. Sie läuft komplett in ihrem eigenen, abgeschotteten Netz. Eine Mail-Infrastruktur hat eine große Angriffsfläche; sie strikt zu isolieren, begrenzt den Schaden, falls doch einmal etwas durchkommt.

Zentrale Anmeldung

Ein Single-Sign-On-Dienst übernimmt die Anmeldung für alle anderen Dienste. Statt jeder Anwendung ihre eigene Nutzerverwaltung zu geben, gibt es eine zentrale Stelle – mit eigener Datenbank und eigenem Cache in einem isolierten Backend. Das reduziert die Zahl der Orte, an denen Zugangsdaten liegen, auf genau einen.

Daten- und Anwendungsdienste

Hierzu zählen ein Cloud-Speicher für Dateien, ein Headless-CMS hinter dieser Website, ein Git-Dienst für den Quellcode und eine Workflow-Automatisierung mit angeschlossener Vektordatenbank. Das Prinzip ist bei allen gleich: Jede Anwendung bringt ihre eigene Datenbank mit, und beide teilen sich ein privates Netz, das sonst niemand betritt.

Beobachtung und Sicherheit

Zwei Gruppen wachen über den Rest. Die Beobachtungsschicht sammelt Metriken, zeichnet Dashboards, verschickt Alarme und erhebt Web-Analytik. Die Sicherheitsschicht ist ein SIEM – ein System, das sicherheitsrelevante Ereignisse aus dem gesamten Verbund zusammenführt und auswertet. Beide liegen in eigenen internen Netzen.

Betrieb und Fundament

Schließlich das Rückgrat: Werkzeuge, die über neue Software-Stände informieren, bei der Stack-Verwaltung helfen und Push-Benachrichtigungen zustellen. Dazu ein selbstgehosteter VPN-Koordinationsserver für ein privates Mesh-Netz und eine private Container-Registry, die ausschließlich intern erreichbar ist.

Ein lehrreiches Beispiel für Rollentrennung: Eine unserer Anwendungen – ein Demonstrator – wurde kürzlich von einem einzigen Anwendungs-Container auf drei rollenspezifische aufgeteilt: eine öffentliche Schnittstelle für die Weboberfläche, eine separate Schnittstelle für den maschinellen Datenaustausch und ein Hintergrund-Prozess für wiederkehrende Aufgaben. Alle drei laufen aus demselben Bauplan, aber mit unterschiedlicher Aufgabe – und, entscheidend: Die maschinelle Schnittstelle ist vom Internet aus gar nicht erreichbar.

Das wiederkehrende Muster: App, Datenbank, eigenes Netz

Wer die Gruppen nebeneinanderlegt, erkennt dasselbe Muster immer wieder. Fast jeder Dienst besteht aus:

Baustein Aufgabe Sichtbarkeit
Die Anwendung Erbringt die eigentliche Leistung Über den Reverse-Proxy erreichbar
Die Datenbank Speichert die Daten der Anwendung Nur im privaten Backend-Netz
Cache / Hintergrund-Arbeiter Beschleunigt, erledigt Aufgaben nebenher Nur im privaten Backend-Netz

Dieses Muster als Standard zu behandeln, hat einen unterschätzten Vorteil: Es macht die sichere Variante zur bequemen Variante. Eine neue Datenbank landet automatisch im privaten Netz, weil das die Vorlage ist – nicht, weil jemand daran denken musste, sie abzuschotten. Sicherheit, die man aktiv untergraben müsste, ist stabiler als Sicherheit, an die man sich erinnern muss.

Least Exposure: Was nie ins Internet gehört

Der wichtigste Grundsatz der ganzen Anordnung lautet: So wenig wie möglich nach außen zeigen. Der Reverse-Proxy ist der einzige Dienst, der öffentlich erreichbar sein muss. Alles andere – Datenbanken, Caches, interne Schnittstellen, Verwaltungswerkzeuge, die Registry – bleibt hinter der Grenze.

Ein häufiger Fehler: Einen internen Dienst „nur mal schnell“ nach außen zu öffnen, weil es der Zugriff bequemer macht. Jede solche Öffnung ist eine neue Tür in der Außenwand. Der sichere Weg für internen Zugriff ist ein privates VPN – nicht ein weiterer offener Port.

Für Dienste, die nur zwischen Maschinen sprechen, gilt das doppelt: Sie brauchen keine öffentliche Adresse. Sie über ein privates Mesh-Netz erreichbar zu machen und zusätzlich per Firewall auf genau diesen Adressbereich zu beschränken, hält sie für das offene Internet unsichtbar – so, als gäbe es sie nicht.

Warum Segmentierung Sicherheit ist

Netzwerk-Segmentierung ist keine akademische Fingerübung, sondern gelebte Schadensbegrenzung. Der Fachbegriff dafür ist Blast Radius – die Reichweite eines Einbruchs.

Stellt man sich vor, ein einzelner Container würde kompromittiert: In einem flachen Netz, in dem alle alles sehen, hätte der Angreifer sofort Sicht auf jede Datenbank, jeden Dienst, jedes Geheimnis. In einer segmentierten Landschaft sieht er zunächst nur die anderen Container seiner eigenen Gruppe – und stößt an jeder Gruppengrenze auf eine Wand. Jede Grenze, die er überwinden muss, ist Zeit, ist Spur, ist eine weitere Gelegenheit, entdeckt zu werden.

Die drei Verteidigungslinien der Anordnung:
  • Ein einziger Eingang: Nur der Reverse-Proxy ist öffentlich – eine kleine, gut zu bewachende Außenfläche statt vieler offener Türen.
  • Private Netze pro Dienst: Datenbanken und interne Dienste sind über die Gruppengrenze hinweg unerreichbar.
  • Zentrale Anmeldung: Zugangsdaten liegen an einer Stelle, nicht verstreut über ein Dutzend Anwendungen.

Nebeneffekt: Ein Inventar, das man versteht

Eine saubere Gruppierung zahlt sich nicht nur bei der Sicherheit aus, sondern auch im Alltag. Fragt man „Was läuft hier eigentlich alles?“, ist die Antwort nicht eine unsortierte Liste von sechzig Namen, sondern dreizehn Gruppen mit je einer klaren Aufgabe. Ein neuer Container fällt sofort auf, weil er in eine Gruppe gehört – oder eben verdächtig heimatlos ist.

Dieses Verständnis ist auch die Grundlage für gutes Monitoring: Man kann nur überwachen, was man benennen kann. Wer weiß, welche Container zusammengehören und welche Funktion jede Gruppe erfüllt, weiß auch, welcher Ausfall harmlos ist und welcher wehtut – und kann seine Alarme entsprechend schärfen.

Lessons Learned

Die wichtigsten Erkenntnisse:
  • Ab Dutzenden Containern ist eine bewusste Gruppierung nach Funktion kein Luxus, sondern Voraussetzung für Wartbarkeit.
  • Ein eigenes privates Netz pro Dienst macht die sichere Variante zur voreingestellten – Abschottung passiert, ohne dass man daran denken muss.
  • Nur der Reverse-Proxy gehört ins Internet. Datenbanken, interne Schnittstellen und Verwaltungswerkzeuge bleiben hinter der Grenze.
  • Internen Zugriff löst ein privates VPN, kein zusätzlich geöffneter Port.
  • Segmentierung begrenzt den Blast Radius: Jede Grenze verwandelt einen möglichen Totalschaden in einen lokalen Vorfall.
  • Wer öffentlich über seine Architektur schreibt, beschreibt das Muster – nicht die Bauteile. Produkte, Versionen und Topologie sind für Angreifer wertvoller als für Leser.

Über sechzig Container klingen nach Komplexität – und sind es auch. Aber die Komplexität wird beherrschbar, sobald jeder Container eine klare Funktion und eine klare Grenze hat. Ordnung im Maschinenraum ist am Ende weniger eine Frage der Technik als der Disziplin: jeden Dienst dorthin stellen, wo er hingehört, und ihn nur so weit öffnen, wie er es wirklich braucht.