Czy jeden drobny bug może być zagrożeniem dla dochodów całej firmy hostingowej? Niestety TAK.
Poznaj historię Mikrus (hosting VPS) vs Docker.
Czytaj dalej 🧵 ↓
W obecnych czasach większość usług stawianych w mojej firmie hostingowej przez użytkowników jest zdokeryzowana. Nawet najprostsze boty Discordowe, proste Wordpressy, czy Nginx są odpalane jako kontenery.
Nie ma w tym niczego złego - każdy robi, jak lubi.
5 listopada wyszła jednak nowa wersja Dockera (28.5.2), a wraz z nią aktualizacje dla ContainerD (zarządza cyklem życia kontenerów) oraz Runc (uruchamia realny kontener).
Po co ta aktualizacja? Aby załatać 3 krytyczne podatności, które umożliwiały ucieczkę z kontenera.
Bugfixy to ważna sprawa, więc powinniśmy się cieszyć - prawda?
No właśnie niekoniecznie. W aktualizacji dorzucono dodatkowe zabezpieczenie, które sprawia, że Docker stał się niekompatybilny z konteneryzacją LXC.
Mówiąc prościej: nie uruchomisz WCALE Dockera wewnątrz LXC.
Tak się składa, że cały Mikrus to tysiące kontenerów LXC z Dockerami w środku. Większość użytkowników niczego nie odczuła po tej zmianie, bo mieli już uruchomione swoje aplikacje.
Problem był z nowymi użytkownikami i tymi, którzy mieli włączony auto-update w systemie.
Tysiące zaktualizowanych Dockerów.
Szybko (w kilka godzin) ogarnęliśmy hotfixa polegającego na obniżeniu containerd do poprzedniej, działającej wersji. Działało super na Ubuntu 24.04, ale kiepsko na starych Debianach i Ubuntu 22.04, bo tam upgrade pakietów był szerszy.
Główny problem pojawił się na styku Containerd z AppArmor (system bezpieczeństwa, coś jak SELinux, ale prostszy).
Oficjalna porada od developerów? "Wyłącz systemy Apparmor i po problemie!". Wyłączenie systemów bezpieczeństwa w celu umożliwienia działania patcha bezpieczeństwa... 🤔
Ostatecznie udało się namierzyć regułę (dosłownie jedną), która powodowała zgrzyt. Jej wyłączenie na LXC jest łatwe, ale na systemie Proxmox (platforma do zarządzania infrastrukturą) już niestety nie, więc powstał fix dla LXC i porada "jednak wyłącz Apparmor dla Proxmoxa" :D
Nie podobało mi się to, więc na podstawie patcha dla LXC przygotowałem poprawkę do Proxmoxa. Ostatecznie udało się załatać wszystkie serwery i Docker działa jak dawniej.
Wspominałem na początku o dochodach. O co chodziło?
Zaczęły wpadać reklamacje i prośby o zwroty VPS-ów.
Ogromna część użytkowników Mikrusa to osoby skrajnie początkujące, które nie umieją zaaplikować patcha i jeśli tutorial nie działa, to proszą o zwrot pieniędzy, ponieważ "oszukano ich!!!!1111" (czasami prośba jest kulturalna, a czasami... 🫣)
Zwroty zostały zrealizowane.
Więcej o tym problemie możesz przeczytać tutaj:
github.com/opencontainers/runc/issues/4968
Gdzieś tam w wątku znajdziesz też mojego fixa dla Proxmoxa - przystosowany jest on do jednolitego środowiska.
Ostatecznie sytuacja została ogarnięta i wszystko działa poprawnie.