Мы рады представить предварительную версию NGINX Service Mesh (NSM), связанную легковесную service mesh, использующую data plane на основе NGINX Plus для управления трафиком контейнеров в окружениях Kubernetes.


NSM можно бесплатно скачать здесь. Мы надеемся, что вы попробуете его использовать для dev и test окружений — и ждем ваших отзывов на GitHub.


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


NSM решает эти проблемы, предоставляя вам в первую очередь:


  • Безопасность, которая сейчас важнее чем когда-либо. Утечка данных может стоить компании миллионы долларов ежегодно в виде потерь доходов и репутации. NSM обеспечивает шифрование всех соединений с помощью mTLS — так что чувствительных данных, которые могут украсть взломщики по сети, просто нет. Контроль доступа п��зволяет вам задать политики, как сервисы будут общаться с другими сервисами.
  • Управление трафиком. При поставке новой версии приложения вы возможно захотите для начала ограничить ему входящий трафик на случай ошибки. С помощью интеллектуального управления трафиком контейнеров от NSM вы можете задать политику ограничения трафика новым сервисам, которая будет наращивать трафик с течением времени. Другие функции, например ограничение скорости и circuit breakers, дают вам полный доступ к управлению прохождения трафика всем вашим сервисам.
  • Визуализация. Управление тысячами сервисов может быть кошмаром отладки и визуализации. NSM помогает справиться с такой ситуацией с помощью встроенной панели управления Grafana, на которой отображаются все характеристики, доступные в NGINX Plus. А также внедренная Open Tracing позволяет детально следить за транзакциями.
  • Гибридные поставки, если ваша компания, как и большинство других, не использует инфраструктуру, полностью запущенную на Kubernetes. NSM гарантирует, что старые приложения не останутся без присмотра. С помощью внедренного NGINX Kubernetes Ingress Controller старые сервисы смогут связаться с mesh сервисами, и наоборот.

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


Как устроен NGINX Service Mesh?


NSM состоит из объединенного data plane для горизонтального (сервис-к-сервису) трафика и внедренного NGINX Plus Ingress Controller для вертикального, управляемые единым control plane.


Control plane специально разработана и оптимизирована для NGINX Plus data plane, определяет правила управления трафиком, распределенные по NGINX Plus sidecars.


В NSM sidecars proxy устанавливаются для каждого сервиса в mesh. Они взаимодействуют с следующими решениями с открытым исходным кодом:


  • Grafana, визуализация параметров Prometheus, встроенная панель NSM помогает вам при работе;
  • Kubernetes Ingress Controllers, для управления входящим и исходящим трафиком в mesh;
  • SPIRE, CA для управления, распределения и обновления сертификатов в mesh;
  • NATS, масштабируемая система отправки сообщений, например обновления маршрутов, с control plane к sidecars;
  • Open Tracing, распределенная отладка (поддерживаются Zipkin и Jaeger);
  • Prometheus, сбор и хранение характеристик от NGINX Plus sidecars, например число запросов, соединений и SSL handshakes.

Функции и компоненты


NGINX Plus в качестве data plane охватывает sidecar proxy (горизонтальный трафик) и Ingress controller (вертикальный), перехватывая и управляя трафиком контейнеров между сервисами.


Функции включают:


  • Взаимную аутентификацию TLS (mTLS);
  • Балансировку нагрузки;
  • Отказоустойчивость;
  • Ограничение скорости;
  • Circuit breaking;
  • Сине-зеленые и канареечные развертывания;
  • Контроль доступа.

Запуск NGINX Service Mesh


Для запуска NSM нужно:


  • доступ к окружению Kubernetes. NGINX Service Mesh поддерживается на многих платформах Kubernetes, включая Amazon Elastic Container Service for Kubernetes (EKS), Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), VMware vSphere и обычные кластера Kubernetes, развернутые на "железных" серверах;
  • Инструмент kubectl, установленный на машине, откуда будет устанавливаться NSM;
  • Доступ к пакетам выпусков NGINX Service Mesh. В пакете есть образы NSM, нужные для выгрузки в закрытую registry для контейнеров, доступную в кластере Kubernetes. Пакет также содержит nginx-meshctl, нужную для разворачивания NSM.

Для того, чтобы развернуть NSM с настройками по умолчанию, запустите следующую команду. Во время развертывания выводятся сообщения об успешной установке компонентов и, наконец, сообщение о том, что NSM работает в отдельном пространстве имен (для начала надо его скачать и поместить в registry, прим. переводчика):


$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; \
 ./nginx-meshctl deploy  \
  --nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" \
  --nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" \
  --nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" \
  --nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server...

Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.

Для получени�� дополнительных параметров, включая расширенные настройки, запустите эту команду:


$ nginx-meshctl deploy –h

Проверить, что control plane работает корректно в пространстве имен nginx-mesh, можно так:


$ kubectl get pods –n nginx-mesh
NAME                                 READY   STATUS    RESTARTS   AGE
grafana-6cc6958cd9-dccj6             1/1     Running   0          2d19h
mesh-api-6b95576c46-8npkb            1/1     Running   0          2d19h
nats-server-6d5c57f894-225qn         1/1     Running   0          2d19h
prometheus-server-65c95b788b-zkt95   1/1     Running   0          2d19h
smi-metrics-5986dfb8d5-q6gfj         1/1     Running   0          2d19h
spire-agent-5cf87                    1/1     Running   0          2d19h
spire-agent-rr2tt                    1/1     Running   0          2d19h
spire-agent-vwjbv                    1/1     Running   0          2d19h
spire-server-0                       2/2     Running   0          2d19h
zipkin-6f7cbf5467-ns6wc              1/1     Running   0          2d19h

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


Например если мы развернем приложение sleep в пространстве имен default, а затем проверим Pod — увидим два запущенных контейнера, приложение sleep и связанный с ним sidecar:


$ kubectl apply –f sleep.yaml
$ kubectl get pods –n default
NAME                     READY   STATUS    RESTARTS   AGE
sleep-674f75ff4d-gxjf2   2/2     Running   0          5h23m

Также мы можем следить за приложением sleep в панели NGINX Plus, запуская эту команду для получения доступа к sidecar с вашей локальной машины:


$ kubectl port-forward sleep-674f75ff4d-gxjf2 8080:8886

Затем просто заходим сюда в браузере. Вы также можете соединиться с Prometheus чтобы следить за приложением sleep.


Вы можете использовать отдельные ресурсы Kubernetes для настройки политик трафика, например контроля доступа, ограничения скорости и circuit breaking, для этого смотрите документацию


Заключение


NGINX Service Mesh бесплатно доступна для загрузки на портале F5. Попробуйте ее в работе на ваших dev и test окружениях и напишите нам о результатах.


Чтобы попробовать NGINX Plus Ingress Controller, активируйте бесплатный испытательный период на 30 дней, или свяжитесь с нами ��ля обсуждения ваших вариантов использования.


Перевод в авторстве Павла Демковича, инженера компании Southbridge. Системное администрирование за 15 000 ₽ в месяц. И как отдельное подразделение — обучающий центр Слёрм, практика и ничего, кроме практики.