Maesh — новый простой service mesh для Kubernetes от авторов Traefik

На этой неделе компания Containous, хорошо известная в сообществе cloud native (Kubernetes и других проектов CNCF) благодаря своему продукту Traefik, анонсировала новое Open Source-решение категории service mesh — Maesh.

tcjstgcltyvcsetqzug5rocotgk.jpeg

Основная идея Maesh сводится к тому, что эта «сервисная сетка» с самого начала создаётся как максимально простая во всём: и в установке, и в использовании. Технически новое решение основывается на том же Traefik и написано на языке Go. Исходный код распространяется на условиях свободной лицензии Apache License v2.

Maesh поддерживает стандартный интерфейс для реализации service mesh’ей в Kubernetes — SMI — и по умолчанию не активируется для уже существующих в кластере сервисов, позволяя подключать их к «сетке» по мере необходимости.

Реализация Maesh не использует sidecar-контейнеры — таким образом, ни объекты в Kubernetes, ни трафик не модифицируются незаметно для вас. Вместо этого управление трафиком осуществляется через proxy endpoints, запущенные на каждом узле K8s-кластера. Контроллер Maesh запускается как отдельный pod, отвечающий за обработку конфигурации и развёртывание всего необходимого в кластере.

w1lkuy5ohdlcg3dbgh08gcehct8.png

Для своей работы 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.


Читайте также в нашем блоге:

© Habrahabr.ru