Вийшов мінімальний Linux-дистрибутив Bottlerocket для запуску контейнерів. Найголовніше про нього

Вийшов мінімальний Linux-дистрибутив Bottlerocket для запуску контейнерів. Найголовніше про нього

компанія Amazon оголосила про фінальний дозвіл Пляшка - Спеціалізованого дистрибутива для запуску контейнерів та ефективного управління ними.

Bottlerocket (до речі, так називають дрібні саморобні ракети на димному пороху) - не перша ОС для контейнерів, але цілком ймовірно, що вона набуде широкого поширення завдяки дефолтній інтеграції з сервісами AWS. Хоча система орієнтована на хмару Amazon, відкритий вихідний код дозволяє зібрати її будь-де: локально на сервері, на Raspberry Pi, у будь-якій конкуруючій хмарі і навіть у середовищі без контейнерів.

Це цілком варта заміна дистрибутиву CoreOS, який поховала Red Hat.

Взагалі, підрозділ Amazon Web Services вже має Amazon Linux, який нещодавно вийшов у другій версії: це дистрибутив загального призначення, який можна запустити в контейнері Docker або з гіпервізорами Linux KVM, Microsoft Hyper-V і VMware ESXi. Він був оптимізований для роботи в хмарі AWS, але з виходом Bottlerocket всім рекомендується зробити апгрейд на нову систему, яка безпечніша, сучасніша і споживає менше ресурсів.

AWS анонсувала Bottlerocket в березні 2020 року. Вона відразу визнала, що це не перший "Linux для контейнерів", згадавши як джерела натхнення CoreOS, Rancher OS і Project Atomic. Розробники написали, що операційна система є «результатом уроків, які ми здобули за довгий час роботи виробничих служб у масштабі Amazon, та з урахуванням досвіду, який ми отримали за останні шість років про те, як запускати контейнери».

Екстремальний мінімалізм

Linux очищений від усього, що не потрібне для запуску контейнерів. Такий дизайн, за словами компанії, скорочує поверхню атаки.

Це означає, що в базовій системі встановлюється менше пакетів, що спрощує підтримку та оновлення ОС, а також знижує ймовірність виникнення проблем через залежність, знижує використання ресурсів. В принципі, тут все працює всередині окремих контейнерів, а базова система практично гола.

Amazon також видалила всі оболонки та інтерпретатори, виключивши ризик їх використання чи випадкового підвищення привілеїв користувачами. У базовому образі заради мінімалізму та безпеки відсутня командна оболонка, сервер SSH та мови типу Python, що інтерпретуються. Інструменти для адміністратора винесені в окремий службовий контейнер, який вимкнено за замовчуванням.

Управління системою передбачено двома способами: через API та оркестрування.

Замість менеджера пакетів, який оновлює окремі частини програмного забезпечення, Bottlerocket завантажує повний образ файлової системи та перезавантажується на нього. У разі збою завантаження він автоматично відкочується, а збій робочого навантаження може ініціювати вручну відкат (команда через API).

Фреймворк TUF (The Update Framework) завантажує оновлення на основі образів альтернативні або «розмонтовані» розділи. Під систему виділяється два дискові розділи, один із яких містить активну систему, а на другий копіюється оновлення. При цьому кореневий розділ монтується в режимі лише для читання, а розділ /etc монтується з файловою системою в оперативній пам'яті tmpfs та відновлює вихідний стан після перезапуску. Пряма зміна конфігураційних файлів у /etc не підтримується: для збереження налаштувань слід використовувати API або виносити функціональність в окремі контейнери.

Вийшов мінімальний Linux-дистрибутив Bottlerocket для запуску контейнерів. Найголовніше про нього
Схема оновлення через API

Безпека

Контейнери створюються штатними механізмами ядра Linux - cgroups, простору імен і seccomp, а як система примусового контролю доступу, тобто для додаткової ізоляції використовується SELinux у режимі "enforcing".

За замовчуванням увімкнено політику розділення ресурсів між контейнерами та ядром. Бінарники захищені прапорами, щоб користувачі чи програми не могли їх виконувати. І якщо хтось дістався файлової системи, Bottlerocket пропонує інструмент для перевірки та відстеження будь-яких внесених змін.

Режим «перевіреного завантаження» реалізований через функцію device-mapper-verity (dm-verity), яка перевіряє цілісність кореневого розділу під час завантаження. AWS описує dm-verity як "функцію ядра Linux, що забезпечує перевірку цілісності, щоб запобігти роботі зловредів в ОС, таких як перезапис основного системного програмного забезпечення".

Також у системі присутній фільтр eGMP (Extended BPF, розробка Олексія Старовойтова), який дозволяє замінювати модулі ядра безпечнішими програмами BPF для низькорівневих системних операцій.

Модель виконання
Задається користувачем
компіляція
Безпека
Режим збою
Доступ до ресурсів

юзер
задача
да
будь-яка
права користувачів
переривання виконання
системний виклик, fault

Ядро
задача
немає
статична
немає
паніка ядра
прямий

БНФ
подія
да
JIT, CO-RE
верифікація, JIT
повідомлення про помилку
обмежені хелпери

Відмінність BPF від звичайного коду рівня користувача чи ядра, джерело

AWS заявила, що Bottlerocket "застосовує операційну модель, яка ще більше підвищує безпеку, перешкоджаючи підключенню до продакшн-серверів з привілеями адміністратора", і "підходить для великих розподілених систем, в яких обмежений контроль над кожним окремим хостом".

Для системних адміністраторів передбачено контейнер адміністратора. Але AWS не думає, що адміну часто доведеться працювати всередині Bottlerocket: «Акт входу в окремий інстанс Bottlerocket призначений для нечастих операцій: розширеного налагодження та усунення несправностей», — пишуть розробники.

Мова Rust

Інструментарій ОС поверх ядра в основному написано на Rust. Ця мова за своєю природою зменшує ймовірність небезпечного доступу до пам'яті, а також усуває умови гонки між потоками.

При складанні за замовчуванням застосовуються прапори --enable-default-pie и --enable-default-ssp для включення рандомізації адресного простору виконуваних файлів (position-independent executable, PIE) та захисту від переповнення стека.

Для пакетів на C/C++ додатково включаються прапори -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS и -fstack-clash-protection.

Крім Rust та C/C++, деякі пакети написані мовою Go.

Інтеграція із сервісами AWS

На відміну від аналогічних контейнерних операційних систем полягає в тому, що Amazon оптимізувала Bottlerocket для роботи на AWS та інтеграції з іншими сервісами AWS.

Найпопулярнішим оркестратором контейнерів є Kubernetes, тому AWS запровадила інтеграцію із власним Enterprise Kubernetes Service (EKS). Інструменти для оркестрування йдуть в окремому контейнері, що управляє. bottlerocket-control-container, який включений за замовчуванням і керується через API та AWS SSM Agent.

Цікаво буде подивитися, чи злетить Bottlerocket, враховуючи провал деяких подібних ініціатив у минулому. Наприклад, PhotonOS від Vmware виявилася незатребуваною, а RedHat купила CoreOS і закрила проект, який вважався піонером у цій галузі.

Інтеграція Bottlerocket в сервіси AWS робить цю систему своєрідною унікальною. Можливо, це головна причина, чому деякі користувачі можуть віддати перевагу Bottlerocket іншим дистрибутивам, таким як CoreOS або Alpine. Система спочатку спроектована для роботи з EKS та ECS, але повторимо, що це не обов'язково. По-перше, Bottlerocket можна зібрати самостійно і використовувати, наприклад, як hosted-рішення. По-друге, користувачі EKS і ECS, як і раніше, збережуть можливість вибору ОС.

Вихідний код Bottlerocket опубліковано на GitHub під ліцензією Apache 2.0. Розробники вже реагують на баг-репорти та запити фіч.

На правах реклами

В.Д.Сіна пропонує VDS із добовою оплатою. Можливо встановити будь-яку операційну систему, зокрема зі свого образу. Кожен сервер підключений до інтернет-канала в 500 мегабіт і безкоштовно захищений від DDoS-атак!

Вийшов мінімальний Linux-дистрибутив Bottlerocket для запуску контейнерів. Найголовніше про нього

Джерело: habr.com

Додати коментар або відгук