VM, LXC czy Docker: która granica izolacji sprawdzi się w przypadku usług zaufanych, uprzywilejowanych i dostępnych z Internetu?

Eva Wong jest redaktorką techniczną i rezydentką majsterkowania w ZimaSpace. Jest geekiem od zawsze, z pasją do domowych laboratoriów i oprogramowania open source, a jej specjalnością jest przekładanie złożonych zagadnień technicznych na przystępne, praktyczne poradniki. Eva wierzy, że samodzielne hostowanie powinno sprawiać radość, a nie onieśmielać. Dzięki swoim samouczkom pomaga społeczności oswoić konfigurację sprzętu, od budowy pierwszego serwera NAS po opanowanie kontenerów Docker.

Używaj Dockera do zaufanych, dobrze przygotowanych aplikacji; LXC do lekkich środowisk systemowych Linux; maszyny wirtualnej, gdy usługa wymaga niezależnego jądra lub silniejszej granicy zaufania.

To nie są trzy wymienne opakowania. Docker pakuje aplikacje, LXC działa bardziej jak kompaktowy system Linux, a maszyna wirtualna wirtualizuje sprzęt na potrzeby osobnego jądra systemu gościa. Właściwy wybór zmienia się, gdy usługa jest dostępna z internetu, wymaga szerokich uprawnień, korzysta z GPU lub urządzenia USB albo musi zostać przywrócona bez zaufania do stanu hosta.

Określ poziom zaufania i granicę jądra

Zacznij od oznaczenia każdej usługi jako zaufanej wewnętrznej, uprzywilejowanej infrastrukturalnej albo dostępnej z internetu i potencjalnie wrogiej. Następnie zapisz, kto dostarcza jej obraz lub pakiety, jakie dane może odczytywać oraz czy jej przejęcie może dać dostęp do sieci zarządzania, kopii zapasowych lub plików rodzinnych.

Usługa nie jest mało ryzykowna tylko dlatego, że jest niewielka. Publiczny panel bez punktów montowania hosta może być bezpieczniejszy niż wewnętrzne narzędzie do automatyzacji, które przechowuje dane uwierzytelniające do sieci, ma dostęp do gniazda Dockera i może zapisywać we wszystkich udziałach.

Ten pierwszy filtr może zakończyć porównanie. Jeśli obciążenie nie może współdzielić jądra hosta, Docker i LXC odpadają, niezależnie od mniejszego zużycia pamięci; jeśli chodzi o zaufaną aplikację do jednego celu z ograniczonymi punktami montowania, maszyna wirtualna może zwiększyć nakład administracyjny, nie zmieniając istotnie praktycznego poziomu ryzyka.

Docker i LXC izolują procesy, korzystając z jądra hosta; maszyna wirtualna uruchamia jądro systemu gościa za granicą wyznaczoną przez hypervisor. Niezależne porównanie współdzielenia jądra i izolacji maszyn wirtualnych wyjaśnia, dlaczego różnica w bezpieczeństwie wynika z architektury, a nie z twierdzenia, że każdy kontener jest niebezpieczny.

Docker zwykle ogranicza jednostkę do aplikacji i jej zależności. LXC zapewnia pełniejsze środowisko użytkownika z init, pakietami, kontami i usługami systemowymi. Dzięki temu LXC sprawdza się jako niewielkie środowisko Linux, ale nie staje się przez to maszyną wirtualną.

Wybierz maszynę wirtualną, gdy ważna jest różnorodność jąder, niezaufany kod albo wyraźna granica zapory i aktualizacji na poziomie maszyny gościa. Rozważ Dockera lub LXC, gdy jądro hosta może być współdzieloną zależnością, a prostota operacyjna jest ważniejsza niż osobny system operacyjny gościa.

Niech wymagane uprawnienia i dostęp do sprzętu zmienią domyślny wybór

Zaufana usługa Dockera jest wydajna, dopóki nie wymaga sieci hosta, szerokiego zakresu uprawnień, zapisywalnych montowań systemowych ani gniazda do zarządzania kontenerami. Każdy wyjątek osłabia wąską granicę izolującą aplikację i zwiększa zasadność przeniesienia usługi do osobnej maszyny wirtualnej lub przeprojektowania sposobu dostępu.

LXC może być praktycznym rozwiązaniem pośrednim dla usługi linuksowej, która potrzebuje standardowego menedżera pakietów, stałej nazwy hosta i dostępu do wybranych urządzeń. Kontenery LXC z uprawnieniami uprzywilejowanymi, liczne montowania bind i zagnieżdżony Docker zwiększają jednak zależności, dlatego oszczędność zasobów trzeba zestawić z trudniejszymi aktualizacjami i odzyskiwaniem sprawności.

W przypadku GPU, HBA, koordynatora USB lub specjalnej karty sieciowej przetestuj resetowanie, uprawnienia i zachowanie po ponownym uruchomieniu. Bezpośredni dostęp do urządzenia może być najprostszy na hoście, ale maszyna wirtualna z przekazywaniem urządzenia może zapewnić wyraźniejszą granicę odpowiedzialności, jeśli pozwalają na to sprzęt i konfiguracja IOMMU.

Traktuj udostępnianie usług w Internecie jako decyzję dotyczącą sieci i tożsamości

Umieszczaj usługi publiczne za jednym kontrolowanym punktem dostępu przez odwrotny serwer proxy lub VPN, interfejsy zarządzania trzymaj w sieci prywatnej, a dane dostępowe do usług ogranicz do niezbędnych zbiorów danych. Izolacja środowiska uruchomieniowego nie zrekompensuje publicznie dostępnego panelu administracyjnego, ponownie użytych haseł ani nieograniczonego dostępu do pamięci masowej i kopii zapasowych.

Dyskusja społecznościowa o tym, jak operatorzy przypisują obciążenia do Dockera, LXC i maszyn wirtualnych, pokazuje, że rzeczywiste wdrożenia często wykorzystują rozwiązanie hybrydowe: maszyna wirtualna wyznacza granicę zaufania, a Docker uruchomiony wewnątrz niej zapewnia pakowanie aplikacji. To trzecia architektura, a nie przyznanie, że jedno z rozwiązań zawiodło.

W przypadku usługi publicznej, której awaria może mieć poważne konsekwencje, wybierz dedykowaną maszynę wirtualną lub hosta, nawet jeśli Docker byłby tańszy w utrzymaniu. W przypadku aplikacji o niewielkim znaczeniu, z niezmiennymi wdrożeniami, ograniczoną liczbą montowań i skuteczną kontrolą sieci, Docker może pozostać prostszym rozwiązaniem.

Porównaj jednostki, które będziesz aktualizować, archiwizować i odtwarzać

Dockera najłatwiej odtworzyć, gdy pliki Compose, sekrety, wersje i trwałe woluminy są starannie rozdzielone. LXC można przywrócić jako jednostkę systemową, ale ręczne zmiany pakietów w jego wnętrzu powodują rozbieżności konfiguracji, chyba że są udokumentowane lub zautomatyzowane.

Maszyna wirtualna zwykle zużywa więcej pamięci i miejsca na dysku, ale dzięki niej gość staje się odrębną jednostką kopii zapasowej i przywracania. Ta korzyść jest realna tylko po przetestowaniu przywracania; migawka na tym samym hoście nie jest niezależną kopią odzyskiwania.

Kryterium wyboru Docker LXC Maszyna wirtualna
Główna jednostka Aplikacja i woluminy Środowisko użytkownika i pliki Linuksa System operacyjny gościa i dyski wirtualne
Jądro Wspólne z hostem Wspólne z hostem Niezależne jądro gościa
Najlepsze zastosowanie Spakowana, zaufana aplikacja Lekka usługa systemowa Linuksa Silniejsza granica zaufania lub systemu operacyjnego
Ostrzeżenie dotyczące uprawnień Gniazdo, uprawnienia, szerokie montowania Tryb uprzywilejowany, zagnieżdżanie, montowania bind Przekazywanie urządzeń i nadmierne mnożenie gości
Potwierdzenie możliwości odzyskania Odtwórz ponownie i przywróć woluminy Odtwórz stan kontenera lub przywróć go z kopii Odtwórz gościa i zweryfikuj urządzenia

Wybieraj granicę izolacji dla każdej usługi, a nie dla całego serwera

Wybierz Dockera do zaufanych stosów aplikacji z ograniczonymi montowaniami i powtarzalnymi definicjami. Wybierz LXC do wydajnych usług systemowych Linuksa, którym przydaje się pełniejsze środowisko użytkownika, ale które nie wymagają niezależnego jądra. Wybierz maszynę wirtualną do niezaufanych lub dostępnych z internetu obciążeń o poważnych konsekwencjach, innych systemów operacyjnych lub zadań wymagających dostępu do sprzętu, w których przydaje się izolacja gościa.

Decyzja dotycząca systemu operacyjnego serwera domowego to kolejny krok, ponieważ wybór hosta wpływa na to, które mechanizmy kopii zapasowych, sieci, kontenerów i maszyn wirtualnych sprawdzą się w praktyce. Serwer o mieszanym zastosowaniu może korzystać ze wszystkich trzech granic izolacji, nie uznając żadnej z nich za domyślne rozwiązanie do wszystkiego.

Przestań optymalizować pod kątem zagęszczenia, gdy usługa wymaga uprzywilejowanego dostępu do hosta, udostępnia wrażliwe funkcje administracyjne lub nie da się jej niezależnie odtworzyć. Wybierz najmniej złożone rozwiązanie, które nadal izoluje ten rodzaj awarii, na którym naprawdę Ci zależy.

Porównanie produktów

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.