Руководство по установке#

В руководстве приведены инструкции по установке компонента Synapse Rate Limiter (SRLS) продукта Synapse Enterprise Integration (SEI).

Термины и определения#

Термин/Аббревиатура

Определение

API

Application Programming Interface

CPU

Central Processing Unit, центральный процессор

Endpoint

Сетевая точка, обеспечивающая взаимодействие с поставщиком

GATM

Программный компонент Сбор и анализ метрик (GATM) продукта Platform V Synapse Service Mesh (SSM)

gRPC

Современная высокопроизводительная платформа, которая используется для развития устаревшего протокола удаленного вызова процедур (RPC)

Ingress Gateway

Ресурс Istio, который описывает правила маршрутизации и балансировки входящих запросов. Альтернатива K8s Ingress, настраивается через ресурсы Gateway, Virtual Service и при необходимости DestinationRule

K8s

Kubernetes, платформа с открытым исходным кодом для управления кластерами приложений и сервисами на основе контейнеров

OpenSSL

Криптографическая библиотека с открытым исходным кодом и инструментарий SSL

OS

OpenShift, открытая и расширяемая платформа приложений-контейнеров

RL Operator

Компонент SRLS, обеспечивающий конфигурирование Ingress Gateway в соответствии с CRD в runtime

RL Service

Компонент SRLS, сервис расчета лимитов, принимает gRPC-запросы от Ingress Gateway в прикладных namespace, содержащих информацию о домене (в качестве домена используется название namespace), о вызываемом сервисе и данные из заголовка synapse-consumerid

Runtime

Время выполнения

SRLS (SRL)

Программный компонент Synapse Rate Limiter Service (Synapse Rate Limit), сервис ограничения (квотирования) входящих запросов, необходим для ограничения прикладной нагрузки (payload) со стороны потребителя на защищаемые сервисы, исполняемые в рамках Synapse Service Mesh

TPS

Transactions per second, транзакций в секунду

Deploy Tools

Программный компонент, предназначенный для автоматизации развертывания и автоматической установки технологических сервисов и бизнес-приложений на тестовых и промышленных стендах (CDJE), программного продукта Platform V DevOps Tools (DOT)

Unimon

Программный компонент Объединенный мониторинг Unimon (MONA) программного продукта Platform V Monitor (OPM)

Децентрализованный Rate Limit

Компонент Rate Limit, специфичный для одного namespace

Pod

Набор контейнеров внутри узла кластера Kubernetes или Red Hat OpenShift (опционально)

ТУЗ

Технологическая учетная запись

SecMan

Система управления секретами Secret Management System

Системные требования#

Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.

Системное программное обеспечение#

Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.

Категория ПО

Обязательность установки (да/нет)*

Наименование ПО

Версия

Продукт, функциональная совместимость с которым подтверждена**

Описание

Операционная система

Да

ОС Альт 8 СП

10.0 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендована ОС – Platform V SberLinux OS Server), см. раздел «Платформенные зависимости»

ОС контейнеров для запуска модулей компонента

Red Hat Enterprise Linux

7.9.9 и выше

Опционально

Среда контейнеризации

Да

Kubernetes

1.25 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp, см. раздел «Платформенные зависимости»

Платформа контейнеризации для запуска компонентов сервиса

Red Hat OpenShift

4.8 и выше

Опционально

Средство контейнеризации

Да

Docker CE

1.13.1 и выше

Рекомендовано

Инструмент для автоматизации работы с контейнерами

Инструмент сборки, тестирования, развертывания контейнеризированных приложений

Нет

Jenkins

2.346.0 и выше

Рекомендовано

Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения

Брокер сообщений

Нет

Kafka

3.4.0 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован брокер сообщений, основанный на Kafka, – Platform V Corax, см. раздел «Платформенные зависимости»

Событийный обмен сообщениями между модулями компонента

Сервис интеграции и оркестрации микросервисов в облаке

Да

Istio

1.17 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio, – Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости»

Сервис интеграции микросервисов в облаке

Хранилище данных

Да

Redis

6.2.7 и выше

Рекомендовано. Образы, с которыми была проверена работоспособность компонента SRLS: docker.io/library/redis:6.0.9, docker.io/library/redis:6.2.11, docker.io/library/redis:7.0.10

Внешний распределенный кеш используется для корректного подсчета лимитов для сервиса, запущенного более чем в одном экземпляре

Система мониторинга (сбор и хранение метрик)

Нет

Prometheus

2.37.0 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендован Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости»

Система для сбора и хранения численных метрик

Система мониторинга (визуализация)

Нет

Grafana

9.5 и выше

Рекомендовано

Система для визуализации численных метрик (предоставленных, например, Prometheus)

Система управления секретами

Нет

Secret Management System

1.10.0 и выше

Рекомендовано

Система управления аутентификационными данными сервисных аккаунтов или учетных записей

Средство упаковки

Нет

Helm

3.13.0 и выше

Рекомендовано

Средство упаковки с открытым исходным кодом, которое помогает установить приложения Kubernetes и управлять их жизненным циклом

Здесь и далее поддерживаемой системой приложений-контейнеров является Kubernetes (использование Red Hat OpenShift – опционально). В именах и параметрах системы, в названиях переменных, настроек могут встречаться названия (в т.ч. сокращения) систем контейнеризации, которые одинаково применимы для обеих сред контейнеризации.

Примечание:

*

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

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

**

  • Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.

  • Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.

Платформенные зависимости#

Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:

Наименование продукта

Код

Версия продукта

Код и наименование компонента

Обязательность установки (да/нет)***

Описание

Аналог других производителей****

Platform V Monitor

OPM

1.2 и выше до потери обратной совместимости

LOGA Журналирование

Нет

Сервис для хранения лог-файлов

Любой сервис сбора записей о событиях, совместимый с fluent-bit, например: Elasticsearch, InfluxDB

MONA Объединенный мониторинг Unimon

Нет

Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения

Prometheus 2.37.0

INDA Indicator

Нет

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

Grafana 7.5

Platform V DevOps Tools

DOT

1.3

CDJE Deploy tools

Нет

Сервис для развертывания и обновления компонентов Платформы и приложений потребителей, для настройки и обслуживания инфраструктуры Платформы

Ручное развертывание

Platform V Synapse Service Mesh

SSM

3.9.1 и выше до потери обратной совместимости

POLM Управление политиками

Нет

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

Istio control plane 1.17

GATM Сбор и анализ метрик

Нет

Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения

Prometheus 2.37.0

Platform V SberLinux OS Server

SLO

8.7 и выше

INST Операционная система

Нет

ОС контейнеров для запуска модулей компонента

ОС Альт 8 СП

Platform V DropApp

K8S

1.1 и выше

K8SC K8S Core

Нет

Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением

Kubernetes, Red Hat OpenShift Container Platform

Platform V Corax

KFK

8.340.1 и выше

KFKA Kafka Sber Edition

Нет

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

Kafka 3.4.0

Примечание:

***

  • Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).

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

**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».

Аппаратные требования#

Для установки компонента требуется следующая конфигурация аппаратного обеспечения:

  1. Квота для установки централизованного варианта SRLS:

    1. количество ядер процессора — 5 ядер;

    2. объем оперативной памяти — 10 ГБ.

  2. Квота для установки централизованного варианта SRLS c TLS-шифрованием:

    1. количество ядер процессора — 6 ядер;

    2. объем оперативной памяти — 12 ГБ.

  3. Квота для установки децентрализованного варианта SRLS:

    1. количество ядер процессора — 3 ядра;

    2. объем оперативной памяти — 8 ГБ.

Для работы программного компонента в среде контейнеризации Kubernetes или Red Hat OpenShift 4.8 (опционально) необходимы следующие ресурсы:

  • для компонента RL Operator (на 1 Pod, без учета fluent-bit sidecar и istio sidecar):

CPU

Memory

Limits

200m

200Mi

Requests

100m

100Mi

  • для компонента RL Service (на 1 Pod, без учета fluent-bit sidecar и istio sidecar):

CPU

Memory

Limits

500m

300Mi

Requests

250m

150Mi

  • для Redis (на 1 Pod):

Redis/Redis Sentinel

CPU

Memory

Limits

300m/200m

500Mi/200Mi

Requests

150m/100m

250Mi/100Mi

  • для Egress Gateway (на 1 Pod) — при централизованном варианте SRLS c TLS-шифрованием:

CPU

Memory

Limits

600m

900Mi

Requests

400m

700Mi

Методика расчета сайзинга#

Оценить производительность программного компонента SRLS можно по результатам нагрузочного тестирования. Были проведены тесты. Результаты:

CPU, m

Memory, Mi

TPS

Ingress с включенным SRLS

RLS

Ingress с выключенным SRLS

Ingress с включенным SRLS

RLS

Ingress с выключенным SRLS

300

280

170

188

700

150

700

400

345

210

247

700

150

700

500

424

248

296

700

150

700

600

487

281

360

700

150

700

На промежутке TPS, который был выбран для тестирования, отличие от линейной функции будет незначительное, поэтому по полученным результатам тестирования на основе линейной функции (x*a+b) аппроксимировали следующие формулы для расчета требуемых ресурсов CPU и Memory для Ingress и RLS в зависимости от интенсивности нагрузки (TPS):

CPU

  • Ingress включенным SRLS) = Целевой TPS*0,7+69;

  • Ingress выключенным SRLS) = Целевой TPS*0,565+18,5;

  • RLS= Целевой TPS*0,371+60,3.

Memory — значения не изменяются (рост памяти не звафиксирован при изменении TPS):

  • Ingress = 700;

  • RLS = 150.

Необходимые ресурсы для компонента SRLS:

CPU, m

Memory, Mi

Целевой TPS

RLS

Ingress Gateway

RLS

Ingress Gateway

500

245,8

419

150

700

1100

468,4

839

150

700

1700

691

1259

150

700

Состав дистрибутива#

Элемент дистрибутива

Описание

./bh/ratelimit

Исполняемый файл RL Service

./bh/rloperator

Исполняемый файл RL Operator

Выбор способа установки#

В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:

  • ручная установка сервиса;

  • автоматизированная установка сервиса с использованием Deploy Tools;

  • автоматическая установка по агентской схеме;

  • автоматизированная установка сервиса с использованием Synapse Installer.

Подготовка окружения#

  1. Namespace, в который требуется установить компонент SRLS, должен быть подключен к Istio: убедиться, что в namespace существуют стандартные Config Map Istio с именами istio-ca-root-cert, istio-basic (если нет, то добавить).

  2. Убедиться, что в namespace существует ServiceAccount c именем default (если нет, то добавить).

  3. Для доступа к образам из среды контейнеризации к Docker-registry требуется создать ImagePullSecret (<дистрибутив>/package/conf/k8s/base/secrets/rls-image-pull-secret.yaml), для этого нужно подготовить JSON вида:

{"auths":{"registry.local.host.ru":{"username":"user","password":"pass","auth":"auth-b64","email":""}}}

Здесь:

  • user — учетная запись для доступа к registry.local.host.ru;

  • pass — пароль учетной записи;

  • auth-b64 — base64 от строки в формате user:pass.

Заполнить поле .dockerconfigjson получившимся JSON:

kind: Secret
apiVersion: v1
metadata:
  name: rls-image-pull-secret
  namespace: ${rls_namespace}
data:
  .dockerconfigjson: >-
type: kubernetes.io/dockerconfigjson
  1. Связать секрет rls-image-pull-secret с ServiceAccount, который используется для скачивания образов. Пример команды для Kubernetes:

    kubectl secrets link default rls-image-pull-secret --for=pull -n <namespace>

Здесь namespace — уникальное имя пространства.

Пример команды для OpenShift:

oc secrets link default rls-image-pull-secret --for=pull

  1. Создать или обновить артефакт CustomResourceDefinition в среде контейнеризации Kubernetes или Red Hat OpenShift (опционально).

Пользовательские ресурсы являются расширением API Kubernetes. Артефакт CustomResourceDefinition (сокращенно CRD) позволяет определять пользовательские ресурсы — указать тип и схему ресурса. Добавление артефакта CRD позволяет затем использовать новые пользовательские ресурсы.

В нашем случае для артефактов типа GlobalRateLimit необходимо добавить следующий СRD: артефакт CRD.

В некоторых случаях для добавления CRD администраторы требуют артефакт типа CRDProxy, где в поле data размещен непосредственно CRD.

apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
  name: crdproxy-globalratelimits-ratelimit-service
  namespace: ${rls_namespace}
serviceAccount:
  - rate-limiter-service
data: |-
  < содержимое нашего артефакта СRD >

Централизованный вариант развертывания#

Сертификаты для Egress Gateway#

Необходимо подготовить сертификаты для Egress Gateway (ca-root.pem, egress.key, egress.pem, kafka-ca.pem, kafka.key, kafka.pem), рекомендуемая утилита для генерации и выпуска сертификатов — OpenSSL.

Для хранения «чувствительной» информации с точки зрения безопасности целевым подходом является интеграция с Secret Management System (далее SecMan).

  • Вариант установки с SecMan.

Добавить необходимые сертификаты в Key-Value хранилище. Структура секрета в хранилище в формате JSON:

{
    "ca": "-----BEGIN CERTIFICATE-----<...>-----END CERTIFICATE-----\n",
    "crt": "-----BEGIN CERTIFICATE-----<...>-----END CERTIFICATE-----\n",
    "key": "-----BEGIN RSA PRIVATE KEY-----<...>-----END RSA PRIVATE KEY-----\n"
    "ttl": "3m"
}

Ключи в хранилище должны соответствовать указанным:

Название ключа

Описание

ca

Ключ для корневого сертификата (ca-root.pem, kafka-ca.pem)

crt

Ключ для серверного сертификата (egress.pem, kafka.pem)

key

Ключ для приватного ключа сертификата (egress.key, kafka.key)

ttl

Ключ для времени жизни секрета (определяет период обновления в реальном времени секрета в Pod)

  • Вариант установки без SecMan.

Добавить в Kubernetes или Red Hat OpenShift (опционально) секрет egress-secrets. Секрет может быть создан с помощью инструмента командной строки или через файл манифеста Secret.

Пример команды для Kubernetes:

   kubectl create secret generic egress-secrets \
                --from-file=ca-root.pem=ca-root.pem \
                --from-file=egress.key=egress.key \
                --from-file=egress.pem=egress.pem \
                -n <namespace>

   kubectl create secret generic egress-kafka-cert \
                --from-file=ca-root.pem=kafka-ca.pem \
                --from-file=egress.key=kafka.key \
                --from-file=egress.pem=kafka.pem \
                -n <namespace>

Здесь namespace — уникальное имя пространства.

Пример команды для OpenShift:

   oc create secret generic egress-secrets \
                --from-file=ca-root.pem=ca-root.pem \
                --from-file=egress.key=egress.key \
                --from-file=egress.pem=egress.pem

   oc create secret generic egress-kafka-cert \
                --from-file=ca-root.pem=kafka-ca.pem \
                --from-file=egress.key=kafka.key \
                --from-file=egress.pem=kafka.pem

Пример манифестов:

kind: Secret
apiVersion: v1
metadata:
  name: egress-secrets
  namespace: ${rls_namespace}
data:
  ca-root.pem: >-

  egress.key: >-

  egress.pem: >-

type: Opaque
kind: Secret
apiVersion: v1
metadata:
  name: egress-kafka-cert
  namespace: ${rls_namespace}
data:
  kafka-ca.pem: >-

  kafka.key: >-

  kafka.pem: >-

type: Opaque

Здесь поля ca-root.pem, egress.key, egress.pem, kafka-ca.pem, kafka.key, kafka.pem должны быть заполнены данными из соответствующих файлов в base64-кодировке.

Пример команды для получения данных в формате base64:

base64 -w 0 ca-root.pem

Сертификаты для RL Service#

Если планируется использование шифрования трафика между граничным прокси и централизованным RL Service, необходимо подготовить сертификаты для RL Service (ca-root.pem, server.key, server.pem). Рекомендуемая утилита для генерации и выпуска сертификатов — OpenSSL.

Для хранения «чувствительной» информации с точки зрения безопасности целевым подходом является интеграция с Secret Management System (далее SecMan).

  • Вариант установки с SecMan.

Добавить необходимые сертификаты в Key-Value хранилище. Структура секрета в хранилище в формате JSON:

{
    "ca": "-----BEGIN CERTIFICATE-----<...>-----END CERTIFICATE-----\n",
    "crt": "-----BEGIN CERTIFICATE-----<...>-----END CERTIFICATE-----\n",
    "key": "-----BEGIN RSA PRIVATE KEY-----<...>-----END RSA PRIVATE KEY-----\n"
    "ttl": "3m"
}

Ключи в хранилище должны соответствовать указанным:

Название ключа

Описание

ca

Ключ для корневого сертификата (ca-root.pem)

crt

Ключ для серверного сертификата (server.pem)

key

Ключ для приватного ключа сертификата (server.key)

ttl

Ключ для времени жизни секрета (определяет период обновления в реальном времени секрета в Pod)

  • Вариант установки без SecMan.

Добавить в Kubernetes или Red Hat OpenShift (опционально) секрет rate-limiter-secrets. Секрет может быть создан с помощью инструмента командной строки или через файл манифеста Secret.

Пример команды для Kubernetes:

   kubectl create secret generic rate-limiter-secrets \
                --from-file=ca-root.pem=ca-root.pem \
                --from-file=egress.key=server.key \
                --from-file=egress.pem=server.pem \
                -n <namespace>

Здесь namespace — уникальное имя пространства.

Пример команды для OpenShift:

   oc create secret generic rate-limiter-secrets \
                --from-file=ca-root.pem=ca-root.pem \
                --from-file=egress.key=server.key \
                --from-file=egress.pem=server.pem

Пример манифеста:

kind: Secret
apiVersion: v1
metadata:
  name: rate-limiter-secrets
  namespace: ${rls_namespace}
data:
  ca-root.pem: >-

  server.key: >-

  server.pem: >-

type: Opaque

Здесь поля ca-root.pem, server.key, server.pem должны быть заполнены данными из соответствующих файлов в base64-кодировке.

Пример команды для получения данных в формате base64:

base64 -w 0 ca-root.pem

Ролевая модель централизованного варианта развертывания#

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

Артефакт

API группа

Права

Описание

globalratelimits

ratelimit.service

- get - list - watch

Права предоставляются на уровне кластера K8s

globalratelimits/status globalratelimits/finalizers

ratelimit.service

- get - list - watch - update - patch

Права предоставляются на уровне кластера K8s

namespaces

- list

Права предоставляются на уровне кластера K8s

leases

coordination.k8s.io

- get - update - patch

Права предоставляются на уровне namespace, в котором развертывается централизованный SRLS

events

- create

Права предоставляются на уровне namespace, в котором развертывается централизованный SRLS

envoyfilters

networking.istio.io

- get - list - watch - create - update - patch - delete

Права предоставляются на уровне namespace, в котором развертывается прикладной дистрибутив; в артефакте RoleBinding необходимо указать ServiceAccount в namespace централизованного SRLS

Ниже приведены артефакты, необходимые для настройки прав доступа (актуальные артефакты доступны в <дистрибутив>/package/conf/k8s/base/other/operator-role):

  • ServiceAccount

kind: ServiceAccount
apiVersion: v1
metadata:
  name: rate-limiter-service
  namespace: ${rls_namespace}
  • ClusterRole

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rate-limiter-service-operator
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ratelimit.service
    resources:
      - globalratelimits
  - verbs:
      - get
      - list
      - watch
      - update
      - patch
    apiGroups:
      - ratelimit.service
    resources:
      - globalratelimits/status
      - globalratelimits/finalizers
  - verbs:
      - list
    apiGroups:
      - ''
    resources:
      - namespaces
  • ClusterRoleBinding

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rloperator-crb-${rls_namespace}
subjects:
  - kind: ServiceAccount
    name: rate-limiter-service
    namespace: ${rls_namespace}
roleRef:
  kind: ClusterRole
  name: rate-limiter-service-operator
  apiGroup: rbac.authorization.k8s.io
  • Lease (если не создается в рамках установки через Deploy Tools)

apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
  name: srls-operator-lock
  namespace: ${rls_namespace}
  labels:
    app: rloperator
    proj: synapse-rls
    agent: srls
  • Role

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: srls-operator-role
  namespace: ${rls_namespace}
rules:
  - verbs:
      - get
      - update
      - patch
    apiGroups:
      - 'coordination.k8s.io'
    resources:
      - leases
    resourceNames:
      - srls-operator-lock
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
  • RoleBinding

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rloperator-rb
  namespace: ${rls_namespace}
subjects:
  - kind: ServiceAccount
    name: rate-limiter-service
    namespace: ${rls_namespace}
roleRef:
  kind: Role
  name: srls-operator-role
  apiGroup: rbac.authorization.k8s.io
  • ClusterRole

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: srls-role
rules:
  - verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
    apiGroups:
      - networking.istio.io
    resources:
      - envoyfilters

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

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: srls-role-binding
  namespace: ${namespace}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: srls-role
subjects:
- kind: ServiceAccount
  name: rate-limiter-service
  namespace: ${rls_namespace}

Сетевая видимость RL Service в рамках кластера#

Для обеспечения возможности подключения к Pod RL Service из других namespace необходимо создать артефакт (актуальный шаблон артефакта расположен в <дистрибутив>/package/conf/k8s/base/other/network-policy.yaml):

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: rlservice
  namespace: ${rls-namespace}
spec:
  podSelector:
    matchLabels:
      app: rls
      proj: synapse-rls
  ingress:
    - ports:
        - protocol: TCP
          port: 8081
      from:
        - podSelector:
            matchLabels:
              srls: ratelimit
          namespaceSelector: {}
  policyTypes:
    - Ingress

Артефакт разрешает входящий трафик в namespace централизованного SRLS к Pod RL Service по порту 8081 из других namespace, но только для Pod, у которых есть label srls: ratelimit. Данный подход позволяет сократить время на запрос к RL Service за счет прямого обращения, минуя Egress Gateway и Ingress Gateway.

Децентрализованный вариант развертывания#

Ролевая модель децентрализованного варианта развертывания#

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

Артефакт

API группа

Права

Описание

globalratelimits

ratelimit.service

- get - list - watch

Права предоставляются на уровне прикладного namespace

globalratelimits/status globalratelimits/finalizers

ratelimit.service

- get - list - watch - update - patch

Права предоставляются на уровне прикладного namespace

namespaces

- list

Права предоставляются на уровне прикладного namespace

leases

coordination.k8s.io

- get - update - patch

Права предоставляются на уровне прикладного namespace

events

- create

Права предоставляются на уровне прикладного namespace

envoyfilters

networking.istio.io

- get - list - watch - create - update - patch - delete

Права предоставляются на уровне прикладного namespace

При автоматизированном создании артефактов EnvoyFilter компонентом RL Operator в процессе обработки артефакта GlobaLRateLimit (в параметре disable_envoy_filter_automation установлено значение false) EnvoyFilters создаются для версии Envoy 1.25 и выше. Если в артефакте GlobaLRateLimit в параметре envoyVersion указана версия ниже 1.25, то артефакты EnvoyFilter не будут созданы и в статусе будет ошибка envoy version not supported.

Возможен вариант развертывания, при котором не производится автоматизированное создание артефактов EnvoyFilter. В этом случае необходимо выбрать соответствующий артефакт Role, установить значение true стендозависимого параметра disable_envoy_filter_automation и создать необходимые для работы артефакты EnvoyFilter самостоятельно. Инструкция по созданию артефакта EnvoyFilter описана в документе «Руководство прикладного разработчика» в разделе «Конфигурирование артефактов среды контейнеризации и Istio для децентрализованного варианта развертывания».

Ниже приведены артефакты, необходимые для настройки прав доступа (актуальные артефакты доступны в <дистрибутив>/package/conf/k8s/base/operator-role/other):

  • ServiceAccount

kind: ServiceAccount
apiVersion: v1
metadata:
  name: rate-limiter-service
  namespace: ${namespace}
  • Role с поддержкой автоматизированного создания артефакта EnvoyFilter: srls-decentr-operator-role.yaml.

  • Role без поддержки автоматизированного создания артефакта EnvoyFilter (опционально): srls-decentr-operator-role.yaml.

  • Lease (если не создается в рамках установки через Deploy Tools)

apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
  name: srls-operator-lock
  namespace: ${namespace}
  labels:
    app: rloperator
    proj: synapse-rls
    agent: srls
  • RoleBinding

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rloperator
  namespace: ${namespace}
subjects:
  - kind: ServiceAccount
    name: rate-limiter-service
    namespace: ${namespace}
roleRef:
  kind: Role
  name: srls-decentr-operator-role
  apiGroup: rbac.authorization.k8s.io

Установка#

Важно!

С версии 3.11 осуществлен переход на установку с помощью Helm Chart!

Параметры установки#

Параметры шаблонизации расположены в <дистрибутив>/package/conf/helm/application/srls/values.yaml.

Название

Описание

Значение по умолчанию

registry

Cсылка до registry, если не задано администратором в настройках инструмента развертывания/распаковки

docker-registy.mydomain.com

registry_path_srls

Базовый путь до каталога с образами, если не задано администратором в настройках инструмента развертывания/распаковки

public

FLUENT_BIT_SIDECAR_ENABLED

Если True, то RL Operator и RL Service будут запущены с sidecar fluent-bit

False

SRLS_LOG_SENDER_ENABLED

Если True, то RL Operator и RL Service будут отправлять свои логи в Kafka

False

TENANT_CODE

Код тенанта, используемый в конфигурации fluent-bit ufs-logger, определяется в настройках инструмента развертывания/распаковки

-

SRLS_TLS_ENABLED

Включить TLS-шифрование на RL Service

False

SRLS_TENANT_CODE

Код тенанта, используемый в конфигурации fluent-bit ufs-logger, если в настройках инструмента развертывания/распаковки не задан параметр TENANT_CODE

SRLS

POD_DISRUPTION_BUDGET_ENABLED

Если True, то будут созданы артефакты PodDisruptionBudget; чтобы выключить, нужно указать False

True

DEPLOY_TO_KUBERNETES

Для совместимости с Kubernetes и Platform V DropApp

False

DEPLOY_LEASE_ENABLED

Разворачивать или нет артефакт Lease в составе дистрибутива

False

SECMAN_ENABLED

Если True, настраивается интеграция с SecMan, если False, сертификаты берутся из артефакта Secret

True

SECMAN_NAMESPACE_ENABLED

Поддержка пространств в хранилище SecMan

False

SECRET_ENABLED

Если True, при развертывании дистрибутива устанавливаются ресурсы kind: Secret

False

DEPLOY_ACCOUNT

Если True, при развертывании дистрибутива устанавливаются ресурсы kind: ServiceAccount

False

DEPLOY_CENTR

Если True, при развертывании дистрибутива устанавливаются компоненты, необходимые для централизованного варианта развертывания, только один из параметров DEPLOY_CENTR или DEPLOY_DECENTR может принимать значение True

False

DEPLOY_DECENTR

Если True, при развертывании дистрибутива устанавливаются компоненты, необходимые для децентрализованного варианта развертывания, только один из параметров DEPLOY_CENTR или DEPLOY_DECENTR может принимать значение True

True

DEPLOY_LIMITS

Если True, при развертывании дистрибутива создается артефакт GlobalRateLimit

False

endpoints

Если значение параметра DEPLOY_LIMITS выставлено в True, в параметре endpoints необходимо указать строку в формате JSON, соответствующую секции endpoints артефакта GlobalRateLimit, описанного в разделе «Формирование и применение артефакта GlobalRateLimit» документа «Руководство прикладного разработчика»

Пример значения параметра endpoints:

[{"endpoint": "test-server2-endpoint:8080","name": "test service2","shortname": "server2","overall_limit": 100,"by_header": {"header": "synapse-consumerid","uri_prefixes": [{"uri_prefix": "/service","unit":"second","value": 5,"soft": {"step": 2,"value": 1},"anon_value": 10,"invokers": [{"header_value": "test-client-namespace2","name": "invoker_prefix_2","unit": "second","value": 10,"soft": {"step": 2,"value": 1}},{"header_value": "test-client-namespace1","name": "invoker_prefix_1","unit": "second","value": 5}]}]}},{"endpoint": "test-server-endpoint:8080","name": "test service","shortname": "server","overall_limit": -1,"by_header": {"header": "synapse-consumerid","unit": "minute","value": 5,"soft": {"step": 2,"value": 1},"anon_value": 10,"invokers": [{"header_value": "test-client-namespace2","name": "invoker2","unit": "second","value": 10,"soft": {"step": 2,"value": 1}},{"header_value": "test-client-namespace1","name": "invoker1","unit": "second","value": 5}]}},{"endpoint": "test-server3-endpoint:8080","name": "test service","shortname": "server","overall_limit": -1,"by_path": {"mask": "mask","unit": "second","quotas": {"flat": 7,"soft": {"step": 2,"value": 4}},"tenants": [{"name": "tenant1","resourceName": "rntenant1","unit": "second","quotas": {"soft": {"step": 1,"value": 2}}},{"name": "tenant2","resourceName": "rntenant2","unit": "second","quotas": {"flat": 1}}]}}]

Список стендозависимых параметров (указываются в конфигурации job) для установки и их описание представлены в таблице «Список и описание параметров». Стендозависимые параметры расположены в том же файле <дистрибутив>/package/conf/helm/application/srls/values.yaml.

ВАЖНО!
Названия стендозависимых параметров, начиная с версии компонента SRLS 2.6, отличаются от названий в предыдущих версиях.

Список и описание параметров:

Название

Описание

Пример

Примечание

rls_namespace

Имя пространства, в котором разворачиваются RL Service, RL Operator и Ingress Gateway

synapse-dev-sandbox

rls_redisUrl

Адрес подключения к Redis

mymaster,redis-sentinel-0.redis-sentinel:26379,redis-sentinel-1.redis-sentinel:26379,redis-sentinel-2.redis-sentinel:26379

Для standalone развертывания с Redis с режимом подключения SINGLE можно указать один адрес

rls_redisType

Тип работы Redis

SENTINEL

Для подключения к Redis с одной node нужно указать SINGLE

rls_localCacheSizeInBytes

Размер локального кеша

524288

rls_backend

Тип хранилища key-value для RL Service

redis

rls_logLevel

Уровень логирования для RL Service

info

rls_tls_enable

Включение/выключение шифрования TLS

false

rls_tls_client_auth

Запрос и валидация сертификатов пользователей: none — не запрашивать; must — запрашивать; want — запрашивать и валидировать

none

rls_tls_version

Минимальная версия протокола TLS

TLSv1.2

rls_tls_cipher_suites

Комбинация шифров для TLS

rls_tls_cert_path

Путь до сертификатов в контейнере RL Service

/cert

rls_tls_cert_pem

Имя файла сертификата в контейнере RL Service

server.pem

rls_tls_cert_key

Имя файла с ключом сертификата в контейнере RL Service

server.key

rls_tls_cert_ca_pem

Имя файла CA сертификата в контейнере RL Service

ca-root.pem

envoy_filter_grpc_timeout

Тайм-аут на обращение к сервису Rate Limit

1s

istiod_svc

Адрес подключения к istiod

istiod-basic.synapse-smcp20-control-plane.svc:15012

tracing_collector

Адрес подключения к сервису публикации данных о трассировке запросов

jaeger-collector.test-devpub-controlplanev2.svc:9411

redis_image

Ссылка на образ с Redis 6

docker.registry.host/registry_redhat_io/rhel8/redis-6@sha256:fe10fcc7b9734d22a18d5c96c219b2e25d7fdddd19c6292b8b2cb38b0f2f6037

redis_fsgroup

Идентификатор дополнительной группы для запуска Pod Redis и Redis Sentinel

1337

redis_run_as_user

Идентификатор пользователя для запуска Pod Redis и Redis Sentinel

1337

operator_backend

Тип хранилища key-value для RL Operator

redis

operator_redisType

Тип работы Redis

SENTINEL

Для подключения к Redis с одной node нужно указать SINGLE

operator_redisUrl

Адрес подключения к Redis

mymaster,redis-sentinel-0.redis-sentinel:26379,redis-sentinel-1.redis-sentinel:26379,redis-sentinel-2.redis-sentinel:26379

Для standalone развертывания с Redis с режимом подключения SINGLE можно указать один адрес

operator_scope

Режим работы оператора

namespace

Для централизованного режима — cluster, для децентрализованного — namespace

operator_logLevel

Уровень логирования RL Operator

info

rls_hostname

Имя host в Route для подключения к namespace централизованного SRLS

global.common.poddisruptionbudget.minAvailable

Глобальный параметр среды для PodDistributionBudget

Параметр, который гарантирует, что как минимум столько реплик будет гарантировано доступны при работе Machine Config, при обновлении кластера OpenShift и других работах, требующих переезд Pod с одной node на другую

rloperator_ose_poddisruptionbudget_spec_minAvailable

Параметр среды для RL Operator PodDistributionBudget

1

Параметр задается в файле конфигурации operator.srls.conf

ratelimiter_ose_poddisruptionbudget_spec_minAvailable

Параметр среды для RateLimiter PodDistributionBudget

1

Параметр задается в файле конфигурации rls.srls.conf

redis_ose_poddisruptionbudget_spec_minAvailable

Параметр среды для Redis PodDistributionBudget

1

Параметр задается в файле конфигурации redis.srls.conf

sentinel_ose_poddisruptionbudget_spec_minAvailable

Параметр среды для Sentinel PodDistributionBudget

1

Параметр задается в файле конфигурации sentinel.srls.conf

egress_ose_poddisruptionbudget_spec_minAvailable

Параметр среды для Egress Gateway PodDistributionBudget

1

Параметр задается в файле конфигурации egress.srls.conf

secman_role

Роль в SecMan, получаемая при подключении к хранилищу

role

secman_namespace

Пространство в хранилище SecMan

CI01234567_CI76543210

Указывать, если в хранилище поддерживаются пространства имен. При этом должен быть задан параметр шаблонизации SECMAN_NAMESPACE_ENABLED

secman_full_path_to_secret_kafka

Полный путь до секрета в SecMan для Egress Gateway

DEV/TEST/FS/KV/egress-kafka-cert

secman_full_path_to_rls_secret

Полный путь до секрета в SecMan для RL Service

DEV/TEST/FS/KV/rls-secrets

secman_host

Host для SecMan

secman.solution.ru

secman_port

Port для SecMan

8443

egress_secman_port

Порт для сервиса SecMan на egress

8550

kubernetes_service_host

Cервис kubernetes

kubernetes.default.svc.cluster.local

kubernetes_service_port

Порт сервиса kubernetes

443

kube_ip

IP-адрес сервиса kubernetes

egress_kubeapi_port

Порт для сервиса kubernetes на egress

4443

egress_selectors

Селекторы egress, установленного в прикладном namespace

{"istio":"egress-my_namespace"}

log_kafka_bootstrap_servers

Список адресов кластера брокеров Kafka для журналирования

8.8.8.8:9092

ufs_logger_kafka_topic

Название topic для журналирования

eventlog

ufs_logger_kafka_security_protocol

Конфигурация закрытого соединения с Kafka

plaintext / ssl

registry_path_loga

Базовый путь до каталога с образами платформенного Logger

public/efs

logger_pl_sidecar_cpuLimit

fluent-bit sidecar cpu limit

200m

logger_pl_sidecar_memLimit

fluent-bit sidecar memory limit

200Mi

logger_pl_sidecar_cpuRequest

fluent-bit sidecar cpu request

100m

logger_pl_sidecar_memRequest

fluent-bit sidecar memory request

100Mi

logger_pl_sidecar_run_as_user

fluent-bit sidecar securityContext runAsUser

1001560000

Для k8s – 1001

logger_pl_sidecar_run_as_group

fluent-bit sidecar securityContext runAsGroup

1001560000

Для k8s – 2000

secman_sidecar_cpuLimit

secman sidecar cpu limit

100m

secman_sidecar_cpuRequest

secman sidecar cpu request

50m

secman_sidecar_memRequest

secman sidecar memory request

64Mi

secman_sidecar_memLimit

secman sidecar memory limit

128Mi

disable_envoy_filter_automation

Если выставлено значение true, поддержка автоматизированного создания артефактов EnvoyFilter компонентом RL Operator выключена

false

registry_path_igeg

Базовый путь до каталога компонента IGEG продукта Platform V Synapse Service Mesh

public/efs

egress_cert_ca_root

Значение в base64-кодировке ca-root.pem для secret (egress-secrets) Egress Gateway

egress_cert

Значение в base64-кодировке egress.pem для secret (egress-secrets) Egress Gateway

egress_cert_key

Значение в base64-кодировке egress.key для secret (egress-secrets) Egress Gateway

egress_kafka_cert_ca_root

Значение в base64-кодировке kafka-ca.pem для secret (egress-kafka-cert) Egress Gateway

egress_kafka_cert

Значение в base64-кодировке kafka.pem для secret (egress-kafka-cert) Egress Gateway

egress_kafka_cert_key

Значение в base64-кодировке kafka.key для secret (egress-kafka-cert) Egress Gateway

rls_cert_ca_root

Значение в base64-кодировке ca-root.pem для secret (rate-limiter-secrets) RL Service

rls_cert

Значение в base64-кодировке server.pem для secret (rate-limiter-secrets) RL Service

rls_cert_key

Значение в base64-кодировке server.key для secret (rate-limiter-secrets) RL Service

igeg_fsgroup

Идентификатор дополнительной группы для запуска Pod Ingress и Egress

1337

igeg_run_as_user

Идентификатор пользователя для запуска Pod Ingress и Egress

1337

igeg_run_as_group

Идентификатор группы для запуска Pod Ingress и Egress

1337

redis_fsgroup

Идентификатор дополнительной группы для запуска Pod Redis и Sentinel

1001

redis_run_as_user

Идентификатор пользователя для запуска Pod Redis и Sentinel

1001

redis_run_as_group

Идентификатор группы для запуска Pod Redis и Sentinel

1001

secman_sidecar_run_as_user

Идентификатор пользователя для запуска secman sidecar

1001

secman_sidecar_as_group

Идентификатор группы для запуска secman sidecar

1001

rls_fsgroup

Идентификатор дополнительной группы для запуска Pod RL Operator и RL Service

1001

rls_run_as_user

Идентификатор пользователя для запуска Pod RL Operator и RL Service

1001

rls_run_as_group

Идентификатор группы для запуска Pod RL Operator и RL Service

1001

egress_kafka_update_ef_enabled

Если True, динамический режим обновления списка Bootstrap Kafka. Если False, статический режим конфигурации списка Bootstrap Kafka

True

egress_kafka_port

Порт для конфигурации прохождения трафика Kafka через Egress

9093

kafka_port

Порт для кластера Kafka

9093

kafka_resolution

Resolution для конфигурации прохождения трафика Kafka через Egress

DNS

egress_kafka_bootstrap

Список брокеров Kafka

- host: kafka.test.com
port: 9093
ip: 10.0.0.1

log_rls_sender_type

Тип отправки логов. Возможные варианты: kafka – в Kafka, rest – на endpoint LOGA log_rls_rest_endpoint

kafka

log_kafka_bootstrap_servers

Список адресов кластера брокеров Kafka для журналирования

egressgateway-rls-svc:9093

log_rls_kafka_topic

Топик Kafka для журналирования

kafka

log_rls_rest_endpoint

Enpoint LOGA для журналирования

http://localhost:10080/v1/events

log_rls_tls_security_protocol

Протокол шифрования, варианты: ssl, plaintext

plaintext

log_rls_tls_version

Минимальная версия протокола TLS для журналирования

TLSv1.2

log_rls_tls_cipher_suites

Комбинация шифров для TLS для журналирования

Параметры числа реплик Pod:

Название

Описание

Значение по умолчанию

srls_egress_deployment_replicas

Число реплик Egress Gateway

2

srls_rloperator_deployment_replicas

Число реплик RL Operator

2

srls_ratelimiter_deployment_replicas

Число реплик RL Service

2

srls_redis_deployment_replicas

Число реплик Redis

3

srls_sentinel_deployment_replicas

Число реплик Redis Sentinel

3

Параметры лимитов и запросов ресурсов для Egress Gateway:

Название

Значение по умолчанию

srls_egress_deployment_cpuLimit

600m

srls_egress_deployment_memLimit

900Mi

srls_egress_deployment_cpuRequest

400m

srls_egress_deployment_memRequest

700Mi

Параметры лимитов и запросов ресурсов для RL Operator:

Название

Значение по умолчанию

srls_rloperator_deployment_cpuLimit

200m

srls_rloperator_deployment_memLimit

200Mi

srls_rloperator_deployment_cpuRequest

100m

srls_rloperator_deployment_memRequest

100Mi

Параметры лимитов и запросов ресурсов для Istio Sidecar RL Operator:

Название

Значение по умолчанию

srls_rloperator_deployment_istio_cpuLimit

100m

srls_rloperator_deployment_istio_memLimit

200Mi

srls_rloperator_deployment_istio_cpuRequest

50m

srls_rloperator_deployment_istio_memRequest

100Mi

Параметры лимитов и запросов ресурсов для RL Service:

Название

Значение по умолчанию

srls_ratelimiter_deployment_cpuLimit

500m

srls_ratelimiter_deployment_memLimit

300Mi

srls_ratelimiter_deployment_cpuRequest

250m

srls_ratelimiter_deployment_memRequest

150Mi

Параметры лимитов и запросов ресурсов для Istio Sidecar RL Service (объем ресурсов зависит от потребителя, рекомендуется определять по результатам нагрузочного тестирования):

Название

Значение по умолчанию

srls_ratelimiter_deployment_istio_cpuLimit

300m

srls_ratelimiter_deployment_istio_memLimit

500Mi

srls_ratelimiter_deployment_istio_cpuRequest

200m

srls_ratelimiter_deployment_istio_memRequest

300Mi

Параметры лимитов и запросов ресурсов для Redis:

Название

Значение по умолчанию

srls_redis_deployment_cpuLimit

300m

srls_redis_deployment_memLimit

500Mi

srls_redis_deployment_cpuRequest

150m

srls_redis_deployment_memRequest

250Mi

Параметры лимитов и запросов ресурсов для Redis Sentinel:

Название

Значение по умолчанию

srls_sentinel_deployment_cpuLimit

200m

srls_sentinel_deployment_memLimit

200Mi

srls_sentinel_deployment_cpuRequest

100m

srls_sentinel_deployment_memRequest

100Mi

Параметры конфигурирования классов приоритетов:

Название

Значение по умолчанию

srls_rloperator_deployment_priorityClassName

Пустое значение

srls_ratelimiter_deployment_priorityClassName

Пустое значение

srls_egress_deployment_priorityClassName

Пустое значение

srls_redis_deployment_priorityClassName

Пустое значение

srls_sentinel_deployment_priorityClassName

Пустое значение

Параметры конфигурирования стратегии RollingUpdate:

Название

Значение по умолчанию

srls_rloperator_deployment_maxUnavailable

25%

srls_ratelimiter_deployment_maxUnavailable

25%

srls_egress_deployment_maxUnavailable

25%

srls_rloperator_deployment_maxSurge

25%

srls_ratelimiter_deployment_maxSurge

25%

Список параметров для настройки артефакта GlobalRateLimit при развертывании по агентской схеме.

Название

Описание

Значение по умолчанию

limits_srls_config_name

Название экземпляра артефакта GlobalRateLimit

rate-limit-config

limits_srls_config_namespace

Идентификатор namespace

"{ namespace }"

limits_envoy_version

Используемая версия Envoy в Ingress Gateway

1.25

limits_ose_istio_all_common_ingressAppSelector

Лейбл «app» для определения Pod Ingress Gateway

"{ agent.ose.istio.all.common.ingressAppSelector }"

limits_ose_istio_all_common_ingressIstioSelector

Лейбл «istio» для определения Pod Ingress Gateway

"{ agent.ose.istio.all.common.ingressIstioSelector }"

limits_visibility

Отвечает за область видимости данного CRD (cluster для централизованного варианта SRLS или namespace для децентрализованного)

namespace

limits_rlservice

Значение зависит от выбранного варианта инсталляции SRLS, централизованный — в качестве хоста должен быть указан Headless Service, указывающий на Pod Egress Gateway, децентрализованный — rate-limiter-headless-service

rate-limiter-headless-service

limits_rls_serverport

Значение зависит от выбранного варианта инсталляции SRLS, централизованный — 12001, децентрализованный — 8081

8081

limits_srls_namespace

Идентификатор namespace, в котором развернут централизованный SRLS, используется только для централизованного варианта инсталляции

<class 'jinja2.utils.Namespace'>

Значения по умолчанию, приведенные в двойных фигурных скобках, указывают на стандартные переменные Job CDJE DevTools.

Параметры установки, специфичные для выбранного варианта развертывания#

Централизованный вариант развертывания:

Название

Тип параметра

Значение

DEPLOY_CENTR

Параметр шаблонизации

True

DEPLOY_DECENTR

Параметр шаблонизации

False

operator_scope

Стендозависимый параметр

cluster

rls_typeMod

Стендозависимый параметр

server

Централизованный вариант (c шифрованием TLS) развертывания:

Название

Тип параметра

Значение

SRLS_TLS_ENABLED

Параметр шаблонизации

True

DEPLOY_CENTR

Параметр шаблонизации

True

DEPLOY_DECENTR

Параметр шаблонизации

False

operator_scope

Стендозависимый параметр

cluster

rls_typeMod

Стендозависимый параметр

server

rls_tls_enable

Стендозависимый параметр

True

Децентрализованный вариант развертывания:

Название

Тип параметра

Значение

DEPLOY_CENTR

Параметр шаблонизации

False

DEPLOY_DECENTR

Параметр шаблонизации

True

operator_scope

Стендозависимый параметр

namespace

rls_typeMod

Стендозависимый параметр

server

Для отправки логов встроенными в RL Operator и RL Service стредствами дополнительно необходимо установить параметр шаблонизации:

SRLS_LOG_SENDER_ENABLED: True

Установить значения у следующих стендозависимых параметров:

egress_kafka_update_ef_enabled: true  // true – обновление списка egress_kafka_bootstrap; false – фиксированный набор egress_kafka_bootstrap
egress_kafka_port: 9093
kafka_port: 9093
kafka_resolution: DNS
egress_kafka_bootstrap:   // заполнить значение для используемого кластера kafka
  - host: kafka.test.ru
    port: 9093
    ip: 10.0.0.1
log_rls_sender_type: kafka
log_kafka_bootstrap_servers: egressgateway-rls-svc:{egress_kafka_port}
log_rls_kafka_topic: rls_test_topic      // установить свой топик для отправки
log_rls_tls_security_protocol: plaintext

Ручная установка сервиса#

Перед установкой необходимо заполнить стендозависимые и связанные с шаблонизацией параметры. Описание параметров представлено в разделе «Параметры установки».

  1. Разархивировать дистрибутив.

  2. Открыть консоль и перейти в папку package/conf/helm/application/srls дистрибутива.

  3. Запустить установку в namespace командой:

helm upgrade srls .

Сборка образов для компонента SRLS из дистрибутива#

  1. Разархивировать дистрибутив.

  2. Открыть консоль и перейти в папку package/ дистрибутива.

  3. Собрать образы, выполнив команды:

docker build -f docker/operator/Dockerfile . -t {registry}/{registry_path}/srls/operator:{version}
docker build -f docker/rls/Dockerfile . -t {registry}/{registry_path}/srls/rls:{version}
docker build -f docker/redis/Dockerfile . -t {registry}/{registry_path}/srls/redis:{version}
docker build -f docker/sentinel/Dockerfile . -t {registry}/{registry_path}/srls/sentinel:{version}

Здесь:

  • registry – ссылка до registry;

  • registry_path – базовый путь до каталога с образами;

  • version – версия дистрибутива (например, 2.6).

  1. Отправить образы в хранилище, выполнив команды:

docker push {registry}/{registry_path}/srls/operator:{tag}
docker push {registry}/{registry_path}/srls/rls:{tag}
docker push {registry}/{registry_path}/srls/redis{tag}
docker push {registry}/{registry_path}/srls/sentinel{tag}

Здесь:

  • registry – ссылка до registry;

  • registry_path – базовый путь до каталога с образами;

  • tag – тег собранного образа, например, версия дистрибутива.

Предварительная настройка Deploy Tools#

Важно: для корректной установки необходимо использовать компонент CDJE Deploy Tools продукта Platform V DevOps Tools (DOT) версии 1.3 и выше.

При обновлении на версию 3.11 в связи с переходом на установку при помощи Helm Chart для корректного обновления манифестов требуется удалить все ресурсы компонента SRLS из namespace (лейбл proj: synapse-rls) и запустить установку новой версии.

В файле environment.json в блоке playbooks_fpi должны присутствовать сценарии HELM_DEPLOY и HELM_UNDEPLOY. Если их нет, то необходимо добавить:

{
   "playbooks_fpi": {
      "HELM_DEPLOY": {
         "id": 97
      },
      "HELM_UNDEPLOY": {
         "id": 98
      }
   }
}

Автоматизированная установка сервиса с использованием Deploy Tools#

Важно: Для корректной установки необходимо выполнить шаг «Предварительная настройка Deploy Tools», описанный выше.

  1. Настроить Job (дистрибутив собран с поддержкой Deploy Tools).

    Примечание — настройка заключается в указании для job параметров, описанных в разделе «Параметры установки» в таблицах «Параметры шаблонизации» и «Список и описание параметров».

  2. Запустить миграцию конфигурационных файлов — набор сценариев MIGRATION_FP_CONF.

  3. Скорректировать значения параметров шаблонизации и стендозависимых параметров.

    Примечание — значение параметра DEPLOY_TO_KUBERNETES определяет платформу контейнеризации для запуска компонентов сервиса (для установки Kubernetes и Platform V DropApp значение True).

  4. Запустить установку — сценарий HELM_DEPLOY.

Автоматизированная установка по агентской схеме с использованием Deploy Tools#

Важно: Для корректной установки необходимо выполнить шаг «Предварительная настройка Deploy Tools», описанный выше.

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

  1. Настроить Job бизнес-приложения или технологического сервиса.

    • В схему справочника конфигураций развертывания (subsystem.json) добавить секцию agents для определения конфигураций развертывания из дистрибутива SRLS:

  agents: {
    "SRLS_agent": {
        "groupId": "",
        "artifactId": "",
        "version": "",
        "fpi-name": "",
        "classifier": "",
        "packaging": "",
        ...
    }
}
  1. Запустить миграцию конфигурационных файлов, указав в поле параметров Job COMPONENTS сконфигурированный агент — набор сценариев MIGRATION_FP_CONF.

    • Настроечные параметры из дистрибутива SRLS будут подгружены в пространство конфигурирования бизнес-приложения или технологического сервиса.

  2. Скорректировать значения параметров шаблонизации и стендозависимых параметров.

    • Для создания артефакта GlobalRateLimit необходимо выставить значение True параметра шаблонизации DEPLOY_LIMITS и заполнить параметр шаблонизации endpoints в соответствии с разделом «Параметры установки» настоящего документа.

    • Если требуется установить дистрибутив в децентрализованном варианте развертывания SRLS, необходимо настроить соответствующие параметры, описанные в разделах «Параметры установки» и «Параметры установки, специфичные для выбранного варианта развертывания» настоящего документа.

    • Если установка не требуется, необходимо выставить значение False параметров шаблонизации DEPLOY_CENTR, DEPLOY_DECENTR.

  3. Запустить установку бизнес-приложения или технологического сервиса, указав в поле параметров Job COMPONENTS сконфигурированный агент — набор сценариев HELM_DEPLOY.

Автоматизированная установка сервиса с использованием Synapse Installer#

  1. Скачать необходимую версию дистрибутива.

  2. Получить из дистрибутива конфигурационый файл: <дистрибутив>/package/conf/helm/application/srls/values.yaml.

  3. Поместить полученный в пункте выше файл в git-репозиторий со стендозависимыми параметрами.

    Важно: Для корректной установки файл должен быть помещен по следующему пути: <git-репозиторий>/<namespace>/package/conf/helm/srls/values.yaml.

  4. Скорректировать значения параметров шаблонизации и стендозависимых параметров.

    Примечание — значение параметра DEPLOY_TO_KUBERNETES определяет платформу контейнеризации для запуска компонентов сервиса (для установки Kubernetes и Platform V DropApp значение True).

  5. Запустить job с указанием git-репозитория с параметрами и указанием места установки.

Сбор метрик с сервиса#

Для сбора метрик с помощью Unimon необходимо добавить в ConfigMap name: opm.unimon.unimon-agent.conf параметр unimon-agent.sidecar.istio.exclude.outbound.ports: '2112,8081'.

Для сбора метрик с помощью GATM необходимо добавить задание srls-pods в файл scrape.yml конфигурации ConfigMap.

Пример ConfigMap (<дистрибутив>/package/conf/k8s/base/other/configmaps/synapse-metrics-cm.yaml):

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-metrics-agent-scrapeconfig
  namespace: ${rls_namespace}
data:
  scrape.yml: |

    global:
      scrape_interval: 1m
      scrape_timeout: 1m
      external_labels:
        cluster: apps.ocp.syn-dev.solution.test
    scrape_configs:

    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      job_name: srls-pods
      scrape_interval: 15s     //интервал сбора метрик с Pod компонентов SRLS
      kubernetes_sd_configs:
      - role: pod
        namespaces:
          own_namespace: true
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [ __meta_kubernetes_pod_container_port_name]
        action: keep
        regex: metrics-(.+)
      - source_labels: [__meta_kubernetes_pod_label_proj]
        action: keep
        regex: synapse-rls
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
        action: replace
        regex: (.+):(?:\d+);(\d+)
        replacement: ${1}:${2}
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: kubernetes_pod_name
      scheme: http

Более подробно о параметрах конфигурации смотрите в документации на соответствующий компонент.

Установка dashboard в программном компоненте Indicator (INDA) программного продукта Platform V Monitor (OPM)#

В поставку дистрибутива входят следующие dashboard:

  • SRLS.json — метрики работы сервиса srl;

  • SRLS Go Metrics.json — метрики потребления ресурсов srl;

  • SRLS Operator.json – метрики работы оператора RL Operator;

  • SRLS Operator Go Metrics.json — метрики потребления ресурсов RL Operator;

  • SRLS Client Metrics.json – метрики для биллинга потребителей;

Место хранения:

  • Объединенный мониторинг Unimon — папка /k8s/base/other/dashboard.

  • Сбор и анализ метрик GATM — папка /k8s/base/other/dashboard/GATM.

Для корректной работы Dashboard необходимо знать название таблицы в базе данных Druid, в которую осуществляется загрузка метрик от RL Service и RL Operator (узнать название таблицы можно у администраторов Platform V Monitor).

Для установки dashboard необходимо:

  1. Выполнить вход в Indicator Platform V Monitor.

  2. Перейти на вкладку «Dashboards» → «Manage» (1).

  3. Нажать на кнопку «Import» (2).

    indicator-load.png

Рисунок. Вкладка «Dashboards» компонента Indicator Platform V Monitor

  1. Нажать на кнопку «Upload JSON file» (3).

    indicator-imort-json.png

Рисунок. Экран компонента Indicator Platform V Monitor, кнопка «Upload JSON file»

  1. В появившемся окне выбрать файл с dashboard.

  2. В окне выбрать источник базы данных для получения метрик «Indicator-Abyss» из выпадающего списка (4).

  3. В поле «druidtable» изменить название (srlsunimon) таблицы в базе данных Druid на требуемое (5).

    indicator-options.png

Рисунок. Экран компонента Indicator Platform V Monitor для настройки загруженного dashboard

  1. Нажать на кнопку «Import».

Примеры dashboard:

dashboard-SRLS.png

Рисунок. Dashboard SRLS.json

dashboard-SRLS-operator.png

Рисунок. Dashboard SRLS Operator.json

dashboard-SRLS-Go.png

Рисунок. Dashboard SRLS Go Metrics.json, SRLS Operator Go Metrics.json

dashboard-SRLS-client-metric.png

Рисунок. Dashboard SRLS Client Metrics.json

Dashboard «SRLS Client Metrics» позволяет выбрать namespace, в котором развернут компонент SRLS, и уникальное название метрики (ratelimiterservice_rate_limit_*key*_over_limit), сформированное из CRD GlobalRatelimit в этом namespace. Для синхронизации данных с метриками, полученными в namespace с различных Pod компонентов SRLS, в dashboard используется параметр «rounding time» — период агрегации данных (1M,2M,5M,15M,30M,1H,2H).

Первая панель на dashboard отображает набор метрик, общих для всех потребителей. График Over limit indicators отображает набор лимитов и окрашивает в красный цвет соответствующий шестигранник при превышении установленной квоты за выбранный период отображения. График Soft limit events отображает события превышения установленных soft-квот. Графики Requests to SRLS и Requests to Endpoint '$key' отображают количество всех (красным) и одобренных SRLS (зеленым) запросов соответственно на весь SRLS и на endpoint (endpoint определяется на основе выбранной метрики ratelimiterservice_rate_limit_*key*_over_limit).

Панель «Request» отображает количество запросов за выбранный период агрегации для выбранной метрики ratelimiterservice_rate_limit_*key*_over_limit (график Requests to Consumer '$key'). Также на панели дополнительно отображаются значение и единица измерения квоты, соответствующие выбранной метрике.

Панель «Limit Status» отображает графики метрик следующих типов: near limit (превышение уровня 80% от установленной квоты), over limit (превышение установленной квоты) и soft limit (превышение установленной soft-квоты). Для каждого из типов лимитов представлены графики, соответствующие выбранной метрике ratelimiterservice_rate_limit_*key*_over_limit: Total $type limit — общее число запросов свыше соответствующей квоты; Delta $type limit — приращение числа запросов свыше соответствующей квоты за период агрегации данных.

Настройка интеграции#

Ниже описана процедура интеграции с рекомендованным АО «СберТех» продуктом Platform V Monitor. На усмотрение пользователя может быть настроена интеграция с аналогичным по функциональности продуктом от других производителей.

  1. Интеграция с программным компонентом Объединенный мониторинг Unimon (MONA) реализована в соответствии с требованиями Unimon: компонент публикует метрики в формате Prometheus. Для артефактов Service rl-operator и RateLimiterService добавлены необходимые аннотации Prometheus с необходимыми значениями (см. выше):

  • prometheus.io.path;

  • prometheus.io.port;

  • prometheus.io.scrape.

  1. Интеграция с программным компонентом Журналирование (LOGA) реализована в соответствии с требованиями сервиса журналирования: используется FluentBit sidecar для компонентов RL Operator и RL Service.

При установке должна быть включена опция:

FLUENT_BIT_SIDECAR_ENABLED = true и заполнены соответствующие поля «ufs-logger» (см. раздел «Параметры установки»).

Название

Описание

Значение по умолчанию

FLUENT_BIT_SIDECAR_ENABLED

Если True, то RL Operator и RL Service будут запущены с sidecar fluent-bit

true

TENANT_CODE

Код тенанта, используемый в конфигурации fluent-bit ufs-logger

Если параметр не задан в настройках инструмента/распаковки, то используется значение SRLS_TENANT_CODE

ufs_logger_kafka_bootstrap_servers

Список адресов кластера брокеров Kafka для журналирования

8.8.8.8:9092

ufs_logger_kafka_topic

Название topic для журналирования

eventlog

ufs_logger_kafka_security_protocol

Конфигурация закрытого соединения с Kafka

plaintext / ssl

Обновление#

Обновление программного компонента осуществляется по одной из стратегий — Rolling или Recreate.

Стратегия Recreate:

  • Удалить программный компонент согласно процедуре, описанной в разделе «Удаление».

  • Установить программный компонент согласно процедуре, описанной в разделе «Установка».

Стратегия Rolling:

  • Обновить артефакты согласно разделу «Установка».

Удаление#

Удаление централизованного Synapse Rate Limiter Service#

Для удаления Synapse Rate Limit необходимо удалить следующие ресурсы:

Версия

Тип

Название

apps/v1

Deployment

rloperator

apps/v1

Deployment

rate-limiter-service

apps/v1

StatefulSet

redis

apps/v1

StatefulSet

redis-sentinel

v1

Service

rloperator

v1

Service

rate-limiter-service

v1

Service

rate-limiter-headless-service

v1

Service

redis

v1

Service

redis-sentinel

coordination.k8s.io/v1

Lease

srls-operator-lock

v1

ConfigMap

operator-config

v1

ConfigMap

operator-fluent-bit-sidecar

v1

ConfigMap

rlservice-fluent-bit-sidecar

v1

ConfigMap

redis

v1

ConfigMap

redis-sentinel

v1

ConfigMap

rls-config

policy/v1

PodDisruptionBudget

rloperator-pdb

policy/v1

PodDisruptionBudget

rls-pdb

policy/v1

PodDisruptionBudget

redis-pdb

policy/v1

PodDisruptionBudget

redis-sentinel-pdb

Если был установлен Egress Gateway, то еще удалить следующие ресурсы

apps/v1

Deployment

egress-${rls_namespace}

v1

Service

egressgateway-rls-svc

networking.istio.io/v1alpha3

DestinationRule

egress-secman-dr

networking.istio.io/v1alpha3

Gateway

egress-secman-gw

networking.istio.io/v1alpha3

ServiceEntry

egress-secman-se

networking.istio.io/v1alpha3

VirtualService

egress-secman-vs

security.istio.io/v1beta1

PeerAuthentication

egress-pa

policy/v1

PodDisruptionBudget

egress-pdb

Удаление децентрализованного Synapse Rate Limiter Service#

Для удаления Synapse Rate Limit необходимо удалить следующие ресурсы:

Версия

Тип

Название

apps/v1

Deployment

rloperator

coordination.k8s.io/v1

Lease

srls-operator-lock

v1

ConfigMap

operator-config

v1

Service

rloperator

v1

ConfigMap

operator-fluent-bit-sidecar

v1

ConfigMap

redis

v1

Service

redis

apps/v1

StatefulSet

redis

v1

ConfigMap

redis-sentinel

v1

Service

redis-sentinel

apps/v1

StatefulSet

redis-sentinel

v1

ConfigMap

rls-config

v1

Service

rate-limiter-service

v1

Service

rate-limiter-headless-service

apps/v1

Deployment

rate-limiter-service

Проверка работоспособности#

  1. Для проверки работоспособности необходимо включить расширенное логирование на Egress в прикладном namespace и Ingress Gateway в namespace Rate Limit. Это можно сделать с помощью: curl -XPOST localhost:15000/logging?level=debug

  2. Включить LOG_LEVEL: debug у rate-limiter-service, изменив настройку в ConfigMap name: rls-config.

  3. Выполнить запрос к сервису, доступ которого необходимо было ограничить, и смотреть логи rate-limiter-service и ingress.

  4. Посмотреть логи Pod можно с помощью утилиты командной строки.

Пример команды для Kubernetes: kubectl logs <pod-name> -n <namespace>

Пример команды для OpenShift: oc logs <pod-name>

Здесь pod-name — уникальный идентификатор Pod, namespace — уникальное имя пространства.

Пример логов при штанной работе:

Показателем работоспособности является прохождение запроса и отображение в цепочке логов ingress-> rate-limiter-service к сервису (доступ к которому планируется ограничить).

Чек-лист проверки работоспособности интеграций#

Проверка работоспособности интеграции с Platform V SberLinux OS Server и Platform V DropApp#

  1. Убедиться, что установка SRLS в среду контейнеризации DropApp произошла успешно.

  2. Убедиться, что readiness/liveness-пробы Pods успешные и Pods по пробам периодически не перезапускаются.

  3. Убедиться, что при выполнении команды cat /etc/os-release в terminal контейнера одного из Pod, поставляемого в рамках компонента SRLS, выводится информация о базовом образе SberLinux OS Server.

Проверка работоспособности интеграции с LOGA#

  1. Убедиться, что установка SRLS произошла успешно (с параметром FLUENT_BIT_SIDECAR_ENABLED=True).

  2. Убедиться, что readiness/liveness-пробы Pods успешные и Pods по пробам периодически не перезапускаются.

Проверка работоспособности интеграции с MONA#

  1. Убедиться, что установка SRLS произошла успешно.

  2. Проверить в логах компонента Unimon-sender (часть компонента Объединенный мониторинг Unimon (MONA) продукта Platform V Monitor) наличие логов об отправке данных мониторинга SRLS в Kafka.

Проверка работоспособности интеграции с Secret Management System#

  1. Убедиться, что readiness/liveness-пробы Pods RL Service (для централизованного варианта с TLS-шифрованием), Egress Gateway (при интеграции с компонентом LOGA) успешные и Pods по пробам периодически не перезапускаются.

  2. Проверить в логах RL Service и Egress Gateway, что были получены секреты из хранилища SecMan.

Откат#

Откат производится развертыванием предыдущей версии SRLS, при этом должен быть выполнен откат стендозависимых параметров (если были изменения) в хранилище параметров.

Для отката необходимо удалить ресурсы текущей версии продукта (согласно разделу «Удаление» данного документа). Следуя документу «Руководство по установке», выполнить установку необходимой версии.

Часто встречающиеся проблемы и пути их устранения#

Часто встречающиеся проблемы не обнаружены.

Чек-лист валидации установки#

  1. Namespace, в который требуется установить компонент SRLS, подключен к Istio.

  2. Cоздан ImagePullSecret для доступа к образам из среды контейнеризации к Docker-registry.

  3. Добавлен артефакт CustomResourceDefinition GlobalRateLimit.

  4. В namespace существует ServiceAccount c именем default.

  5. Параметры шаблонизации и стендозависимые параметры заполнены в соответствии с рекомендуемыми параметрами.

RL Operator:

  • Следующие ресурсы доступны и отображаются в Kubernetes или Red Hat OpenShift (опционально):

Версия

Тип

Название

apps/v1

Deployment

rloperator

coordination.k8s.io/v1

Lease

srls-operator-lock

v1

ConfigMap

operator-config

v1

Service

rloperator

v1

ConfigMap

operator-fluent-bit-sidecar

  • Запущено 2 Pod RL Operator.

  • В логах Pod отсутствуют ошибки.

  • Pods не уходят в перезапуск по результатам readiness/liveness-проб.

RL Service:

  • Следующие ресурсы доступны и отображаются в Kubernetes или Red Hat OpenShift (опционально):

Версия

Тип

Название

apps/v1

Deployment

rate-limiter-service

v1

ConfigMap

rls-config

v1

Service

rate-limiter-service

v1

Service

rate-limiter-headless-service

  • Запущено 2 Pod RL Service.

  • В логах Pod отсутствуют ошибки.

  • Pods компонента не уходят в перезапуск по результатам readiness/liveness-проб.

Redis:

  • Следующие ресурсы доступны и отображаются в Kubernetes или Red Hat OpenShift (опционально):

Версия

Тип

Название

apps/v1

StatefulSet

redis

apps/v1

StatefulSet

redis-sentinel

v1

Service

redis

v1

Service

redis-sentinel

v1

ConfigMap

redis

v1

ConfigMap

redis-sentinel

  • Запущено 3 Pod Redis-sentinel и 3 Redis.

  • В логах Pod отсутствуют ошибки.

  • Pods не уходят в перезапуск по результатам readiness/liveness-проб.

При централизованном варианте SRLS Egress Gateway:

  • Следующие ресурсы доступны и отображаются в Kubernetes или Red Hat OpenShift (опционально):

Версия

Тип

Название

apps/v1

Deployment

egress-${rls_namespace}

v1

Service

egressgateway-rls-svc

networking.istio.io/v1alpha3

DestinationRule

egress-secman-dr

networking.istio.io/v1alpha3

Gateway

egress-secman-gw

networking.istio.io/v1alpha3

ServiceEntry

egress-secman-se

networking.istio.io/v1alpha3

VirtualService

egress-secman-vs

security.istio.io/v1beta1

PeerAuthentication

egress-pa

policy/v1

PodDisruptionBudget

egress-pdb

  • Запущено 2 Pod Egress Gateway.

  • В логах Pod отсутствуют ошибки.

  • Pods не уходят в перезапуск по результатам readiness/liveness-проб.

  1. Настроена интеграция «Клиентской части Unimon».

  2. В логах компонента «Клиентской части Unimon Sender» присутствуют логи об отправке данных мониторинга SRLS в Kafka.

При успешном выполнении всех пунктов можно приступать к использованию сервиса.