Pull to refresh
0
Parallels
Мировой лидер на рынке межплатформенных решений

Как Virtuozzo улучшает безопасность Docker для сервис-провайдеров

Reading time 4 min
Views 6.5K
imageВ бизнес-продразделении Odin* недавно объявили о поддержке контейнеров Docker в Virtuozzo. Эта поддержка – часть нашей стратегии по реализации Virtuozzo как инфраструктурной основы для платформ контейнерной виртуализации, наиболее подходящей для работы в средах, где главные требования – безопасность и производительность.

Стоит отметить, что такие контейнерные проекты, как Docker, иногда называют конкурентами нашим собственным разработкам. На самом деле, мы работаем на разных уровнях – Docker занимается управлением приложениями, а мы виртуализацией – в том числе и той, что используется в Docker. В результате нас нередко связывают партнерские отношения и совместная работа. Например, вместе с Docker мы разрабатываем проекты системных библиотек, предоставляющих интерфейс к ядерным контейнерным компонентам – это и начатый Docker проект Libcontainer (вместе с Canonical, Google и RedHat), и наш — libct (вместе с LXC и Google).
Ниже – пример таких возможностей, которые дают совместные технологии.

Поддержка Docker внутри Virtuozzo добавляет “контейнеры внутри контейнеров” в ядро Virtuozzo Linux, позволяя создавать контейнеры Docker внутри контейнеров Virtuozzo. Так появляются дополнительные пространства имен для Docker внутри виртуального контейнера Virtuozzo. Аналогичный сценарий в гипервизорах, таких как KVM, работает по умолчанию – поскольку ядро гостевой ОС и ядро сервера там разделены, пространства имен изначально не пересекаются. Теперь же появилась возможность делать то же самое, добавив преимущества контейнерной виртуализации, а именно: быстрый запуск, мгновенное масштабирование, высокую эластичность и производительность, равную производительности физического оборудования.
Для сервис-провайдеров и всех остальных, кому нужен многопользовательский режим, это также означает, что контейнер Virtuozzo может устранить проблемы безопасности Docker без потерь производительности, которые дают гипервизоры. Собственные средства разграничения в Docker весьма ограничены — к примеру, как отмечено в этой статье, наличие доступа к командной строке Docker по сути означает наличие прав пользователя root на сервере.
Вот пример команды позволяющей получить root:

$ docker run -v $PWD:/stuff -t my-docker-image /bin/sh -c \
'cp /bin/sh /stuff && chown root.root /stuff/sh && chmod a+s /stuff/sh'

image

Результатом ее выполнения будет копия shell’а в текущем каталоге, c выставленным suid битом (что позволяет запускать shell не от имени текущего пользователя, а от имени владельца файла – в данном случае root).

Очевидно, в такой конфигурации категорически нельзя размещать на одном физическом оборудовании множество потенциально враждебных пользователей, применяющих Docker. Так как они не будут изолированы с точки зрения физических ресурсов, то один пользователь сможет легко получить доступ к данным другого и уничтожить их.

Однако данная проблема легко решается, если на сервере работает Virtuozzo. Создание контейнеров Virtuozzo эффективно разделяет ресурсы сервера, делая сервер по-настоящему многопользовательским. Клиенты, изолированные друг от друга с помощью контейнеров Virtuozzo, могут использовать Docker точно так же, как и на физическом сервере, но с добавлением нового уровня изоляции и управления ресурсами (и поэтому клиенты не конкурируют друг с другом за физическую память, дисковое пространство и ресурсы процессора). В результате у каждого появляются свои собственные контейнеры Docker, а общая производительность остается такой, как если бы они были на физическом сервере.

Вот пример, почему Docker крайне удобен пользователям, которым нужно запустить приложение в облаке. Для начала попробуем запустить Docker-приложение на своем собственном ноутбуке:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository hello-world
91c95931e552: Pulling image (latest) from hello-world, endpoint: https://registr91c95931e552: Download complete
a8219747be10: Download complete
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.
...


Это можно делать многократно, правя код и устраняя баги (естественно, когда это не hello world, а что-нибудь более полезное) – в какой-то момент мы принимаем решение – все, готово, пора выпускать и внедрять.

Дальше делаем так:

$ export DOCKER_HOST=tcp://server:2376 DOCKER_TLS_VERIFY=1


(Предполагается, что TLS-сертификаты уже разложены и Docker настроен им доверять). Server – это адрес сервера, на котором крутится наше приложение в облаке. Запуск свежей копии приложения на нем теперь – это уже знакомое

$ docker run hello-world


Готово – приложение запущено, и, что важно, – оно попало на сервер вместе с окружением и системными библиотеками, с которыми отлаживалось и тестировалось – то есть вероятность сломать его неправильными настройками почти нулевая.
Являясь членом unix-группы docker внутри контейнера Virtuozzo, каждый пользователь по-прежнему будет иметь возможность повысить доступ до уровня root – но это будет root изолированного контейнера, а не root сервера. То есть Virtuozzo-контейнер остается однопользовательским — но на физическом сервере таких с Docker уже может быть много.
Это лишь один из первых поддержанных в Virtuozzo сценариев c контейнерами приложений, который мы реализовали и о котором хотели рассказать. Будут и другие, поэтому следите за обновлениями.

* Под этим новым брендом с марта 2015 года работает бизнес-продразделение компании Parallels, отвечающее за решения для сервис-провайдеров

Видео ниже показывает наглядно как запустить Wordpress с помощью Docker внутри контейнера Virtuozzo:

Tags:
Hubs:
+17
Comments 2
Comments Comments 2

Articles

Information

Website
www.parallels.com
Registered
Founded
Employees
201–500 employees
Location
США