[Перевод] Доступен NGINX Service Mesh
Мы рады представить предварительную версию 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 работает в отдельном пространстве имен:
$ 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 ₽ в месяц. И как отдельное подразделение — обучающий центр Слёрм, практика и ничего, кроме практики.