Kernel: Fehler liefert fehlerhafte TCP/IP-Daten an Container aus
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.
- Anzeige Hier geht es zu Docker: Das Praxisbuch für Entwickler und DevOps-Teams bei Amazon Wenn Sie auf diesen Link klicken und darüber einkaufen, erhält Golem eine kleine Provision. Dies ändert nichts am Preis der Artikel.