Guten Morgen,
Kurzer Hintergrund:
In meiner Abteilung bin ich mehr oder weniger der Hauptadmin für die VM-Verwaltung. Als OS wird zum großen Teil aktuell Debian 12 eingesetzt. Die Konfiguration erfolgt über Ansible. Als lokale Firewall nutze ich nftables. Das ist mit Ansible ganz hübsch konfigurierbar.
Docker wurde bei uns bisher eher sporadisch verwendet. Meine Kenntnisse mit Docker beschränken sich auch auf die Basisfunktionalitäten. Ist auch schon länger her, dass ich mal einen Container selbst erstellt und eingesetzt hab. Eine spezielle Infrastruktur für Docker (Kubernetes, Ranger, OpenShift) existiert bei uns nicht und ist auch mittelfristig erst mal nicht geplant mangels Ressourcen (personell und Infrastruktur).
Jetzt haben wir die Situation, dass eine externe Entwicklungsfirma ein Projekt mit Docker Microservices umsetzt. Betrieben wird das auf einer Debian-VM. Und da laufen dann ca. 20 Container, von denen einige über das VM-Netzwerk erreichbar sind und der Rest im Docker-Netzwerk miteinander kommuniziert. Dabei sind auch Standardservices wie Grafana, Prometheus usw.
Und jetzt kommen meine Probleme damit:
1. Firewall
Wie oben geschrieben, konfiguriere ich die lokale Firewall per Ansible. Ich nutze ein NFTables-Template, was dann über die Host-Konfiguration leicht erweiterbar ist.
Jetzt kommt Docker daher und erstellt beim Start des Dienstes seine eigenen Regeln über iptables. Per iptables-nft (bei Redhat inzwischen depcrecated) wird das Ganze nach nftables übersetzt, was allerdings nicht zufriedenstellend funktioniert. Statt inet wird ip4 und ip6 erstellt. Und per iptables wird versucht, die Input-Chain zu erstellen, die es in nftables schon gibt.
Eine Idee wäre, Docker durch podman abzulösen. Das scheint wohl zumindest einen initialen NFTables-Support zu haben.
Alternativ schreib analog zum obigen Link ein Skript, was mir iptables-nft bereinigt und bei jedem Docker-Start auch die NFTables mit einbindet.
Da im nichtprofessionellen Teil des Computerbase-Forums gerne so ziemlich jedes Problem mit Docker erschlagen wird, gehe ich mal davon aus, dass die lokale Firewall da keine Rolle spielt.
Gibt's noch andere Möglichkeiten, wie ich Docker dazu bewegen kann, mit NFTables zusammenzuarbeiten?
2. Reinstallation von Docker
Durch ein Missgeschick meinerseits wurde Docker deinstalliert und anschließend neu installiert. Der Docker-Daemon startete problemlos. Die Container waren alle noch vorhanden. Allerdings beendeten sich fast alle Container gleich nach dem Start (Status: Exited). Das ist natürlich blöd.
Sofern die Container eine Reinstallation von Docker generell nicht überleben, hab ich ein Problem. Falls doch, wie kann ich mir das Problem erklären? Und wie bekomme ich es hin, dass nach einer De- und Re-Installation von Docker auch die Container wieder normal starten und laufen?
Im aktuellen Zustand hab ich ziemliche Bauchschmerzen damit, da ich nicht davon ausgehen kann, dass nach einem Reboot oder Systemupdate die Container auch weiterhin zuverlässig laufen. Mit erscheint das ganze Microservices-Konzept bisher extrem fragil.
3. Rechte in Standardcontainer
Docker nutzt einen internen DNS, damit die Container untereinander per Containername kommunizieren können. Bei einigen Containern hatten wir den Fall, dass auf der Test-VM der Entwickler außerhalb unseres Unternehmens das problemlos geklappt hat, auf der firmeninternen VM jedoch nicht.
Ein Blick in den Container offenbarte dann, dass die /etc/resolv.conf die Rechte 0640 (root:root) hatte. Entsprechend konnte ein Nicht-Root-Nutzer im Container keine DNS-Server abfragen. Als ich die Rechte auf 0644 manuell änderte, was Linux-Standard ist, klappte auch die Kommunikation.
Jetzt kann ich mir schlecht vorstellen, dass ein so offensichtlicher Bug in Standardcontainern, z.B. Grafana konfiguriert ist. In der docker-compose.yaml wurde aber nichts dergleichen konfiguriert. Der temporäre Workaround bestand dann darin, dass die Dienste innerhalb des Containers als Root laufen. Natürlich kann ich auch in der docker-compose.yaml per chmod die Rechte der Datei setzen. Allerdings denke ich nicht, dass ein Standardcontainer sowas nötig hat.
Wie kann ich herausfinden, was hier bei der Konfiguration bzw. beim Container-Deployment schiefläuft?
Kurzer Hintergrund:
In meiner Abteilung bin ich mehr oder weniger der Hauptadmin für die VM-Verwaltung. Als OS wird zum großen Teil aktuell Debian 12 eingesetzt. Die Konfiguration erfolgt über Ansible. Als lokale Firewall nutze ich nftables. Das ist mit Ansible ganz hübsch konfigurierbar.
Docker wurde bei uns bisher eher sporadisch verwendet. Meine Kenntnisse mit Docker beschränken sich auch auf die Basisfunktionalitäten. Ist auch schon länger her, dass ich mal einen Container selbst erstellt und eingesetzt hab. Eine spezielle Infrastruktur für Docker (Kubernetes, Ranger, OpenShift) existiert bei uns nicht und ist auch mittelfristig erst mal nicht geplant mangels Ressourcen (personell und Infrastruktur).
Jetzt haben wir die Situation, dass eine externe Entwicklungsfirma ein Projekt mit Docker Microservices umsetzt. Betrieben wird das auf einer Debian-VM. Und da laufen dann ca. 20 Container, von denen einige über das VM-Netzwerk erreichbar sind und der Rest im Docker-Netzwerk miteinander kommuniziert. Dabei sind auch Standardservices wie Grafana, Prometheus usw.
Und jetzt kommen meine Probleme damit:
1. Firewall
Wie oben geschrieben, konfiguriere ich die lokale Firewall per Ansible. Ich nutze ein NFTables-Template, was dann über die Host-Konfiguration leicht erweiterbar ist.
Jetzt kommt Docker daher und erstellt beim Start des Dienstes seine eigenen Regeln über iptables. Per iptables-nft (bei Redhat inzwischen depcrecated) wird das Ganze nach nftables übersetzt, was allerdings nicht zufriedenstellend funktioniert. Statt inet wird ip4 und ip6 erstellt. Und per iptables wird versucht, die Input-Chain zu erstellen, die es in nftables schon gibt.
Eine Idee wäre, Docker durch podman abzulösen. Das scheint wohl zumindest einen initialen NFTables-Support zu haben.
Alternativ schreib analog zum obigen Link ein Skript, was mir iptables-nft bereinigt und bei jedem Docker-Start auch die NFTables mit einbindet.
Da im nichtprofessionellen Teil des Computerbase-Forums gerne so ziemlich jedes Problem mit Docker erschlagen wird, gehe ich mal davon aus, dass die lokale Firewall da keine Rolle spielt.
Gibt's noch andere Möglichkeiten, wie ich Docker dazu bewegen kann, mit NFTables zusammenzuarbeiten?
2. Reinstallation von Docker
Durch ein Missgeschick meinerseits wurde Docker deinstalliert und anschließend neu installiert. Der Docker-Daemon startete problemlos. Die Container waren alle noch vorhanden. Allerdings beendeten sich fast alle Container gleich nach dem Start (Status: Exited). Das ist natürlich blöd.
Sofern die Container eine Reinstallation von Docker generell nicht überleben, hab ich ein Problem. Falls doch, wie kann ich mir das Problem erklären? Und wie bekomme ich es hin, dass nach einer De- und Re-Installation von Docker auch die Container wieder normal starten und laufen?
Im aktuellen Zustand hab ich ziemliche Bauchschmerzen damit, da ich nicht davon ausgehen kann, dass nach einem Reboot oder Systemupdate die Container auch weiterhin zuverlässig laufen. Mit erscheint das ganze Microservices-Konzept bisher extrem fragil.
3. Rechte in Standardcontainer
Docker nutzt einen internen DNS, damit die Container untereinander per Containername kommunizieren können. Bei einigen Containern hatten wir den Fall, dass auf der Test-VM der Entwickler außerhalb unseres Unternehmens das problemlos geklappt hat, auf der firmeninternen VM jedoch nicht.
Ein Blick in den Container offenbarte dann, dass die /etc/resolv.conf die Rechte 0640 (root:root) hatte. Entsprechend konnte ein Nicht-Root-Nutzer im Container keine DNS-Server abfragen. Als ich die Rechte auf 0644 manuell änderte, was Linux-Standard ist, klappte auch die Kommunikation.
Jetzt kann ich mir schlecht vorstellen, dass ein so offensichtlicher Bug in Standardcontainern, z.B. Grafana konfiguriert ist. In der docker-compose.yaml wurde aber nichts dergleichen konfiguriert. Der temporäre Workaround bestand dann darin, dass die Dienste innerhalb des Containers als Root laufen. Natürlich kann ich auch in der docker-compose.yaml per chmod die Rechte der Datei setzen. Allerdings denke ich nicht, dass ein Standardcontainer sowas nötig hat.
Wie kann ich herausfinden, was hier bei der Konfiguration bzw. beim Container-Deployment schiefläuft?