На этой неделе компания Containous, хорошо известная в сообществе cloud native (Kubernetes и других проектов CNCF) благодаря своему продукту Traefik, анонсировала новое Open Source-решение категории service mesh — Maesh.
Основная идея Maesh сводится к тому, что эта «сервисная сетка» с самого начала создаётся как максимально простая во всём: и в установке, и в использовании. Технически новое решение основывается на том же Traefik и написано на языке Go. Исходный код распространяется на условиях свободной лицензии Apache License v2.
Maesh поддерживает стандартный интерфейс для реализации service mesh'ей в Kubernetes — SMI — и по умолчанию не активируется для уже существующих в кластере сервисов, позволяя подключать их к «сетке» по мере необходимости.
Реализация Maesh не использует sidecar-контейнеры — таким образом, ни объекты в Kubernetes, ни трафик не модифицируются незаметно для вас. Вместо этого управление трафиком осуществляется через proxy endpoints, запущенные на каждом узле K8s-кластера. Контроллер Maesh запускается как отдельный pod, отвечающий за обработку конфигурации и развёртывание всего необходимого в кластере.
Для своей работы Maesh требует наличия CoreDNS (поддерживаются версии 1.3+) в качестве DNS-провайдера в кластере Kubernetes: это позволяет использовать endpoint'ы по соседству с пользовательскими сервисами, не требуя запуска sidecar-контейнеров. Поддерживаемые версии самого Kubernetes — 1.11+ (также потребуется наличие Helm v2).
С точки зрения сетевых особенностей, в Maesh поддерживаются два режима:
- HTTP (тогда используются фичи Traefik),
- TCP (в нём обеспечивается простая интеграция с SNI).
Благодаря тому, что «под капотом» Maesh задействована кодовая база Traefik, в новом решении доступны многие его возможности: контроль доступом, rate limits, circuit breakers, повторные попытки, балансировка нагрузки для HTTP, gRPC, WebSocket, трассировка с OpenTracing и т.п.
Начать использовать Maesh в Kubernetes-кластере действительно очень просто. Для этого достаточно установить его Helm-чарт:
$ helm repo add maesh https://containous.github.io/maesh/charts
$ helm repo update
$ helm install --name=maesh --namespace=maesh maesh/maesh
… и поставить аннотацию, активирующую его работу для выбранного сервиса:
$ kubectl annotate service
web-application maesh.containo.us/traffic-type=http
… или же такую — для сервиса с TCP вместо HTTP:
$ kubectl annotate service mongo-database
maesh.containo.us/traffic-type=tcp
Подробнее — смотрите в документации проекта.
P.S.
Читайте также в нашем блоге:
- «Назад к микросервисам вместе с Istio»: часть 1 (знакомство с основными возможностями), часть 2 (управление трафиком), часть 3 (аутентификация и авторизация);
- «Conduit — легковесный service mesh для Kubernetes»;
- «Что такое service mesh и почему он мне нужен [для облачного приложения с микросервисами]?».
Автор: shurup