Kontenery są często wykorzystywane do zabezpieczenia aplikacji oraz tworzenia usług w chmurach. Gdy ktoś rozważa w jaki sposób zabezpieczyć aplikację, często pojawia się pomysł odizolowania jej i umieszczenia w bezpiecznym otoczeniu.

Kontenery to nowy sposób na separację aplikacji od systemu operacyjnego oraz fizycznej infrastruktury wykorzystywanej do połączeń z siecią. Są one instalowane poza jądrem systemu operacyjnego i wirtualizują środowisko określonej aplikacji. Warto zwrócić uwagę na fakt, że systemy takie, zbliżone do kontenerów, są wykorzystywane w środowiskach systemów operacyjnych od dłuższego czasu.

Pierwowzór – chroot w systemie Linux

Administratorzy UNIX już od kilkunastu lat posiadali narzędzie pozwalające na kontrolowanie bezpieczeństwa poszczególnych aplikacji. Rozwiązaniem tym jest umieszczenie aplikacji w tzw. środowisku chroot. Chroot (skrót od słowa change root) jest nazwą komendy Linux ograniczającej zasoby, który może wykorzystywać proces i każdy wywoływany przez niego proces-dziecko. Nawet w przypadku, gdy oprogramowanie zostanie skompromitowane, technika chroot ograniczy zakres naruszonych zasobów. Ten element przez wiele lat był znaną i stosowaną techniką bezpieczeństwa do czasu, gdy pojawiło się obejście tego zabezpieczenia. Bo gdy dany proces zostanie uruchomiony z uprawnieniami użytkownika root pojawia się problem. Chroot nie dostarczał także kilku ważnych i użytecznych funkcji, na przykład możliwości kontroli limitów dyskowych/pamięci/procesora, izolacji sieci.

Sposób na chroot

W przeszłości jeden fizyczny serwer przeważnie obsługiwał jedną aplikację. Następnie wprowadzono wirtualizację i wiele wirtualnych maszyn (VM) można obecnie uruchamiać na jednym fizycznym serwerze. Początkowo istniał system operacyjny hosta dla każdego fizycznego serwera oraz „hypervisor” uruchamiany na danym OS (Hypervisor Type 2). Ale zdano sobie sprawę, że można pozbyć się wprowadzającego narzut systemu operacyjnego i uruchamiać „hypervisor” bezpośrednio na sprzęcie (Hypervisor Type 1).

Gdy wirtualizacja zaczęła zdobywać popularność, firmy zaczęły kupować jeden lub kilka fizycznych serwerów o dużej wydajności, a każda z aplikacji była uruchamiana na niezależnym serwerze wirtualnym, który dysponował dedykowanymi zasobami (CPU, pamięć, I/O, konfiguracja sieci).

Model wirtualizacji serwerów wymaga jednak niezależnego systemu operacyjnego oraz licencji dla każdej wirtualnej maszyny obsługującej określoną aplikację. A to wszystko kosztuje.

Jeżeli nie potrzebujemy niezależnych systemów, idealnym rozwiązaniem byłoby uruchamianie aplikacji w niezależnych instancjach na jednym systemie operacyjnym. Warto jednak, aby istniała możliwość przyznawania aplikacjom odpowiednich zasobów. I tak właśnie pojawiły się kontenery.

LXC (Linux Kernel Containers)

Kontenery wspierane przez system Linux (LXC – Linux Containers) są jedną z najnowocześniejszych metod wirtualizacji aplikacji. LXC pozwala na przydział zasobów CPU, pamięci, dysków i sieci dla odizolowanych aplikacji od systemu operacyjnego. LXC separuje drzewa procesów, dostęp do sieci, ID użytkownika, dostęp do plików. LXC jest techniką funkcjonalnie umiejscawianą pomiędzy rozwiązaniem chroot oraz VM. Kontenery Linux są elastyczne, ponieważ pozwalają administratorowi wirtualizować pojedynczą aplikację, a nie cały system operacyjny z wykorzystaniem VM. Nie ma potrzeby zakupów dodatkowych licencji na systemy operacyjne, tak jak ma to miejsce w przypadku wirtualizacji. LXC oferuje także stosunkowo niewielki narzut systemu operacyjnego, ponieważ aplikacje wykorzystują standardowe wywołania systemowe oraz połączenia do interfejsów z lekkim systemem operacyjnym OS. Przykładowo w takich zastosowaniach warto rozważyć dystrybucję CoreOS.

Czym jest Docker?

Docker jest aplikacją pracującą na podbudowie w postaci LXC, która zarządza obrazami oraz asystuje we wdrożeniach wirtualizacji aplikacji. Dostarcza automatyzacji oraz mechanizmów szybkiego tworzenia kontenerów LXC. Dodatkowo udostępnia API, które rozszerza funkcjonalność LXC o możliwość budowania oferty PaaS (Platform as a Service). Docker pierwotnie nazywał się dotCloud, a jego kariera trwa od roku. Aktualnie jest zintegrowany z szeregiem innych narzędzi m.in. Ansible, Chef, OpenStack, Pupper, Salt. Jest też dołączony do RHEL, OpenShift PaaS, Google Compute Engine, Deis, a także Amazon Web Services Elastic Beanstalk. Docker jest aktualnie standardem wirtualizacji aplikacji dla system Linux.

Gdzie jeszcze można spotkać kontenery?

Istnieje wiele innych systemów wirtualizacji na poziomie system operacyjnego – Linux OpenVZ, Linux-VServer, FreeBSD Jails, WPAR, HP-UX Containers, Solaris Containers.

Mobilne telefony także wykorzystują kontenery do separacji i bezpiecznego uruchamiania aplikacji. W rzeczywistości telefony z systemem Android wykorzystują LXC na poziomie jądra Android. McAfee oferuje SecureContainer for Android. Apple iPhones także wykorzystują kontenery do separacji aplikacji i ich danych.

Narzędzia MDM (Mobile Device Management) wykorzystują kontenery w rozwiązaniach zarządzających BYOD. Wiele systemów MDM rozdziela dzięki kontenerom dane i aplikacje. W przypadku gdy pracownik utraci urządzenie lub odejdzie z pracy dane i aplikacje mogą zostać rozdzielone.

Sandboxed Browsers to inny pomysł na wirtualizację i zabezpieczanie aplikacji. Sandbox potrafi realizować takie funkcje w&nbspramach systemów Windows.

Warto też zauważyć, że przełączniki Cisco Nexus 9000 pracują obecnie w oparciu o jądro Linux i agenta OnePK uruchamianego poprzez LXC Container. Pomaga to w izolacji OnePK i kontrolera od jądra NX-OS.

Jak widać na powyższych przykładach kontenery zyskują na popularności.

Podziel się na:
  • Facebook
  • Google Bookmarks
  • LinkedIn