OpenShift

Что это такое

OpenShift — это дистрибутив Kubernetes от Red Hat с заполненными операционными пробелами: встроенный реестр, веб-консоль, интегрированные конвейеры, мониторинг и логирование, а также более строгая модель безопасности по умолчанию. API — это Kubernetes, поэтому знакомые вам объекты по-прежнему работают; меняется то, насколько большая часть окружающей платформы приходит уже собранной и насколько много решено за вас.

Почему это важно

Голый кластер Kubernetes — это ядро, а не продукт: нужно выбрать и эксплуатировать слой входного трафика, интеграцию с идентичностью, реестр, стек мониторинга и движок политик, а затем держать их совместимыми через обновления. OpenShift продаёт эту сборку как поддерживаемое целое, с вендором, к которому можно обратиться, когда оно сломается. Для организации, которой нужна поддерживаемая платформа, предсказуемый путь обновлений и история соответствия требованиям, это настоящая покупка. Для команды, которой уже удобно собирать части самому, это большой объём платформы, о котором её не просили.

Ключевые идеи

Модель безопасности строга по умолчанию

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

образ ожидает uid 0 и записываемый корень /                                     ->  отклонён
образ работает под произвольным uid со смонтированным путём для записи          ->  принят

Маршруты и ingress — часть платформы

Вместо того чтобы оставлять доступ наружу отдельно установленному контроллеру, OpenShift даёт собственный объект маршрутизации с уже обработанным TLS. Следствие — меньше выбора и меньше сборки. Знать, что нижележащий ingress Kubernetes существует, всё равно полезно, когда чему-то нужна функция, которую объект маршрута не открывает.

Идентичность и проекты идут уже интегрированными

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

Конвейеры живут внутри кластера

Конвейер сборки и развёртывания может работать как рабочая нагрузка кластера, поэтому у сборки та же модель доступа и та же наблюдаемость, что и у всего остального. Это удобно и концентрирует риск: скомпрометированный конвейер дотянется до всего, что умеет кластер. Альтернатива — отдельная система конвейеров — имеет свои компромиссы в ту же сторону.

Дисциплина обновлений — причина покупать

Дистрибутив тестируется и обновляется как единое целое, и именно это большинство команд недооценивает: держать десятки компонентов самодельного кластера взаимно совместимыми через версии Kubernetes — непрерывная работа. Плата за эту координацию часто и есть настоящая покупка, и именно она должна быть причиной, а не консоль.

Практика

Адаптируйте образ к строгой модели

Возьмите контейнер, который работает от root и пишет в каталог, которым владеет по умолчанию, и переделайте его так, чтобы он работал под произвольным пользователем со смонтированным путём для записи.

Готово, когда: образ запускается под строгой политикой и пишет только в смонтированный путь.

Сравните собранную платформу с голым кластером

Перечислите каждый компонент, который нужен голому кластеру Kubernetes, чтобы сравняться с тем, что даёт OpenShift, и отметьте, какие из них вашей команде пришлось бы эксплуатировать самой.

Готово, когда: вы можете назвать компоненты, от которых с радостью отказались бы, и те, чью потерю контроля вы бы заметили.

Частые ошибки

  • Поставлять образы, которым нужен root — политика по умолчанию их отвергает; исправить: собирайте под произвольный идентификатор пользователя и записываемый том.
  • Обходить маршрутизацию платформы своим контроллером — вы теряете поддерживаемый путь обновлений; исправить: используйте предоставленный объект маршрутизации и заведите обращение, если функции не хватает.
  • Создавать локальных пользователей вместо интеграции с каталогом — аккаунты размножаются, а отключение становится ручным; исправить: подключите внешнего поставщика идентичности.
  • Считать стоимость только лицензией — ценность в протестированном пути обновлений; исправить: оценивайте её против операционной работы по сборке той же платформы.
  • Давать конвейеру в кластере права на весь кластер — компрометация сборки дотянется до кластера; исправить: ограничьте сервисный аккаунт конвейера тем, что он развёртывает.

Что читать дальше

  • Kubernetes (06-cloud-devops/14-kubernetes) — система, которую упаковывает этот дистрибутив, поэтому читайте первым.
  • Helm (06-cloud-devops/21-helm) — инструмент упаковки, на который опирается большинство дистрибутивов, включая этот.
  • Terraform (06-cloud-devops/07-terraform) — описание кластера и окружающих его ресурсов воспроизводимо.