Что такое Service Mesh и зачем он нужен для Kubernetes?

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

В настоящее время предприятия стремятся внедрить архитектуру микросервисов, учитывая ее маневренность и гибкость. Контейнеры и появление Kubernetes — популярного инструмента оркестровки контейнеров — упростили для них переход от монолита к микросервисам.

Однако при масштабном использовании архитектуры микросервисов возник новый набор проблем:

DevOps и архитекторам стало сложно управлять трафиком между сервисами

Поскольку микросервисы развертываются в нескольких кластерах и облаках, данные выходят за периметр (брандмауэра) и становятся уязвимыми; безопасность становится большой проблемой

Получение общей информации о топологии сети стало кошмаром для SRE.

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

Что нужно архитекторам, так это радикальная реализация их инфраструктуры для решения их растущих проблем с сетью, безопасностью и наблюдаемостью. И вот тут-то и появляется концепция сервисной сетки.

Что такое сервисная сетка? 

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

Рис. A. Связь между службами до и после внедрения сервисной сетки

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

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

Зачем вам Service Mesh для Kubernetes?

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

Утомительное соблюдение требований безопасности

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

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

Хаотическое управление сетью

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

Достижение такого детального контроля над сетью требует от инженеров DevOps создания большого количества конфигураций и сценариев в Kubernetes и облачной среде.

Отсутствие визуализации по сети

Когда приложения распределены по сети и между ними происходит обмен данными, SRE становится сложно отслеживать работоспособность и производительность сетевой инфраструктуры. Это серьезно снижает их способность выявлять и устранять неполадки в сети.

Внедрение службы решает вышеуказанные проблемы, предоставляя функции, которые делают управление приложениями, развернутыми в Kubernetes, безболезненным.

Ключевые особенности Service Mesh в Kubernetes

Service Mesh действует как централизованная платформа для организации сети, безопасности и наблюдения за микросервисами, развернутыми в Kubernetes.

Централизованная безопасность

С сервисной сеткой легче добиться соответствия требованиям безопасности, поскольку это можно сделать из центральной плоскости, а не настраивать ее для каждой службы. Платформа Service Mesh может применять согласованные политики безопасности, работающие за пределами кластера.

Сервисная сетка обеспечивает детализированную аутентификацию, авторизацию и контроль доступа для приложений в сетке.

Аутентификация: реализация mTLS , JWT

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

Контроль доступа: политики RBAC, которые можно установить на уровнях методов, служб и пространств имен.

Расширенное сетевое тестирование и тестирование устойчивости

Сервисная сетка обеспечивает детальный контроль над потоком трафика между сервисами. Инженеры DevOps могут разделять трафик между сервисами или направлять их на основе определенных весов.

Кроме того, сервисная сетка предоставляет следующие функции для проверки отказоустойчивости инфраструктуры без особых усилий:

Введение ошибок

Тайм-ауты

Повторные попытки

Размыкание цепи

Зеркальное отображение

Единая наблюдаемость

Внедрение сервисной сетки помогает командам SRE и Ops централизованно отслеживать состояние и производительность приложений в сетке. Сервисная сетка предоставляет следующую телеметрию для наблюдения и видимости в реальном времени:

Метрики: для мониторинга производительности и просмотра задержек, трафика, ошибок и насыщения.

Распределенная трассировка: чтобы понять жизненный цикл запросов и проанализировать зависимость службы и поток трафика.

Журналы доступа: для аудита поведения службы.

Лучшее программное обеспечение Service Mesh для Kubernetes

На рынке можно найти различное программное обеспечение для сервисных сетей, такое как Istio, Linkerd, HashiCorp Consul, Kong KUMA, Google Anthos (построен на Istio), VMware Tanzu и т. д.

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

Istio 

Istio — это самое популярное сертифицированное CNCF программное обеспечение Service Mesh с открытым исходным кодом, . Он использует прокси-сервер Envoy в качестве сайдкаров, а плоскость управления используется для их управления и настройки (см. рис. B).

Istio предоставляет сетевые функции, функции безопасности и наблюдения для приложений любого масштаба. Разработчики из Google, Microsoft, IBM и других активно участвуют в проекте Istio.

Linkerd 

Linkerd — это легкое программное обеспечение для сервисных сетей с открытым исходным кодом, разработанное Buoyant. Он предоставляет основные функции сервисной сетки и имеет службу назначения, службу идентификации и инжектор прокси (см. рис. C).

Более 80% вклада в Linkerd вносят сами основатели Buoyant .

(Чтобы увидеть подробное сравнение между ними и выбрать один из них для своего развертывания Kubernetes, перейдите к статье Istio vs Linkerd: лучшая сетка сервисов на 2023 год .)

Преимущества Service Mesh для Kubernetes

Ниже приведены некоторые преимущества от инженеров компании DST Global, которые предприятия получат, внедрив сервисную сетку в Kubernetes.

100% безопасность сети и данных

Сервисная сетка помогает поддерживать сеть с нулевым доверием, в которой запросы постоянно аутентифицируются и авторизуются перед обработкой. Инженеры DevOps могут реализовать такие функции, как mTLS, которые работают в масштабе всего кластера и за его пределами (см.

рис. D).

Сеть с нулевым доверием помогает поддерживать безопасную инфраструктуру в текущей динамичной среде угроз, наполненной атаками, такими как «человек посередине» (MITM) и отказ в обслуживании (DoS).

(Если вам интересно узнать больше, ознакомьтесь с этой статьей: Сеть с нулевым доверием для микросервисов с Istio .)

На 80 % снижается количество неудачных изменений

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

Канарские и сине-зеленые развертывания являются двумя такими стратегиями развертывания. Мелкозернистые средства управления трафиком, в том числе разделение трафика на основе весов (см. рис. F), предоставляемые сервисной сеткой, упрощают их выполнение инженерами DevOps.

Рис. F. Развертывание Canary с сервисной сеткой Istio 

Доступная и отказоустойчивая инфраструктура на 99,99 %

Данные телеметрии, предоставляемые программным обеспечением Service Mesh, помогают командам SRE и Ops быстро выявлять ошибки/угрозы и реагировать на них.

Большая часть ПО Service Mesh интегрируется с инструментами мониторинга, такими как Prometheus, Grafana, Kiali, Jaeger и т. д., а предоставляемая ими панель инструментов (см. рис. G) помогает операторам визуализировать работоспособность, производительность и поведение сервисов.

Рис G — График обслуживания Kiali

5-кратное улучшение опыта разработчиков

Большинству разработчиков приложений не нравится настраивать сеть и логику безопасности в своих приложениях. Их внимание, как правило, сосредоточено на бизнес-логике и функциях построения.

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

Три столпа успешного внедрения Service Mesh

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

1. Технологическая поддержка

Важно оценить программное обеспечение сервисной сетки с точки зрения технологической поддержки. Если вы являетесь зрелой организацией DevOps, использующей различные открытые стандарты и открытый код в процессе CI/CD, убедитесь, что программное обеспечение Service Mesh хорошо интегрируется с вашими инструментами CI/CD (любых версий).

Например, если вы используете Argo CD для развертывания GitOps или Prometheus для мониторинга, то программное обеспечение Service Mesh должно быть способно интегрироваться с меньшим вмешательством.

2. Поддержка предприятий

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

Оцените программное обеспечение Service Mesh, которое поддерживается крупным членом сообщества (очень хорошо для поддержки), а также существуют экосистемы сторонних поставщиков, которые могут обеспечить круглосуточную поддержку 7 дней в неделю с фиксированным соглашением об уровне обслуживания.

3. Обучение и адаптационная поддержка

Обеспечьте наличие соответствующих материалов для чтения, документов и видео , которые дополнят обучение пользователей программному обеспечению Service Mesh, потому что это не имеет смысла, если внутренние сотрудники, такие как DevOps и SRE, не смогут его внедрить.

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

Service Mesh — путь вперед для рабочих нагрузок Kubernetes

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

Что такое Service Mesh и зачем он нужен для Kubernetes?
Получить консультацию у специалистов DST
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все ваши вопросы.
Комментарии и отзывы экспертов
RSS
01:07
+2
Развёртывать микросервисы на сервере — то ещё удовольствие, даже с Kubernetes. К тому же Kubernetes не занимается коммуникациями между сервисами. Для этой задачи мы привлекаем Istio — реализацию service mesh.

В Kubernetes мы развёртываем сервисы в подах, но как поды внутри Kubernetes общаются друг с другом и в чём тут загвоздка? Разберемся в этой статье.
Взаимодействие между подами

Kubernetes использует интерфейс CNI для взаимодействия между сетью и подами в кластере. На рабочей ноде за общение подов отвечает kube-proxy — сетевой прокси, который работает на каждой ноде в кластере и управляет сетевыми правилами. Сетевые правила регулируют взаимодействие в кластере и за его пределами.

Когда мы создаём под, или сервис, kube-proxy обновляет правила iptables, чтобы поды могли общаться:
Когда мы создаём сервис Service B, сервер API Kubernetes уведомляет kube-proxy на рабочей ноде, чтобы он добавил в iptables правила для Service B. Когда какой-то под будет вызывать Service B, запрос сначала будет направлен в iptables. iptables заменит целевой IP в Packet X на IP пода Pod B и перешлёт запрос в Pod B.
Но у kube-proxy есть ограничения:

Запросы подам отправляются случайным образом.

Трафик нельзя поделить на части по процентам.

Канареечные и сине-зелёные развёртывания не поддерживаются.

Сложно мониторить и отлаживать.

Безопасность, повторы запросов, наблюдаемость и т. д. при общении микросервисов приходится прописывать в коде.

Service mesh — это отдельный инфраструктурный уровень, который мы добавляем к приложениям для взаимодействия между сервисами или микросервисами. На этом уровне можно прозрачно добавить наблюдаемость, управление трафиком и безопасность, чтобы не включать их в код.

У service mesh есть control plane управления и data plane. Первая управляет прокси для маршрутизации трафика, а вторая отвечает за коммуникации между сервисами. Data plane обычно реализуется как sidecar, который развёртывается вместе с кодом приложения.В Kubernetes data plane — это sidecar-контейнер рядом с главным контейнером в поде. Когда service mesh запускается на платформе кубернетес, data plane service mesh представлен sidecar-контейнером, который выполняется рядом с основным контейнером в поде. Эти sidecar-контейнеры обеспечивают взаимодействие между сервисами в разных подах. Таким образом теперь взаимодействие между подами происходит не через kube-proxy, а через sidecar: под обращается к sidecar-контейнеру и уже через него общается с другими подами.

Безопасность, автоматические повторы запросов, мониторинг и другие возможности обрабатывает sidecar-контейнер, а приложение содержит только бизнес-логику.Две самых популярных реализации service mesh — Istio и Consul. Мы познакомимся только с Istio.
01:08
+2
Istio — это service mesh с открытым кодом, который прозрачно накладывается на существующие распределённые приложения. Istio предлагает единообразный и эффективный подход к безопасности, взаимодействию и мониторингу.

Control plane в Istio реализована в контейнере Istiod, а data plane развёртывается в поде как sidecar с помощью контейнера с Envoy.

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

Прокси Envoy развёртываются как sidecar’ы в подах и дают несколько возможностей:

— динамическое обнаружение сервисов;

— балансировки нагрузки;

— терминация TLS;

— прокси HTTP/2 и gRPC;

— размыкатели цепи;

— проверки работоспособности;

— постепенное развёртывание с процентным разделением трафика;

— внесение ошибок;

— всевозможные метрики.

Если мы установим Istio в Kubernetes и создадим под, контейнер Envoy будет внедрен в него автоматически — его не придётся объявлять в манифесте пода. Сейчас Istio — это проект Cloud Native Computing Foundation (CNCF).Теперь вы знаете, зачем микросервисам нужна service mesh и причём тут Istio.
01:09
+1
А есть хоть какая-нибудь оценка того, сколько реально позволило сэкономить применение Istio? Желательно не на «сферическом примере в вакууме», а на реальном. Мы вот заморочились, внедрили Istio по требованиям организации, словили кучу проблем с ним. И никто не видит никакой пользы. Терминирование TLS особо не нужно (безопасность требует шифровать всё); балансировки по кругу хватает; размыкатели цепи в теории штука неплохая, но нередко уже встроена в библиотеки, да и без зашкаливающей нагрузки особо не нужна; метрики — и так всё обвешено Прометеями настолько, что глаз смотреть не хватает.
01:09
Я не претендую на особую экспертизу в этом вопросе, но сомневаюсь, что внедрение service mech окупится из-за перечисленных вами фич. Зато если вы хотите пойти в Canary Deployment, то (скажем, совместно с Argo Rollouts), можно получить реальный profit.

Ну и прозрачная с точки зрения остальной инфраструктуры система настроек кто-к-кому-имеет-право-обращаться, подпёртая сертификатами, должна, по-идее, радовать безопасников.

А вот если бы вы поделились с общественностью деталями «словили кучу проблем с ним», было бы здорово.
Вам может быть интересно
Управление API представляет собой ряд процессов, позволяющих создавать и публиковать интерфейсы программирования веб-приложений, обеспечивающие связь данных и приложений.Руководство от разработчиков к...
Наборы разработки программного обеспечения – сокращенно SDK – это ключевой инстр...
Традиционные решения для управления API с трудом с...
Изучите изменяемую инфраструктуру и неизменяемые с...
В современной разработке большая часть приложений ...
В этой публикации специалисты из DST Global предст...
Десятилетие совершенства: путь, влияние и будущее ...
В статье подчеркивается важность создания комплекс...
Микросервисы — это тип архитектуры, который ...
Как пользоваться Github? Разработчики компании DST...

Новые комментарии

Сегодня специалисты разных сфер внедряют LLM в свои повседневные задачи. С их по...
Параметры LLM можно сравнить с нейронными связями: чем их больше, тем “умнее” мо...
Насколько понимаю самые популярные опенсорсные модели сегодня: — GPT-J: ра...

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон