Istio

menu icon

Istio

Узнайте больше об Istio — открытой технологии, которая позволяет разработчикам подключать сети микросервисов друг к другу, управлять ими и обеспечивать их безопасность.

Что такое Istio?

Istio — это настраиваемая сервисная сетка (service mesh) с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в кластере Kubernetes. На момент написания этого документа Istio поддерживает только Kubernetes, однако благодаря его открытому исходному коду любой может написать расширения, позволяющие Istio работать с любым кластерным ПО. Здесь рассмотрен основной на данный момент сценарий использования Istio в контексте Kubernetes.

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

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

Объяснение основных принципов работы Istio можно найти в следующем видеоролике (5:13):

Сетка для сетевых сервисов

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

И здесь на помощь приходит сервисная сетка.

По мере роста числа сервисов стремительно растет и количество потенциальных каналов взаимодействия. У двух сервисов существует только два канала взаимодействия. У трех служб их шесть, а у 10 служб — 90. Сервисная сетка предоставляет универсальный способ настроить эти каналы взаимодействия, создав политику взаимодействия.

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

Обычно для этого в кластере используется техника sidecar. Sidecar — это добавляемый в под контейнер, который обеспечивает маршрутизацию трафика между сервисами и контейнерами и наблюдение за ним.

Istio и Kubernetes

Как упоминалось выше, Istio работает поверх Kubernetes, добавляя контейнеры, которые по сути невидимы для программиста или администратора. Они называются sidecar-контейнерами и выступают в роли «посредника», который направляет трафик и отслеживает взаимодействие компонентов. Действуя совместно, они дают тройной эффект: настройка, мониторинг и управление.

Настройка

В случае Kubernetes конфигурация обычно задается командой kubectl вида «kubectl -f <имя-файла>, где в качестве файла указывается файл YAML. Пользователи Istio могут либо запускать новые различные типы файлов YAML с помощью команды kubectl, либо использовать новую команду ioctl.

Мониторинг

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

Управление

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

Преимущества

Основные преимущества сервисной сетки заключаются в том, что она предоставляет улучшенные возможности для отладки, мониторинга, маршрутизации, обеспечения безопасности и распределения нагрузки. Благодаря этому Istio упрощает управление обширными наборами сервисов.

Улучшенная отладка

Предположим, что у сервиса есть несколько зависимостей. Сервис pay_claim в страховой компании вызывает сервис deductible_amt, который вызывает сервис is_member_covered service, и так далее. Сложная цепочка зависимостей может состоять из 10 или 12 вызовов сервисов. Если в любом из 12 сервисов произойдет сбой, это по цепочке вызовет сбой остальных сервисов, в результате чего возникнет одна из ошибок с кодом 500 или 400, либо приложение перестанет отвечать.

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

Но в этом примере не видно, что происходит внутри ЦОД, а именно как callback=parselLotamaAudiences вызывает четыре остальные веб-службы, и какая из них отвечает слишком медленно. Позднее вы узнаете о том, какие инструменты предоставляет Istio для трассировки вызовов функций с помощью похожей диаграммы.

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

Специалистам по DevOps и ИТ-администраторам могут требоваться средства наблюдения за трафиком, позволяющие отслеживать задержку, время обслуживания, долю ошибок в трафике и другие показатели. Как правило, им удобно, чтобы все это отображалось на сводной панели. Сводная панель должна показывать итоговые или средние значения этих показателей и, желательно, предоставлять возможность делать разбивку значений по узлам, сервисам или подам. В Kubernetes нет таких встроенных возможностей.

Политика

По умолчанию Kubernetes позволяет каждому поду отправлять трафик во все остальные поды. Istio позволяет администраторам создать политику, определяющую, какие сервисы могут работать друг с другом. Например, можно разрешить сервисам вызывать только те сервисы, от которых они действительно зависят. Примером другой политики, помогающей обеспечить бесперебойную работу сервиса, является ограничение скорости передачи, позволяющее предотвратить «захлебывание» сервиса и блокировать атаки типа «Отказ в обслуживании».

Маршрутизация и распределение нагрузки

По умолчанию Kubernetes обеспечивает распределение нагрузки карусельным методом. Если микросервис предоставляется шестью подами, Kubernetes будет использовать распределитель нагрузки или «сервис», поочередно отправляющий запросы каждому поду по кругу. Однако иногда в рабочей среде может быть развернуто несколько версий одного сервиса.

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

Благодаря Istio, этот процесс становится не сложнее использованию тегов в файле конфигурации. Администраторы могут определять тип сервиса, к которому следует подключаться, с помощью меток, и создавать правила на основе заголовков. Таким образом, к примеру, пользователи бета-версии могут направляться в «канареечный» под с новейшей сборкой, а обычные пользователи могут использовать стабильно работающую текущую сборку.

Разрыв цепочки

Если сервис перегружен или перестал работать, все последующие запросы не будут выполняться, но будут повышать загруженность системы. Благодаря тому что Istio отслеживает ошибки и задержки, он может принудительно прерывать работу сервиса, давая ему возможность восстановиться, после определенного числа запросов, указанного в политике. Для того чтобы применять эту политику в масштабах всего кластера, достаточно создать компактный текстовый файл и проинструктировать Istio использовать его в качестве новой политики.

Безопасность

Istio обеспечивает идентификацию, применение политик и шифрование по умолчанию, а также аутентификацию, авторизацию и аудит (AAA). Любые работающие под его управлением поды взаимодействуют с другими подами, используя зашифрованный трафик, защищенный от внешнего наблюдения. Служба идентификации в сочетании с шифрованием гарантирует, что ни один неавторизованный пользователь не может подделать вызов сервиса. AAA предоставляет специалистам по безопасности и эксплуатации необходимые инструменты мониторинга, сопряженные с меньшими накладными расходами.

Упрощенное администрирование

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

Примеры

Визуализация сервисов

В Istio 1.1 предусмотрено новое дополнение Kiali, обеспечивающее визуализацию через веб-интерфейс. Его можно использовать для отслеживания запросов к сервису, детализации информации и экспорта хронологии запросов в формате JSON, позволяющем запросить нужную информацию и отформатировать ее необходимым способом. Приведенный ниже граф представляет собой создаваемую в режиме реального времени диаграмму зависимостей, отражающую фактически зависимости сервисов друг от друга. Он генерируется на основе фактических наблюдений за трафиком.

Изображение нового дополнения Kiali, обеспечивающего веб-визуализацию

Трассировка вызовов сервисов

Входящий в состав Istio сервис Jaeger обеспечивает трассировку любого сервиса. В этом примере выполняется трассировка страницы продукта. Любая точка на первом рисунке представляет вызов сервиса. Щелкнув на точке, можно раскрыть каскадную диаграмму для отслеживания фактических запросов и ответов сервисов.

Изображение сервиса Jaeger, входящего в состав Istio и обеспечивающего отслеживание любой заданной службы.  В этом примере выполняется трассировка страницы продукта.  Каждая точка на первом рисунке — это вызов службы.

Также можно более детально изучить страницу продукта. Видно, что ошибки содержатся в самой странице продукта — сведения об этом успешно возвращены.

Изображение страницы продукта.  Видно, что ошибки содержатся в самой странице продукта — сведения об этом успешно возвращены.

Сводные панели

Istio поставляется со многими готовыми сводными панелями для мониторинга состояния и производительности системы. Они содержат такие показатели, как использование оперативной памяти и процессора, запрос на трафик, количество ошибок с кодами 400 и 500, время выполнения запросов и многое другое. Для работы с ними достаточно установить и запустить Istio и добавить Grafana — один из входящих в комплект поставки Istio инструментов создания сводных панелей с открытым исходным кодом. В дополнение к этому Istio предоставляет еще две сводные панели:  Kiali и Jaeger.

Изображение нескольких сводных панелей Istio (готовых) для отслеживания состояния и быстродействия системы

Istio в сравнении с Envoy

Istio использует значительно дополненную версию Envoy для обеспечения мониторинга, управления и ведения журнала. Отслеживается каждый под, а Istio объединяет информацию обо всех подах и предоставляет ее. Вместо того чтобы использовать Istio, можно было бы развернуть Envoy в кластере Kubernetes и написать код управления. Но по сути для этого потребовалось бы написать аналог Istio с теми рисками и затратами, которые обычно связаны с разработкой нестандартного проекта.

Учебники

На веб-сайте Istio (внешняя ссылка) содержится множество полезной документации и инструкций по началу работы с Istio. 

Istio и IBM

Managed Istio поставляется в составе IBM Cloud Kubernetes Service. В рамках данной услуги предоставляются установка Istio, автоматические обновления, управление жизненным циклом компонентов среды контроля и интеграция с инструментами ведения журналов и мониторинга платформы. Добавьте управляемую интеграцию Istio к своим новым или имеющимся кластерам и возьмите свои микросервисы под контроль. Для того чтобы больше узнать о Knative, обратитесь к публикации «Knative: краткое руководство».

Подробнее о Managed Istio в IBM Cloud Kubernetes Service

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

Для того чтобы узнать о лучших методах организовать и ускорить развертывание контейнеров в рабочей среде, изучите отчет «Практические рекомендации по применению контейнеров и Kubernetes в рабочей среде».

Узнайте, как сервисные сетки могут помочь управлять взаимодействием между сервисами в вашем приложении, в практическом руководстве «Istio для начинающих: начало работы с сервисной сеткой» (PDF, 4,1 МБ).

Если вы уже готовы приступить к использованию IBM Cloud, зарегистрируйтесь здесь.