Firma Amazon
Bottlerocket (swoją drogą, nazwa nadana małym, domowym rakietom czarnoprochowym) nie jest pierwszym systemem operacyjnym dla kontenerów, ale prawdopodobnie stanie się powszechny dzięki domyślnej integracji z usługami AWS. Choć system jest nastawiony na chmurę Amazon, otwarty kod źródłowy pozwala na jego zbudowanie w dowolnym miejscu: lokalnie na serwerze, na Raspberry Pi, w dowolnej konkurencyjnej chmurze, a nawet w środowisku bezkontenerowym.
Jest to całkowicie godny zamiennik dystrybucji CoreOS, którą Red Hat zakopał.
Tak naprawdę dział Amazon Web Services ma już Amazon Linux, który niedawno ukazał się w drugiej wersji: jest to dystrybucja ogólnego przeznaczenia, którą można uruchomić w kontenerze Docker lub z Linux KVM, Microsoft Hyper-V i VMware Hiperwizory ESXi. Został zoptymalizowany do działania w chmurze AWS, ale wraz z wydaniem Bottlerocket zachęcamy wszystkich do aktualizacji do nowego systemu, który jest bezpieczniejszy, nowoczesny i zużywa mniej zasobów.
AWS ogłosiło Bottlerocket
Skrajny minimalizm
Linux jest pozbawiony wszystkiego, co nie jest potrzebne do uruchamiania kontenerów. Według firmy konstrukcja ta zmniejsza powierzchnię ataku.
Oznacza to, że w systemie bazowym instalowanych jest mniej pakietów, co ułatwia konserwację i aktualizację systemu operacyjnego, a także zmniejsza prawdopodobieństwo problemów wynikających z zależności, zmniejszając zużycie zasobów. Zasadniczo wszystko tutaj działa w oddzielnych kontenerach, a system leżący u podstaw jest praktycznie goły.
Amazon usunął także wszystkie powłoki i interpretery, eliminując ryzyko ich użycia lub przypadkowego zwiększenia uprawnień przez użytkowników. Ze względu na minimalizm i bezpieczeństwo obraz bazowy nie zawiera powłoki poleceń, serwera SSH ani języków interpretowanych, takich jak Python. Narzędzia administratora znajdują się w osobnym kontenerze usług, który jest domyślnie wyłączony.
Zarządzanie systemem odbywa się na dwa sposoby: poprzez API i orkiestrację.
Zamiast menedżera pakietów, który aktualizuje poszczególne elementy oprogramowania, Bottlerocket pobiera kompletny obraz systemu plików i uruchamia się ponownie. Jeśli ładowanie nie powiedzie się, zostanie ono automatycznie przywrócone, a awaria obciążenia może spowodować ręczne wycofanie (polecenie za pośrednictwem interfejsu API).
Struktura /etc
montowany z systemem plików w pamięci RAM /etc
nieobsługiwane: do zapisania ustawień należy skorzystać z API lub przenieść funkcjonalność do osobnych kontenerów.
Schemat aktualizacji API
bezpieczeństwo
Kontenery tworzone są przez standardowe mechanizmy jądra Linuksa – cgroups, namespaces i seccomp i służą jako system wymuszonej kontroli dostępu, czyli dodatkowej izolacji
Domyślnie zasady umożliwiają współdzielenie zasobów pomiędzy kontenerami i jądrem. Pliki binarne są chronione flagami, aby uniemożliwić użytkownikom lub programom ich wykonanie. A jeśli uda się dostać do systemu plików, Bottlerocket oferuje narzędzie do sprawdzania i śledzenia wszelkich wprowadzonych zmian.
Tryb „zweryfikowanego rozruchu” jest realizowany poprzez funkcję urządzenia-mapper-verity (
W systemie znajduje się również filtr
Model wykonania
Określony przez użytkownika
Kompilacja
bezpieczeństwo
Tryb awaryjny
Dostęp do zasobów
Użytkownik
zadanie
tak
dowolny
prawa użytkownika
przerwać wykonanie
wywołanie systemowe, błąd
Rdzeń
zadanie
nie
statyczny
nie
panika jądra
prosto
BPF
wydarzenie
tak
JIT, CO-RE
weryfikacja, JIT
Komunikat o błędzie
ograniczeni pomocnicy
Czym BPF różni się od kodu na poziomie zwykłego użytkownika lub jądra
Według AWS Bottlerocket „stosuje model operacyjny, który jeszcze bardziej zwiększa bezpieczeństwo, uniemożliwiając połączenia z serwerami produkcyjnymi posiadającymi uprawnienia administracyjne” i „jest odpowiedni dla dużych systemów rozproszonych, w których kontrola nad każdym pojedynczym hostem jest ograniczona”.
Dla administratorów systemu dostępny jest kontener administratora. Ale AWS nie uważa, że administrator będzie musiał często pracować w Bottlerocket: „Akt zalogowania się do osobnej instancji Bottlerocket jest przeznaczony do rzadkich operacji: zaawansowanego debugowania i rozwiązywania problemów”
Rdzawy język
Instrumentacja systemu operacyjnego znajdująca się na jądrze jest w większości napisana w języku Rust. Ten język ma swoją naturę
Flagi są domyślnie stosowane podczas budowania --enable-default-pie
и --enable-default-ssp
aby umożliwić randomizację przestrzeni adresowej plików wykonywalnych (
W przypadku pakietów C/C++ dołączone są dodatkowe flagi -Wall
, -Werror=format-security
, -Wp,-D_FORTIFY_SOURCE=2
, -Wp,-D_GLIBCXX_ASSERTIONS
и -fstack-clash-protection
.
Oprócz Rusta i C/C++, niektóre pakiety są napisane w Go.
Integracja z usługami AWS
Różnica w stosunku do podobnych kontenerowych systemów operacyjnych polega na tym, że Amazon zoptymalizował Bottlerocket do działania na platformie AWS i integracji z innymi usługami AWS.
Najpopularniejszym orkiestratorem kontenerów jest Kubernetes, dlatego AWS wprowadził integrację z własną usługą Enterprise Kubernetes Service (EKS). Narzędzia do orkiestracji znajdują się w oddzielnym kontenerze sterującym
Ciekawie będzie zobaczyć, czy Bottlerocket odniesie sukces, biorąc pod uwagę niepowodzenie niektórych podobnych inicjatyw w przeszłości. Na przykład PhotonOS od Vmware okazał się nieodebrany, a RedHat kupił CoreOS i
Integracja Bottlerocket z usługami AWS czyni ten system wyjątkowym na swój sposób. Jest to być może główny powód, dla którego niektórzy użytkownicy wolą Bottlerocket od innych dystrybucji, takich jak CoreOS lub Alpine. System jest początkowo przeznaczony do współpracy z EKS i ECS, jednak powtarzamy, że nie jest to konieczne. Po pierwsze, Bottlerocket może
Kod źródłowy Bottlerocket jest publikowany na GitHubie na licencji Apache 2.0. Twórcy już to zrobili
O prawach reklamy
VDSina oferuje
Źródło: www.habr.com