The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

03.05.2018 09:20  Google открыл gVisor, гибрид системы виртуализации и контейнеров

Компания Google представила проект gVisor, в рамках которого подготовлен новый открытый runtime для обеспечения изолированного запуска контейнеров, соответствующих требованиям спецификации Open Container Initiative (OCI). gVisor может применяться в качестве слоя в Docker и Kubernetes, заменяя предлагаемый в них штатный runtime. Код gVisor написан на языке Go и поставляется под лицензией Apache 2.0.

При разработке gVisor была поставлена задача создания решения для выполнения контейнеров более легковесного чем системы виртуализации, но обеспечивающего сходный с ними уровень изоляции. Ключевым компонентом gVisor является собственное ядро, которое написано на языке Go и реализует большинство системных вызовов ядра Linux. Язык Go выбран для обеспечения дополнительной защиты, благодаря встроенным средствам контроля типов и границ блоков памяти, исключению проблем use-after-free, защите от переполнений стека и наличию детектора состояний гонки.

Ядро gVisor выполняется как обычный непривилегированный процесс и обеспечивает работу изолированного окружения контейнера. По аналогии с системами виртуализации в каждом подобном окружении используется своё ядро и набор виртуализированных устройств, отделённых от хост-системы и других контейнеров. Ядро gVisor обрабатывает все системные вызовы от приложений, изолируя их от остальной системы. При этом, gVisor не просто транслирует системные вызовы приложений в запросы к ядру Linux, а самостоятельно реализует основные примитивы ядра (сигналы, ФС, блокировки, маппинг памяти, неименованные каналы и т.п.) и выстраивает предоставляемые приложениям обработчики системных вызовов на основе данных примитивов. Так как ядро gVisor реализовано в форме обычного процесса, то для реализации функциональности примитивов выполняется обращение к ограниченному набору штатных системных вызовов основного ядра Linux (по аналогии с UML - User Mode Linux).

Подобный подход предоставляет высокую гибкость в управлении ресурсами и более низкие накладные расходы по сравнению с VM, но ценой этому становится повышение накладных расходов при обработке системных вызовов и ограниченная совместимость с приложениями. В настоящее время реализовано около 200 наиболее часто применяемых системных вызов. Некоторые системные вызовы и параметры пока не реализованы, также отсутствует поддержка части иерархии /proc и /sys, что требует особого отношения при подборе программ для запуска в контейнерах gVisor. Из работающих с gVisor приложений отмечены Node.js, Java 8, MySQL, Jenkins, Apache httpd, Redis, PHP, Tomcat, WordPress и MongoDB. Из пока не работающих приложений можно отметить nginx, Elasticsearch и PostgreSQL.

Для организации доступа к частям основной файловой системы хост-окружения применяется специальный процесс-прокси Gofer, взаимодействующий с ядром gVisor при помощи протокола 9P. Для доступа к сети в ядре gVisor реализован собственный сетевой стек (netstack), поддерживающий отслеживание состояний соединения и пересборку пакетов. Netstack полностью изолирован от сетевого стека ядра Linux и взаимодействует с внешним миром через виртуальное устройство, работающее в отдельном пространстве имён. Для особых ситуаций предусмотрен режим прямого проброса сетевых соединений, ценой снижения уровня изоляции. Для переключения контекста и реализации маппинга памяти предлагается использовать Ptrace или KVM.

Напомним, что в обычных контейнерах применяется общее для всех изолированных окружений ядро Linux с разграничением доступа к ресурсам на уровне cgroups и namespaces, что является слабым звеном безопасности, так как не все ресурсы ограничиваются, а уязвимость в ядре Linux компрометирует всю систему изоляции. В условиях, требующих надёжной изоляции приложений применяется метод запуска каждого контейнера в отдельной виртуальной машине со своим ядром и системным окружением, но по сравнению с контейнерами на базе cgroups и namespaces указанный способ требует существенно больше ресурсов и тратит много времени на запуск. В рамках проекта Kata развивается runtime на базе гипервизора и специальных урезанных окружений с оптимизированным ядром Linux, который частично решает указанные проблемы.

  1. Главная ссылка к новости (https://cloudplatform.googlebl...)
  2. OpenNews: Google представил Cilium, сетевую систему для Linux-контейнеров, основанную на BPF
  3. OpenNews: Компания Google открыла код системы изолированных контейнеров Lmctfy
  4. OpenNews: Linux Foundation представил containerd 1.0, runtime для изолированных контейнеров
  5. OpenNews: Intel представил инструментарий Clear Containers 3.0, переписанный на языке Go
  6. OpenNews: Компании Intel и Hyper представили проект Kata Containers
Лицензия: CC-BY
Тип: Интересно / Программы
Ключевые слова: gvisor, container, docker, virtual
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.2, анонимтут (?), 09:45, 03/05/2018 [ответить] [показать ветку] [···]    [к модератору]
  • –1 +/
    > протокол 9P

    O_o Не пропала концепция - Plan 9 вспомнили.

     
     
  • 2.18, Аноним (-), 15:02, 03/05/2018 [^] [ответить]    [к модератору]
  • +3 +/
    И тебя с разморозкой. Протокол p9 давным давно используется, например обычным попсовым qemu (и kvm) для обмена файлами с хостом через виртуальные интерфейсы.
     
  • 1.3, Аноним (-), 09:50, 03/05/2018 [ответить] [показать ветку] [···]    [к модератору]
  • +1 +/
    Судя по всему, будет тормозить.
     
     
  • 2.11, пох (?), 10:56, 03/05/2018 [^] [ответить]    [к модератору]
  • +1 +/
    > Судя по всему, будет тормозить.

    и неработать.
    Брысь, дедушка, ты не в тренде - сейчас это не важно, важно oci, go, протокол 9p.


     
  • 1.4, Аноним (4), 09:51, 03/05/2018 [ответить] [показать ветку] [···]     [к модератору]
  • +/
    Интересно каких именно ограничений им не хватает в докере Как и уязвимость в gV... весь текст скрыт [показать]
     
     
  • 2.7, F (?), 10:10, 03/05/2018 [^] [ответить]    [к модератору]  
  • +4 +/
    https://habr.com/post/332450/
     
     
  • 3.9, пох (?), 10:43, 03/05/2018 [^] [ответить]     [к модератору]  
  • –4 +/
    о, спасибо, прекрасное там есть линк и на более свежие впечатления, в принципе,... весь текст скрыт [показать]
     
  • 2.10, пох (?), 10:53, 03/05/2018 [^] [ответить]    [к модератору]  
  • +5 +/
    > Интересно каких именно ограничений им не хватает в докере?

    очевидных. реальной а не виртуальной изоляции приложений, fine-grained изоляции ресурсов (докер, в силу родовой травмы, не может точно отмерять кусочек cpu/кусочек дискового throughput - то что умеет какой-нибудь openvz с незапамятных времен)
    >>а уязвимость в ядре Linux компрометирует всю систему изоляции
    > Как и уязвимость в gVisor.

    "выполняется от непривиллегированного пользователя", какое слово вам перевести?

    доцкер только _запускается_ от непривиллегированного пользователя, внутри полагаясь на ифраструктуру ядра, обеспечивающую этим пользователям, внезапно, root equivalence, периодически проламываемую до рута на хост-системе.

    другое дело, что эта гуглохрень наследует все инфраструктурные проблем доскера, поскольку без него неработоспособна, в ней работает аж три полезные и пять бесполезных программ, а вместо cgroups полагается на kvm, которая обеспечивает не root, а сразу kernel level equivalence, и которую точно так же ломали, ломают и ломать будут.
    зато на го.

     
     
  • 3.19, Аноним (-), 15:13, 03/05/2018 [^] [ответить]     [к модератору]  
  • +2 +/
    Сейчас это умеет уже более-менее и сам линух А у опенвзы родовая травма в виде ... весь текст скрыт [показать]
     
     
  • 4.20, пох (?), 16:27, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    > За что он и вылетает отовсюду - я уж не знаю что там случилось

    банальное там "слуцилась" - те части их кода, которые удалось "каждое заверните в салфеточку и отнесите в машину" - успешно пользует...правильно, kvm, xen и libvirt (и немедленно обросли несовместимыми с прародителем правками, так что вреда им от этого было куда больше чем пользы).
    А те что в ядре пришлись не ко двору, потому что денег на взятки линусовой братии у них не хватило - в конце-концов стало невозможно без конца переделывать в погоне за вечно движущейся целью, силами полутора уцелевших разработчиков. Тем более что те имели дурную привычку делать хорошо и разбираться в том, что делают окружающие, а не "ну nginx не запускается, но нам нафиг не нужен".

    так что на этом проекте можно ставить крестик, но речь-то не об этом, а о том что современные и того не могут толком. Вот и изобретают обратно все тот же квадратноколесатый велосипед. Зато он модной расцветочки.

     
  • 3.32, Аноним (-), 12:40, 04/05/2018 [^] [ответить]     [к модератору]  
  • +/
    Да да OpenVZ умеет вставлять циклы ожидания в JBD2, после чего начинают тормози... весь текст скрыт [показать]
     
  • 1.8, Аноним (-), 10:39, 03/05/2018 [ответить] [показать ветку] [···]     [к модератору]  
  • +4 +/
    да-а-а, красота - мы переписали uml который, вообще-то, на минуточку, просто р... весь текст скрыт [показать]
     
     
  • 2.13, IB (?), 12:11, 03/05/2018 [^] [ответить]    [к модератору]  
  • +3 +/
    Да, странное изделие.
    Непредсказуемые несовместимости во все поля.
    Получается строго заточено под набор приложений с которыми тестировалось самим Гуглем.

    Запуская своё никто не гарантирует, что вдруг поведение не станет непредсказуемым.

     
     
  • 3.15, пох (?), 13:09, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    не переживай - запуская докер в коммерческом окружении, ты и так гарантирован что поведение станет непредсказуемым.

    здесь просто подстелили чуток соломки, чтобы оно более вероятно сдохло, а не разнесло хост (без гарантий). Видимо, у гугля настали сложные времена и железа для физической изоляции подозрительных контейнеров им не хватает.

    Интересно, кстати, почему они вместо этой хрени не использовали работающие (в тех пределах, в которых вообще докер можно считать работающим) clear containers? NIH? Древнее железо (гугль любит очень странные процессоры и другие детали в своих картонных серверах)?

    Впрочем, я сомневаюсь что мы увидим техническое обоснование - скорее всего и внутри гугля они давно немодны, моден хайп (из которого целиком и состоит новость, в смысле, ее первоисточник)

     
  • 1.12, anonymous (??), 11:03, 03/05/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Так это же UML-2.0.
     
     
  • 2.14, пох (?), 12:34, 03/05/2018 [^] [ответить]    [к модератору]  
  • –2 +/
    uml, в отличие от этого гуглонедоразумения - работал. Но был не от гугля, не на модном go, не поддерживал модный oci-трэш, и не нравился Линусу. Поэтому быстро помер от недостатка внимания.

     
     
  • 3.22, Аноним (-), 19:02, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    В смысле помер? до сих пор спокойно можно собрать ядро с ARCH=um. Когда в последний раз запускать такое ядро версии 4.0 (или чуть новее), то все более-менее работало.
     
     
  • 4.24, пох (?), 19:23, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    > В смысле помер? до сих пор спокойно можно собрать ядро с ARCH=um.

    собрать-то, наверное, можно, но зачем?

     
  • 1.21, Аноним (21), 17:26, 03/05/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Что использовать вместо докера? Эта вся гомогребля с сетями и багами докера не кажется привлекательной.
     
     
  • 2.23, пох (?), 19:22, 03/05/2018 [^] [ответить]    [к модератору]  
  • +1 +/
    > Что использовать вместо докера?

    плетку. Которой отучать разработчиков создавать трэш, работающий только на побитовых копиях их собственных систем.

    То есть, это, собственно, если докер использовать по прямому назначению, единственному, где он как-то работает - для воссоздания кривых окружений кривых программ (непременно stateless, потому что не портить записываемые из под себя диски он так и не научился).

    Если тебе надо что-то другое, то уточняй задачу.

    В том числе с учетом новых знаний о неисправимых багах процессоров, из-за которых изоляция "контейнеров" невозможна в принципе, изоляция hardware virtualized систем - частично и без гарантий.

     
  • 1.25, _ (??), 19:39, 03/05/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    >собственное ядро, которое написано на языке Go и реализует большинство системных вызовов ядра Linux

    Оло-ло-шечка ... 8-о
    А нкоторые до сих пор спорят взлетел ли Go? %-)

     
     
  • 2.26, пох (?), 19:43, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    только ничего не работает, кроме трех программ.

     
     
  • 3.27, пох (?), 19:45, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    > только ничего не работает, кроме трех программ.

    (и да, если присмотреться - "реализует"-то - кривой враппер в основном, к реально работающим функциям стандартного линуксного ядра)

    своего осилено, походу, сетевой эмулятор (очередной, и неведомо с какой эффективностью) и что там - сокеты? Мухахаха.


     
  • 3.28, Аноним (-), 20:41, 03/05/2018 [^] [ответить]    [к модератору]  
  • +/
    1) запускаем на нормальном Linux под strace
    2) находим вызовы, которые пока не поддерживаются
    3) пишем багрепорт
    ...
    PROFIT!!!
     
     
  • 4.29, пох (?), 00:30, 04/05/2018 [^] [ответить]    [к модератору]  
  • +1 +/
    > 3) пишем багрепорт

    получаем wontfix или просто он висит вечно.
    Как ты понимаешь, запустить nginx со strace разработчики могли и сами - только недостающий и не факт что тривиальный (ибо треды и взаимоблокировки) код сам не напишется.


     
  • 1.30, Аноним (-), 01:14, 04/05/2018 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    Очень интересно оправдает оно себя или нет... весь текст скрыт [показать]
     
  • 1.31, Аноним (-), 11:32, 04/05/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А почему не на Rust?
     
     
  • 2.33, _ (??), 17:10, 04/05/2018 [^] [ответить]    [к модератору]  
  • +/
    We leave the Rust for the competitors ... (C)

    ;-)

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor