Zum Hauptinhalt Zur Navigation

Kernel: Fehler liefert fehlerhafte TCP/IP-Daten an Container aus

Die Auslagerung von Prozessen in verschiedene virtuelle Container von Docker, Kubernetes, Google Container Engine und Mesos führte dazu, dass TCP-Prüfsummen nicht richtig ausgewertet wurden. Twitter -Entwickler entdeckten den Bug, jetzt wird der Linux- Kernel gepatcht.
/ Ferdinand Thommes
7 Kommentare News folgen (öffnet im neuen Fenster)
Kernel-Bug im Netzwerk-Stack geschlossen (Bild: Flickr)
Kernel-Bug im Netzwerk-Stack geschlossen Bild: Flickr / CC-BY 2.0

Ein Fehler im Kernel führt bei Containern dazu, dass TCP-Prüfsummen nicht ausgewertet werden, wenn sie virtuelle Netzwerkadapter für ihr Netzwerkrouting verwenden. Daraus resultiert, dass Anwendungen aus gänzlich unterschiedlichen Bereichen in bestimmten Situationen fehlerhafte Daten erhalten. Betroffen sind unter anderem Docker, Kubernetes, Google Container Engine und Mesos. Für Docker gilt das nur bei Verwendung von IPv6. Der Fehler existiert seit mindestens drei Jahren, jetzt wurde ein Patch in den Kernel aufgenommen.

Der Zusammenhang dieser Dienste mit einem Bug im Kernel wurde im November von Twitter-Entwicklern entdeckt(öffnet im neuen Fenster) . Sie waren gleichzeitig informiert worden, dass von ihnen betreute Applikationen Fehler meldeten, die eigentlich nicht möglich waren. Strings enthielten Zeichen, die dort nicht hingehörten, Pflichtfelder bleiben leer.

Der Zusammenhang dieser Fehler in verschiedenen Applikationen war aufgrund der verteilten Architektur von Twitters Infrastruktur zunächst unklar geblieben. Verschärft wurde das Problem dadurch, dass fehlerhafte Daten in verteilten Systemen lange nach dem ersten Auftreten weitere Fehler nach sich ziehen können, da sie in Caches, in Logs und auf Festplatten geschrieben werden.

Schwierige Fehlersuche

Erste Untersuchungen ergaben, dass in bestimmten Server-Racks gehäuft Fehler in TCP-Prüfsummen zu verzeichnen waren, bevor die Applikationen vermehrt sinnlose Fehler meldeten. Wurden diese Racks aus dem System genommen, arbeiteten die betroffenen Anwendungen einwandfrei. Da anfängliche Tests unter Linux keine eindeutige Lösung brachten, setzten die Entwickler ihre Testreihen unter Mesos fort, das bei Twitter Anwendungen und Dienste in Containern isoliert.

Prompt wurden sie fündig. Obwohl die TCP-Prüfsummen als ungültig erkannt wurden, tauchten fehlerhafte Daten in den Anwendungen auf. Nachdem im virtuellen Adapter das Checksum-Offloading(öffnet im neuen Fenster) abgeschaltet war, wurden die fehlerhaften Daten erwartungsgemäß fallengelassen.

Aus dem Workaround wird ein Kernel-Patch

Damit war eine vorübergehende Lösung gefunden. Schnell war aber klar, dass es keine Fehlkonfiguration in Mesos war, sondern es sich um einen Fehler im Netzwerkstack des Kernels handelte, der schließlich im Veth-Modul gefunden wurde. Der daraus resultierende Kernel-Patch(öffnet im neuen Fenster) wurde mittlerweile in den Kernel aufgenommen und wird derzeit bei verschiedenen Distributionen bis zu Kernel 3.14 rückportiert.


Relevante Themen