Использование контейнеров – это быстро и удобно! Что нужно, чтобы начать работать с контейнерами? Любой ПК и установленный Docker! Но данная статья НЕ для тех, кто задумал “масштабную миграцию” своего приложения на контейнеры. Попробуем взглянуть на вопрос со стороны инфраструктуры корпоративного бизнеса и планов запуска сотен или тысяч контейнеров.
Почему контейнеры получили широкое распространение:
- Независимость приложений от платформ и их конфигурации;
- Удобный способ хранения и доставки продукта;
- Масштабируемость и скорость развёртывания приложений.
Преимущества очевидны? Но тогда почему не все спешат ими воспользоваться? Многие “преимущества” использования контейнеров несут в себе серьёзные проблемы, особенно для организаций с высокими требованиями к уровню безопасности и доступности приложений. И если кто-то рассказывает о высокой безопасности контейнеров, то не стоит верить на слово: немного поиска и перед Вами список серьёзных проблем, идущих с контейнерами в комплекте:
- Безопасность Docker-хоста и ядра;
- Выход за пределы Docker-контейнера;
- Злоупотребление ресурсами;
- Подлинность образов Docker;
- Уязвимости в контейнерах;
- Мониторинг безопасности Docker во время выполнения;
- Ограниченная видимость для администраторов ИТ.
Значит, нужно провести предварительный анализ рисков и принять всевозможные меры по их уменьшению. Администраторам же, до начала масштабного внедрения контейнеров и во время их работы, необходимо выполнять работы по следующим направлениям:
- Настройка сетей;
- Мониторинг работы контейнеров;
- Управление доступом пользователей;
- Хранение данных;
- Обеспечение безопасности;
- Диагностика и масштабирование;
- Доступность сервисов;
- Организация резервного копирования данных;
- Организация резервного копирования образов;
- Аварийное восстановление…
В качестве решения большей части приведенных выше проблем и для снижения рисков при переносе приложений в контейнеры, компания VMware предлагает своё решение: vSphere Integrated Containers (VIC). VIC позволяет совместить преимущества использования контейнеров с безопасностью, изоляцией и управлением виртуальными машинами. Данный продукт доступен всем счастливым обладателям лицензии vSphere Enterprise plus и состоит из трёх основных частей:
- VIC Engine;
- Harbor;
- Admiral.
VIC Engine
VIC Engine — модуль, обеспечивающий интеграцию технологий контейнеризации и виртуальной инфраструктуры организации. Основная концепция решения – переход от “толстых” docker-хостов к минимизированным виртуальным машинам с одним контейнером на каждую. Образ операционной системы такой VM основан на Photon OS и занимает всего 64 МБ. Благодаря “упаковке” контейнеров в виртуальные машины, им стали доступны технологии vSphere High Availability (HA), vSphere vMotion и vSphere Distributed Resource Scheduler (DRS). Для работы контейнеров вместо каждого docker-хоста на платформе виртуализации выделяется пул ресурсов и создаётся сервер-шлюз с “генно-модифицированным” docker на борту (реализует стандартный Docker API). Такой сервер называется virtual container host (VCH), он принимает на входе команды docker и преобразует их в запросы к API vCenter. Под данные можно использовать любые доступные хранилища, включая vSAN и NFS.
Зачем целенаправленно делать шаг “назад” к виртуализации? Пройдёмся по нашему списку проблем:
- Безопасность Docker-хоста и ядра: минимальное, специально оптимизированное ядро, меньше пакетов – меньше проблем, выше скорость; при возникновении проблемы компрометируется одна VM и один контейнер; при каждом старте контейнера VM пересоздаётся;
- Выход за пределы Docker-контейнера: данный процесс полностью лишается смысла;
- Злоупотребление ресурсами: выделение и ограничение ресурсов производится на уровне виртуальных машин и пулов ресурсов, распределение VM по кластеру;
- Ограниченная видимость для администраторов ИТ: упаковка контейнеров в виртуальные машины позволяет использовать весь спектр систем анализа и мониторинга виртуальной инфраструктуры;
- Хранение данных: выделяем для VCH одно или несколько хранилищ, тома данных создаются в виде отдельных vmdk;
- Организация резервного копирования данных: любой из имеющихся у Вас инструментов.
Следующая отличительная особенность решения в организации сети. В дополнение к внутренней сети между хостом с docker (VCH) и контейнерами (Bridge Network), контейнеры могут подключаться непосредственно к маршрутизируемой сети (Container Network):
- Настройка сетей: подключение VCH к заданным группам портов, возможность разделения сетей management, public, client, bridge и container; последних для каждого VCH можно указать несколько;
- Доступность сервисов: при использовании Container Network временная недоступность VCH не повлияет на работу контейнеров и на доступ к ним;
- Безопасность: при использовании Container Network можно дополнительно настроить правила файервола, а при использовании NSX защитить можно контейнеры и в Bridge Network;
- Мониторинг безопасности Docker во время выполнения: возможна сетевая защита, тот же NSX; динамический анализ лог-файлов внешними системами.
Harbor
Harbor — реестр контейнеров, корпоративное хранилище образов docker с поддержкой ролевой системы доступа, проверкой образов на наличие уязвимостей, возможностью подписи и репликации образов.
- Подлинность образов Docker: при создании VCH указываются доступные реестры, т.е. можно указать только корпоративный реестр Harbor + доступна служба подписи образов Notary;
- Уязвимости в образах контейнеров: настройка сканирования образов при загрузке в реестр и ограничение развертывания контейнеров при наличии уязвимостей заданного уровня;
- Организация резервного копирования образов: Harbor поддерживает различные схемы репликации;
Admiral
Admiral — портал управления. Единый портал, предоставляющий полный набор инструментов для управления проектами и пользователями, реестрами и безопасностью, хостами и контейнерами. На портале есть возможность импорта Dockerfile и docker-compose.yml а также визуальный редактор для создания и настройки контейнеров и мультиконтейнерных приложений:
- Мониторинг работы контейнеров: возможность визуального отслеживания состояния контейнеров
- Управление доступом пользователей: интеграция с имеющимся системами LDAP/AD, ролевая модель доступа: администратор облака, dev-ops администратор, разработчик и наблюдатель (безопасность);
- Безопасность: ролевая модель доступа, сканирование на уязвимости;
- Доступность сервисов и аварийное восстановление: контроль работы контейнеров посредством отправки HTTP и TCP запросов и вызовом консольных команд, автоматический редеплой при сбое.
Этого достаточно?
Что есть ещё? Есть интеграция с vRealize Automation! Это позволяет запускать контейнеры по запросу пользователей – Containers as a Service (CaaS).
Что Вам не даст VIC из коробки? Наверное, главным минусом этого решения является отсутствие системы оркестрации контейнеров. Она необходима для удобства и эффективности развертывания контейнерных приложений. В настоящее время самыми популярными системами оркестрации являются Docker Swarm, Apache Mesos и, конечно же, Kubernetes. Первоначально разработчики планировали включить поддержку Kubernetes в VIC начиная с версии 1.2.0, но передумали. Сейчас VMware совместно с Pivotal Software разрабатывают продукт Pivotal Container Service (PKS). Но это уже совсем другой продукт и о нём придётся писать отдельно…