Установка#
Важно!
С версии 3.11 осуществлен переход на установку с помощью Helm Chart!
Состав дистрибутива#
Элемент дистрибутива |
Описание |
|---|---|
./bh/ratelimit |
Исполняемый файл RL Service |
./bh/rloperator |
Исполняемый файл RL Operator |
./bh/radish |
Исполняемый файл Quota Cache (Radish) |
./bh/radish_cli |
Исполняемый файл Quota Cache (Radish) |
Выбор способа установки#
В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:
ручная установка сервиса;
автоматизированная установка сервиса с использованием Deploy Tools;
автоматизированная установка сервиса по агентской схеме с использованием Deploy Tools;
автоматизированная установка сервиса с использованием Synapse Installer.
Подготовка окружения#
Namespace, в который требуется установить компонент SRLS, должен быть подключен к Istio: убедиться, что в namespace существуют стандартные Config Map Istio с именем istio-ca-root-cert (если нет, то добавить).
Убедиться, что в namespace существует ServiceAccount c именем default (если нет, то добавить).
Для доступа к образам из среды контейнеризации к Docker-registry требуется создать ImagePullSecret (
<дистрибутив>/package/conf/helm/application/srls/templates/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: ${srls.namespace}
data:
.dockerconfigjson: >-
type: kubernetes.io/dockerconfigjson
Связать секрет 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
Создать или обновить артефакт CustomResourceDefinition в среде контейнеризации Kubernetes или Red Hat OpenShift (опционально).
Пользовательские ресурсы являются расширением API Kubernetes. Артефакт CustomResourceDefinition (сокращенно CRD) позволяет определять пользовательские ресурсы — указать тип и схему ресурса. Добавление артефакта CRD позволяет затем использовать новые пользовательские ресурсы.
В нашем случае для артефактов типа GlobalRateLimit необходимо добавить следующий CRD: артефакт CRD.
В некоторых случаях для добавления CRD администраторы требуют артефакт типа CRDProxy, где в поле data размещен непосредственно CRD:
apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
name: crdproxy-globalratelimits-ratelimit-service
namespace: ${srls.namespace}
serviceAccount:
- rate-limiter-service
data: |-
< содержимое нашего артефакта СRD >
Выбор Key-Value хранилища#
Доступные варианты Key-Value хранилища:
Radish (поставляется в составе SRLS);
Redis (в составе SRLS поставляются только скрипты развертывания).
Централизованный вариант развертывания#
Сертификаты для Egress Gateway#
Необходимо подготовить сертификаты для Egress Gateway (ca-root.pem, egress.key, egress.pem, kafka-ca.pem, kafka.key, kafka.pem), рекомендуемая утилита для генерации и выпуска сертификатов — OpenSSL.
Для хранения «чувствительной» информации с точки зрения безопасности целевым подходом является интеграция с Secret Management System.
Вариант установки с Secret Management System.
Добавить необходимые сертификаты в 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) |
Вариант установки без Secret Management System.
Добавить в 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: ${srls.namespace}
data:
ca-root.pem: >-
egress.key: >-
egress.pem: >-
type: Opaque
kind: Secret
apiVersion: v1
metadata:
name: egress-kafka-cert
namespace: ${srls.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.
Вариант установки с Secret Management System.
Добавить необходимые сертификаты в 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) |
Вариант установки без Secret Management System.
Добавить в 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: ${srls.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 |
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: ${srls.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
ClusterRoleBinding:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rloperator-crb-${srls.namespace}
subjects:
- kind: ServiceAccount
name: rate-limiter-service
namespace: ${srls.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: ${srls.namespace}
labels:
app: rloperator
proj: synapse-rls
agent: srls
Role:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: srls-operator-role
namespace: ${srls.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: ${srls.namespace}
subjects:
- kind: ServiceAccount
name: rate-limiter-service
namespace: ${srls.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: ${srls.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 |
Права предоставляются на уровне прикладного namespace |
globalratelimits/status |
ratelimit.service |
- get |
Права предоставляются на уровне прикладного namespace |
leases |
coordination.k8s.io |
- get |
Права предоставляются на уровне прикладного namespace |
events |
- create |
Права предоставляются на уровне прикладного namespace |
|
envoyfilters |
networking.istio.io |
- get |
Права предоставляются на уровне прикладного namespace |
При автоматизированном создании артефактов EnvoyFilter компонентом RL Operator в процессе обработки артефакта GlobalRateLimit (в параметре operator.disableEnvoyFilterAutomation установлено значение false) EnvoyFilters создаются для версий Envoy 1.25 (Istio 1.17, SSM 3.9) и выше (версии ниже не поддерживаются).
Возможен вариант развертывания, при котором не производится автоматизированное создание артефактов EnvoyFilter. В этом случае необходимо выбрать соответствующий артефакт Role, установить значение true стендозависимого параметра operator.disableEnvoyFilterAutomation и создать необходимые для работы артефакты 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
Параметры установки#
Параметры шаблонизации расположены в <дистрибутив>/package/conf/helm/application/srls/values.yaml.
Название |
Описание |
Значение по умолчанию |
|---|---|---|
registry |
Ссылка до registry, если не задано администратором в настройках инструмента развертывания/распаковки |
docker-registy.mydomain.com |
registry_path_srls |
Базовый путь до каталога с образами, если не задано администратором в настройках инструмента развертывания/распаковки |
public |
srls.fluentBitSidecarEnabled |
Если |
False |
srls.logSenderEnabled |
Если |
False |
TENANT_CODE |
Код тенанта, используемый в конфигурации fluent-bit ufs-logger, определяется в настройках инструмента развертывания/распаковки |
- |
srls.tlsEnabled |
Включить TLS-шифрование на RL Service |
False |
srls.peerAuthMode |
Определяет режим mTLS для Pod SRLS c sidecar Istio в рамках namespace. Возможные варианты: STRICT – включить, DISABLE – выключить шифрование |
DISABLE |
srls.tenantCode |
Код тенанта, используемый в конфигурации fluent-bit ufs-logger, если в настройках инструмента развертывания/распаковки не задан параметр TENANT_CODE |
SRLS |
srls.podDisruptionBudgetEnabled |
Если |
True |
srls.deployToK8s |
Для совместимости с Kubernetes и Platform V DropApp |
False |
srls.deployLease |
Разворачивать или нет артефакт Lease в составе дистрибутива |
False |
srls.vaultAgentEnabled |
Если |
True |
srls.vaultAgentNamespaceEnabled |
Поддержка пространств в хранилище Secret Management System |
False |
srls.secretEnabled |
Если |
False |
srls.deployAccount |
Если |
False |
srls.deployCentr |
Если |
False |
srls.deployDecentr |
Если |
True |
srls.deployLimits |
Если |
False |
srls.deployClusterFilter |
Если |
False |
srls.deployEndpointFilter |
Если |
False |
endpoints |
Если значение параметров srls.deployLimits и/или srls.deployEndpointFilter выставлено в |
|
bodySizesEntries |
Если значение параметра srls.deployLimits выставлено в |
Пример значения параметра 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}}]}}]
Пример значения параметра bodySizesEntries:
[{"body_sizes_key": "size1", "body_sizes": [{"body_size":"5Ki", "value": 2}, {"body_size": "2M", "value": 5}]}, {"body_sizes_key": "size2", "body_sizes": [{"body_size": "100", invokers: [{"name": "invoker 1", "header_value": "invoker-1", "value": 15}]}]}]
Список стендозависимых параметров (указываются в конфигурации job) для установки и их описание представлены в таблице «Список и описание параметров». Стендозависимые параметры расположены в том же файле <дистрибутив>/package/conf/helm/application/srls/values.yaml.
Важно!
Названия стендозависимых параметров, начиная с версии компонента SRLS 4.2, отличаются от названий в предыдущих версиях.
Список и описание параметров:
Название |
Описание |
Пример |
Примечание |
|---|---|---|---|
srls.namespace |
Имя пространства, в котором разворачиваются RL Service, RL Operator |
synapse-dev-sandbox |
|
rls.backend |
Тип хранилища Key-Value для RL Service |
radish |
Возможные варианты: radish, redis |
rls.radishType |
Тип работы Radish |
scarecrow |
Для подключения к Radish с одной node нужно указать standalone |
rls.radishUrl |
Адрес подключения к Radish |
radish-0.radish.svc.cluster.local:2181,radish-1.radish.svc.cluster.local:2181,radish-2.radish.svc.cluster.local:2181 |
Для standalone развертывания Radish с режимом подключения standalone нужно указать один адрес |
rls.radishPoolMinSize |
Минимальное количество поддерживаемых соединений с Radish |
20 |
Если значение совпадает с |
rls.radishPoolMaxSize |
Максимальное количество поддерживаемых соединений с Radish |
100 |
При необходимости новые соединения создаются динамически. |
rls.radishPoolShrinkThresholdSeconds |
Интервал ожидания для закрытия динамически созданных соединений с Radish свыше минимального значения |
60 |
Единица измерения — секунды |
rls.radishPoolShrinkValue |
Количество динамически созданных соединений, закрываемых за одну итерацию |
1 |
|
rls.radishRetryCount |
Количество попыток повторной отправки запросов к Radish в случае сетевой ошибки |
3 |
0 — неограниченное количество попыток |
rls.radishRetryIntervalMillis |
Интервал ожидания между попытками повторной отправки запросов к Radish в случае ошибки |
50 |
Единица измерения — миллисекунды |
rls.radishWithKeepAlive |
Включение/отключение TCP keepalive |
true |
|
rls.radishKeepAlivePeriod |
Периодичность отправки keepalive запросов |
10 |
Значение указывается в секундах |
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.logLevel |
Уровень логирования для RL Service |
info |
|
rls.tls.enable |
Включение/выключение шифрования TLS |
false |
|
rls.tls.clientAuth |
Запрос и валидация сертификатов пользователей: none — не запрашивать; must — запрашивать; want — запрашивать и валидировать |
none |
|
rls.tls.version |
Минимальная версия протокола TLS |
TLSv1.2 |
|
rls.tls.cipherSuites |
Комбинация шифров для TLS |
||
rls.tls.certPath |
Путь до сертификатов в контейнере RL Service |
/cert |
|
rls.tls.cert.crt |
Имя файла сертификата в контейнере RL Service |
server.pem |
|
rls.tls.cert.key |
Имя файла с ключом сертификата в контейнере RL Service |
server.key |
|
rls.tls.cert.ca |
Имя файла CA сертификата в контейнере RL Service |
ca-root.pem |
|
radish.serversList |
Полный список узлов кластера Radish |
radish-0.radish.svc.cluster.local:2181,radish-1.radish.svc.cluster.local:2181,radish-2.radish.svc.cluster.local:2181 |
|
radish.replication.flushThresholdSec |
Периодичность отправки данных репликации |
10 |
|
radish.replication.inMemoryBufSizeBytes |
Размер буфера в памяти в байтах, используется для накопления данных перед записью на диск |
4194304 |
|
radish.replication.maxFileSizeBytes |
Размер файла на диске в байтах, в случае превышения выполняется процедура снятия актуального слепка данных и удаление исторических данных на диске |
104857600 |
|
radish.logLevel |
Уровень логирования для Radish |
info |
|
radish.hosts |
Адреса для подключения к Radish |
- radish-0.radish.svc.cluster.local |
|
operator.envoyFilterGrpcTimeout |
Тайм-аут на обращение к сервису Rate Limit |
1s |
|
operator.backend |
Тип хранилища Key-Value для RL Operator |
radish |
Возможные варианты: radish, redis |
operator.radishType |
Тип работы Radish |
scarecrow |
Для подключения к Radish с одной node нужно указать standalone |
operator.radishUrl |
Адрес подключения к Radish |
radish-0.radish.svc.cluster.local:2181,radish-1.radish.svc.cluster.local:2181,radish-2.radish.svc.cluster.local:2181 |
Для standalone развертывания Radish с режимом подключения standalone нужно указать один адрес |
operator.radishPoolSize |
Количество соединений к Radish |
1 |
|
operator.radishRetryCount |
Количество попыток повторной отправки запросов к Radish в случае сетевой ошибки |
3 |
0 — неограниченное количество попыток |
operator.radishRetryIntervalMillis |
Интервал ожидания между попытками повторной отправки запросов к Radish в случае ошибки |
50 |
Единица измерения — миллисекунды |
operator.radishWithKeepAlive |
Включение/отключение TCP keepalive |
true |
|
operator.radishKeepAlivePeriod |
Периодичность отправки keepalive запросов |
10 |
Значение указывается в секундах |
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.logLevel |
Уровень логирования RL Operator |
info |
|
global.common.poddisruptionbudget.minAvailable |
Глобальный параметр среды для PodDistributionBudget |
Параметр, который гарантирует, что как минимум столько реплик будет гарантировано доступны при работе Machine Config, при обновлении кластера OpenShift и других работах, требующих переезд Pod с одной node на другую |
|
operator.podDisruptionBudget.minAvailable |
Параметр среды для RL Operator PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
rls.podDisruptionBudget.minAvailable |
Параметр среды для RateLimiter PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
radish.podDisruptionBudget.minAvailable |
Параметр среды для Radish PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
redis.podDisruptionBudget.minAvailable |
Параметр среды для Redis PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
sentinel.podDisruptionBudget.minAvailable |
Параметр среды для Sentinel PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
egress.podDisruptionBudget.minAvailable |
Параметр среды для Egress Gateway PodDistributionBudget |
1 |
Параметр задается в файле конфигурации values.yaml |
vaultAgent.authPathEnabled |
Включение пути для метода аутентификации «Kubernetes» для системы управления секретами Secret Management System |
false |
|
vaultAgent.authPath |
Путь для метода аутентификации «Kubernetes» для системы управления секретами Secret Management System |
auth/srls |
|
vaultAgent.role |
Роль в Secret Management System, получаемая при подключении к хранилищу |
role |
|
vaultAgent.namespace |
Пространство в хранилище Secret Management System |
CI01234567_CI76543210 |
Указывать, если в хранилище поддерживаются пространства имен. При этом должен быть задан параметр шаблонизации srls.vaultAgentNamespaceEnabled |
vaultAgent.fullPathToSecretKafka |
Полный путь до секрета в Secret Management System для Egress Gateway |
DEV/TEST/FS/KV/egress-kafka-cert |
|
vaultAgent.fullPathToRlsSecret |
Полный путь до секрета в Secret Management System для RL Service |
DEV/TEST/FS/KV/rls-secrets |
|
vaultAgent.host |
Host для Secret Management System |
secret.manager.ru |
|
vaultAgent.port |
Порт для Secret Management System |
8443 |
|
egress.tracingCollector |
Адрес подключения к сервису публикации данных о трассировке запросов |
jaeger-collector.test-devpub-controlplanev2.svc:9411 |
|
egress.vault.routeEnabled |
Добавление артефактов Istio для прохождения трафика Secret Management System через Egress |
true |
|
egress.vault.proxy.port |
Порт для сервиса Secret Management System на Egress |
8550 |
|
egress.istiodSvc |
Адрес подключения к istiod |
istiod-basic.synapse-smcp20-control-plane.svc:15012 |
|
k8sService.kubeApi.host |
Сервис Kubernetes |
Kubernetes.default.svc.cluster.local |
|
egress.kafka.updateEfEnabled |
Если |
True |
|
egress.kafka.port |
Порт для конфигурации прохождения трафика Kafka через Egress |
9093 |
|
egress.kafka.proxy.port |
Порт для кластера Kafka |
9093 |
|
egress.kafka.proxy.resolution |
Resolution для конфигурации прохождения трафика Kafka через Egress |
DNS |
|
egress.kafka.bootstrap |
Список брокеров Kafka |
- host: kafka.test.com |
|
k8sService.kubeApi.port |
Порт сервиса Kubernetes |
443 |
|
egress.kubeIp |
IP-адрес сервиса Kubernetes |
||
egress.kubeapiPort |
Порт для сервиса Kubernetes на Egress |
4443 |
|
egress.selectors |
Селекторы Egress, установленного в прикладном namespace |
{"istio":"egress-my_namespace"} |
|
logging.kafkaBootstrapServers |
Список адресов кластера брокеров Kafka для журналирования |
{ IP_ADDRESS }:9092 |
|
fluentBit.topic |
Название topic для журналирования |
eventlog |
|
fluentBit.securityProtocol |
Конфигурация закрытого соединения с Kafka |
plaintext / ssl |
|
registry_path_loga |
Базовый путь до каталога с образами платформенного Logger |
public/efs |
|
fluentBit.sidecar.cpuLimit |
fluent-bit sidecar cpu limit |
200m |
|
fluentBit.sidecar.memLimit |
fluent-bit sidecar memory limit |
200Mi |
|
fluentBit.sidecar.cpuRequest |
fluent-bit sidecar cpu request |
100m |
|
fluentBit.sidecar.memRequest |
fluent-bit sidecar memory request |
100Mi |
|
fluentBit.sidecar.runAsUser |
fluent-bit sidecar securityContext runAsUser |
10001 |
Для k8s – 10001, для Openshift – идентификатор из допустимого сконфигурированного диапазона, например, 1001560000 (допустимый диапазон идентификаторов уточните у администраторов кластера Openshift) |
fluentBit.sidecar.runAsGroup |
fluent-bit sidecar securityContext runAsGroup |
10001 |
Для k8s – 10001, для Openshift – идентификатор из допустимого сконфигурированного диапазона, например, 1001560000 (допустимый диапазон идентификаторов уточните у администраторов кластера Openshift) |
vaultAgent.sidecar.cpuLimit |
Vault agent sidecar cpu limit |
100m |
|
vaultAgent.sidecar.cpuRequest |
Vault agent sidecar cpu request |
50m |
|
vaultAgent.sidecar.memRequest |
Vault agent sidecar memory request |
64Mi |
|
vaultAgent.sidecar.memLimit |
Vault agent sidecar memory limit |
128Mi |
|
operator.disableEnvoyFilterAutomation |
Если выставлено значение |
false |
|
registry_path_igeg |
Базовый путь до каталога компонента IGEG продукта Platform V Synapse Service Mesh |
public/efs |
|
egress.cert.ca |
Значение в base64-кодировке ca-root.pem для secret (egress-secrets) Egress Gateway |
||
egress.cert.crt |
Значение в base64-кодировке egress.pem для secret (egress-secrets) Egress Gateway |
||
egress.cert.key |
Значение в base64-кодировке egress.key для secret (egress-secrets) Egress Gateway |
||
egress.kafka.cert.ca |
Значение в base64-кодировке kafka-ca.pem для secret (egress-kafka-cert) Egress Gateway |
||
egress.kafka.cert.crt |
Значение в 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 |
Значение в base64-кодировке ca-root.pem для secret (rate-limiter-secrets) RL Service |
||
rls.cert.crt |
Значение в base64-кодировке server.pem для secret (rate-limiter-secrets) RL Service |
||
rls.cert.key |
Значение в base64-кодировке server.key для secret (rate-limiter-secrets) RL Service |
||
egress.fsGroup |
Идентификатор дополнительной группы для запуска Pod Ingress и Egress |
10001 |
|
egress.runAsUser |
Идентификатор пользователя для запуска Pod Ingress и Egress |
10001 |
|
egress.runAsGroup |
Идентификатор группы для запуска Pod Ingress и Egress |
10001 |
|
redis.fsGroup |
Идентификатор дополнительной группы для запуска Pod Redis и Sentinel |
10001 |
|
redis.runAsUser |
Идентификатор пользователя для запуска Pod Redis и Sentinel |
10001 |
|
redis.runAsGroup |
Идентификатор группы для запуска Pod Redis и Sentinel |
10001 |
|
vaultAgent.sidecar.runAsUser |
Идентификатор пользователя для запуска Vault agent sidecar |
10001 |
|
vaultAgent.sidecar.runAsGroup |
Идентификатор группы для запуска Vault agent sidecar |
10001 |
|
operator.fsGroup |
Идентификатор дополнительной группы для запуска Pod RL Operator |
10001 |
|
operator.runAsUser |
Идентификатор пользователя для запуска Pod RL Operator |
10001 |
|
operator.runAsGroup |
Идентификатор группы для запуска Pod RL Operator |
10001 |
|
rls.fsGroup |
Идентификатор дополнительной группы для запуска RL Service |
10001 |
|
rls.runAsUser |
Идентификатор пользователя для запуска Pod RL Service |
10001 |
|
rls.runAsGroup |
Идентификатор группы для запуска Pod RL Service |
10001 |
|
radish.fsGroup |
Идентификатор дополнительной группы для запуска Radish |
10001 |
|
radish.runAsUser |
Идентификатор пользователя для запуска Pod Radish |
10001 |
|
radish.runAsGroup |
Идентификатор группы для запуска Pod Radish |
10001 |
|
redis.hosts |
Адреса для подключения к Redis |
- redis-0.redis.svc.cluster.local |
|
redis.image |
Ссылка на образ с Redis 6 |
docker.registry.host/slo/container-8-ubi/redis-6@sha256:63c9be2796230470d8d1977acd52f370bd552989615393da8bf2fd7992d28348 |
|
sentinel.hosts |
Адреса для подключения к Sentinel |
- redis-sentinel-0.redis-sentinel.svc.cluster.local |
|
logging.senderType |
Тип отправки логов. Возможные варианты: kafka – в Kafka, rest – на endpoint LOGA logging.restEndpoint |
kafka |
|
logging.kafkaBootstrapServers |
Список адресов кластера брокеров Kafka для журналирования |
egressgateway-rls-svc:9093 |
|
logging.kafkaTopic |
Топик Kafka для журналирования |
kafka |
|
logging.restEndpoint |
Enpoint LOGA для журналирования |
http://localhost:10080/v1/events |
|
logging.tls.securityProtocol |
Протокол шифрования, варианты: ssl, plaintext |
plaintext |
|
logging.tls.version |
Минимальная версия протокола TLS для журналирования |
TLSv1.2 |
|
logging.tls.cipherSuites |
Комбинация шифров для TLS для журналирования |
||
rls.unconfiguredConsumers.loggingEnabled |
Включение логирования несконфигурированных потребителей |
false |
Включение опции приводит к деградации производительности, связанной с повышенным логированием. |
rls.unconfiguredConsumers.periodMinutes.logging |
Период вывода в лог (уровень Info) накопленных несконфигурированных потребителей |
5 |
Минимальное значение: 1 минута. |
rls.unconfiguredConsumers.periodMinutes.clearing |
Период очистки накопленных несконфигурированных потребителей |
200 |
Минимальное значение: 30 минут. |
rls.configManager.grpcHealth.intervalSeconds |
Период проверки соединения с RL Operator |
10 |
Значение указывается в секундах, нулевое и отрицательное значения отключают проверку |
rls.configManager.grpcHealth.timeoutSeconds |
Тайм-аут проверки соединения с RL Operator |
5 |
Значение указывается в секундах |
rls.configManager.grpcHealth.failureThreshold |
Количество последовательно проваленных попыток проверки соединения, после которых RL Service инициирует переподключение к RL Operator |
2 |
Параметры числа реплик Pod:
Название |
Описание |
Значение по умолчанию |
|---|---|---|
egress.deployment.replicas |
Число реплик Egress Gateway |
2 |
operator.deployment.replicas |
Число реплик RL Operator |
2 |
rls.deployment.replicas |
Число реплик RL Service |
2 |
redis.deployment.replicas |
Число реплик Redis |
3 |
sentinel.deployment.replicas |
Число реплик Redis Sentinel |
3 |
radish.deployment.replicas |
Число реплик Radish |
2 |
Параметры лимитов и запросов ресурсов для Egress Gateway:
Название |
Значение по умолчанию |
|---|---|
egress.deployment.cpuLimit |
600m |
egress.deployment.memLimit |
900Mi |
egress.deployment.cpuRequest |
400m |
egress.deployment.memRequest |
700Mi |
Параметры лимитов и запросов ресурсов для RL Operator:
Название |
Значение по умолчанию |
|---|---|
operator.deployment.cpuLimit |
200m |
operator.deployment.memLimit |
200Mi |
operator.deployment.cpuRequest |
100m |
operator.deployment.memRequest |
100Mi |
Параметры лимитов и запросов ресурсов для Istio Sidecar RL Operator:
Название |
Значение по умолчанию |
|---|---|
operator.deployment.istio.cpuLimit |
100m |
operator.deployment.istio.memLimit |
200Mi |
operator.deployment.istio.cpuRequest |
50m |
operator.deployment.istio.memRequest |
100Mi |
Параметры лимитов и запросов ресурсов для RL Service:
Название |
Значение по умолчанию |
|---|---|
rls.deployment.cpuLimit |
500m |
rls.deployment.memLimit |
300Mi |
rls.deployment.cpuRequest |
250m |
rls.deployment.memRequest |
150Mi |
Параметры лимитов и запросов ресурсов для Istio Sidecar RL Service (объем ресурсов зависит от потребителя, рекомендуется определять по результатам нагрузочного тестирования):
Название |
Значение по умолчанию |
|---|---|
rls.deployment.istio.cpuLimit |
300m |
rls.deployment.istio.memLimit |
500Mi |
rls.deployment.istio.cpuRequest |
200m |
rls.deployment.istio.memRequest |
300Mi |
Параметры лимитов и запросов ресурсов для Radish:
Название |
Значение по умолчанию |
|---|---|
radish.deployment.cpuLimit |
500m |
radish.deployment.memLimit |
300Mi |
radish.deployment.cpuRequest |
250m |
radish.deployment.memRequest |
150Mi |
Параметры лимитов и запросов ресурсов для Istio Sidecar Radish (объем ресурсов зависит от потребителя, рекомендуется определять по результатам нагрузочного тестирования):
Название |
Значение по умолчанию |
|---|---|
radish.deployment.istio.cpuLimit |
300m |
radish.deployment.istio.memLimit |
500Mi |
radish.deployment.istio.cpuRequest |
200m |
radish.deployment.istio.memRequest |
300Mi |
Параметры лимитов и запросов ресурсов для Redis:
Название |
Значение по умолчанию |
|---|---|
redis.deployment.cpuLimit |
300m |
redis.deployment.memLimit |
500Mi |
redis.deployment.cpuRequest |
150m |
redis.deployment.memRequest |
250Mi |
Параметры лимитов и запросов ресурсов для Redis Sentinel:
Название |
Значение по умолчанию |
|---|---|
sentinel.deployment.cpuLimit |
200m |
sentinel.deployment.memLimit |
200Mi |
sentinel.deployment.cpuRequest |
100m |
sentinel.deployment.memRequest |
100Mi |
Параметры конфигурирования классов приоритетов:
Название |
Значение по умолчанию |
|---|---|
operator.deployment.priorityClassName |
Пустое значение |
rls.deployment.priorityClassName |
Пустое значение |
egress.deployment.priorityClassName |
Пустое значение |
radish.deployment.priorityClassName |
Пустое значение |
redis.deployment.priorityClassName |
Пустое значение |
sentinel.deployment.priorityClassName |
Пустое значение |
Параметры конфигурирования стратегии RollingUpdate:
Название |
Значение по умолчанию |
|---|---|
operator.deployment.maxUnavailable |
25% |
rls.deployment.maxUnavailable |
25% |
egress.deployment.maxUnavailable |
25% |
operator.deployment.maxSurge |
25% |
rls.deployment.maxSurge |
25% |
egress.deployment.maxSurge |
25% |
Список параметров для настройки артефакта GlobalRateLimit при развертывании по агентской схеме.
Название |
Описание |
Пример значения |
|---|---|---|
limits.srlsConfig.name |
Название экземпляра артефакта GlobalRateLimit |
rate-limit-config |
limits.srlsConfig.namespace |
Идентификатор namespace |
"service-namespace" |
limits.istioCommon.selectorLabels |
Labels «istio» для определения Pod Ingress/Egress Gateway |
'{"istio":"ingressIstioSelector"}' |
limits.visibility |
Отвечает за область видимости данного CRD ( |
namespace |
limits.rlsService |
Host RL Service (должен быть указан Headless Service) |
rate-limiter-headless-service |
limits.rlsServerPort |
Значение порта для RL Service |
8081 |
limits.rlsNamespace |
Идентификатор namespace, в котором развернут SRLS |
"srls-namespace" |
limits.tlsEnabled |
Включение/отключение TLS |
False |
limits.cert.ca |
Расположение сертификата cert_ca в файловой системе Pod Ingress/Egress Gateway |
|
limits.cert.crt |
Расположение сертификата cert_crt в файловой системе Pod Ingress/Egress Gateway |
|
limits.cert.key |
Расположение сертификата cert_key в файловой системе Pod Ingress/Egress Gateway |
|
endpoints |
Секция endpoints артефакта GlobalRateLimit, описанного в подразделе «Формирование и применение артефакта GlobalRateLimit» раздела Использование программного компонента документа «Руководство прикладного разработчика» |
|
bodySizesEntries |
Секция body_sizes_entries артефакта GlobalRateLimit, описанного в подразделе «Формирование и применение артефакта GlobalRateLimit» раздела Использование программного компонента документа «Руководство прикладного разработчика» |
Значения по умолчанию, приведенные в двойных фигурных скобках, указывают на стандартные переменные Job CDJE DevTools.
Параметры установки, специфичные для выбранного варианта развертывания#
Централизованный вариант развертывания:
Название |
Значение |
|---|---|
srls.deployCentr |
|
srls.deployDecentr |
|
Централизованный вариант (c шифрованием TLS) развертывания:
Название |
Значение |
|---|---|
srls.tlsEnabled |
|
srls.deployCentr |
|
srls.deployDecentr |
|
rls.tls.enable |
|
Централизованный вариант (без EnvoyFilter) развертывания:
Название |
Значение |
|---|---|
srls.deployCentr |
|
srls.deployDecentr |
|
operator.disableEnvoyFilterAutomation |
|
Примечание! Не создавать артефакты ClusterRole
srls-roleи RoleBindingsrls-role-binding, указанные в подразделе «Ролевая модель централизованного варианта развертывания» раздела «Подготовка окружения» данного документа.
При необходимости включения TLS требуется дополнительно задать параметры
srls.tlsEnabledиrls.tls.enableвtrue.
Децентрализованный вариант развертывания:
Название |
Значение |
|---|---|
srls.deployCentr |
|
srls.deployDecentr |
|
Выбор Key-Value хранилища:
Название |
Значение по умолчанию |
Описание |
|---|---|---|
srls.deployRadish |
|
Будет выполнена установка Radish |
srls.deployRedis |
|
Будет выполнена установка Redis и Redis Sentinel |
Для отправки логов средствами, встроенными в RL Operator и RL Service, необходимо дополнительно установить параметр шаблонизации:
srls.logSenderEnabled: true
Установить значения у следующих стендозависимых параметров:
egress.kafka.updateEfEnabled: true // true – обновление списка egress.kafka.bootstrap; false – фиксированный набор egress.kafka.bootstrap
egress.kafka.port: 9093
egress.kafka.proxy.port: 9093
egress.kafka.proxy.resolution: DNS
egress.kafka.bootstrap: // заполнить значение для используемого кластера kafka
- host: kafka.test.ru
port: 9093
ip: 10.0.0.1
logging.senderType: kafka
logging.kafkaBootstrapServers: egressgateway-rls-svc:{egress.kafka.port}
logging.kafkaTopic: rls_test_topic // установить свой топик для отправки
logging.tls.securityProtocol: plaintext
Выбор параметров пула соединений для RL Service#
При использовании Key-Value хранилища Radish соединения до сервера Radish хранятся в пуле для повторного использования. Переиспользование соединений позволяет повысить производительность SRLS, так как создание соединений является «дорогостоящей» операцией, особенно при использовании istio-sidecar (и особенно при включенном шифровании трафика между istio-sidecar). Пул соединений Radish может быть:
статический – количество соединений фиксированное, новые соединения создаются только при отказе открытых ранее соединений;
динамический – количество соединений может варьироваться от минимального до максимального значений, новые соединения создаются и сохраняются при необходимости, динамически созданные соединения закрываются с течением времени.
Использование пула большого размера позволяет снизить накладные расходы на отправку запросов, но увеличивает нагрузку на инфраструктуру (istio-sidecar на стороне RL Service и Radish), замедляет старт подов RL Service (ввиду необходимости создания большого количество соединений при запуске), замедляет процесс становления нового master (при выборе нового master все экземпляры RL Service пересоздают соединения). Динамический пул позволяет снизить накладные расходы во время более высокой нагрузки, но не испытывать негативных последствий большого количества соединений во время более низкой нагрузки.
Для использования статического пула значение параметра rls.radishPoolMaxSize не должно превышать значение параметра rls.radishPoolMinSize. Если же rls.radishPoolMaxSize превышает rls.radishPoolMinSize, то будет использован динамический пул. Добавление новых соединений в динамический пул происходит при необходимости использования соединения, когда в пуле нет доступных соединений. Поведение динамического пула можно описать следующим образом:
при создании пула открывается
rls.radishPoolMinSizeсоединений;если
rls.radishPoolMinSizeсоединений достаточно для обработки входящей нагрузки, то новые соединения не создаются;если при повышении нагрузки
rls.radishPoolMinSizeсоединений становится недостаточно (пул опустошается), то создаются новые соединения, но не более (rls.radishPoolMaxSize-rls.radishPoolMinSize) штук;после снижения нагрузки запускается механизм удаления динамически созданных соединений, со временем в пуле остается
rls.radishPoolMinSizeсоединений.
Динамически созданные соединения удаляются из пула с интервалом кратным rls.radishPoolShrinkThresholdSeconds секунд по rls.radishPoolShrinkValue штук за итерацию.
Установка EnvoyFilter для SRLS#
Для установки исключительно EnvoyFilter необходимо параметры в секции
srls.*выставить в значениеfalse, кроме параметров, указанных в таблице ниже.
Ограничение: текущая реализация шаблонов EnvoyFilter совместима с версиями Envoy 1.25 (Istio 1.17, SSM 3.9) и выше (версии ниже не поддерживаются).
Название |
Значение |
|---|---|
srls.deployClusterFilter |
|
srls.deployEndpointFilter |
|
Список параметров для настройки артефактов EnvoyFilter при развертывании по агентской схеме:
Название |
Описание |
Пример значения |
|---|---|---|
limits.srlsConfig.name |
Название экземпляра артефакта GlobalRateLimit |
rate-limit-config |
limits.srlsConfig.namespace |
Идентификатор namespace |
"service-namespace" |
limits.istioCommon.selectorLabels |
Labels «istio» для определения Pod Ingress/Egress Gateway |
'{"istio":"ingressIstioSelector"}' |
limits.visibility |
Отвечает за область видимости данного CRD ( |
namespace |
limits.rlsService |
Host RL Service (должен быть указан Headless Service) |
rate-limiter-headless-service |
limits.rlsServerPort |
Значение порта для SRLS |
8081 |
limits.rlsNamespace |
Идентификатор namespace, в котором развернут SRLS |
"srls-namespace" |
limits.tlsEnabled |
Включение/отключение TLS |
False |
limits.cert.ca |
Расположение сертификата cert_ca в файловой системе Pod Ingress/Egress Gateway |
|
limits.cert.crt |
Расположение сертификата cert_crt в файловой системе Pod Ingress/Egress Gateway |
|
limits.cert.key |
Расположение сертификата cert_key в файловой системе Pod Ingress/Egress Gateway |
|
endpoints |
Для корректного формирования артефактов EnvoyFilter и их наполнения в зависимости от требуемого вида идентификации потребителя (by_header, by_CN, bypath, by_size) или ресурса (by_prefix) необходимо заполнить поле |
После установки в namespace (limits.srlsConfig.namespace) появится:
EnvoyFilter «Cluster» с именем
{limits.srlsConfig.namespace}-rls-cluster;на каждый endpoint, указанный в поле
endpoints, EnvoyFilter «Endpoint» с именем{limits.srlsConfig.namespace}-{ednpoint.shortname}.
Ручная установка сервиса#
Перед установкой необходимо заполнить стендозависимые и связанные с шаблонизацией параметры. Описание параметров представлено в разделе «Параметры установки».
Разархивировать дистрибутив.
Открыть консоль и перейти в папку
package/conf/helm/application/srlsдистрибутива.Запустить установку в namespace командой:
helm upgrade srls .
Сборка образов для компонента SRLS из дистрибутива#
Разархивировать дистрибутив.
Открыть консоль и перейти в папку
package/дистрибутива.Собрать образы, выполнив команды:
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/radish/Dockerfile . -t {registry}/{registry_path}/srls/radish:{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).
Отправить образы в хранилище, выполнив команды:
docker push {registry}/{registry_path}/srls/operator:{tag}
docker push {registry}/{registry_path}/srls/rls:{tag}
docker push {registry}/{registry_path}/srls/radish:{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 (label
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», описанный выше.
Настроить Job (дистрибутив собран с поддержкой Deploy Tools).
Примечание — настройка заключается в указании для job параметров, описанных в разделе «Параметры установки» в таблицах «Параметры шаблонизации» и «Список и описание параметров».
Запустить миграцию конфигурационных файлов — набор сценариев MIGRATION_FP_CONF.
Скорректировать значения параметров шаблонизации и стендозависимых параметров.
Примечание — значение параметра srls.deployToK8s определяет платформу контейнеризации для запуска компонентов сервиса (для установки Kubernetes и Platform V DropApp значение
True).Запустить установку — сценарий HELM_DEPLOY.
Автоматизированная установка сервиса по агентской схеме с использованием Deploy Tools#
Важно!
Для корректной установки необходимо выполнить шаг «Предварительная настройка Deploy Tools», описанный выше.
Данный вариант развертывания позволяет одновременно с установкой дистрибутива бизнес-приложения или технологического сервиса произвести автоматическую установку компонента SRLS и создать артефакт GlobalRateLimit. Возможен вариант только с созданием артефакта GlobalRateLimit без установки компонента SRLS.
Настроить Job бизнес-приложения или технологического сервиса.
В схему справочника конфигураций развертывания (
subsystem.json) добавить секциюagentsдля определения конфигураций развертывания из дистрибутива SRLS:
agents: { "SRLS_agent": { "groupId": "", "artifactId": "", "version": "", "fpi-name": "", "classifier": "", "packaging": "", ... } }Запустить миграцию конфигурационных файлов, указав в поле параметров Job
COMPONENTSсконфигурированный агент — набор сценариев MIGRATION_FP_CONF.Настроечные параметры из дистрибутива SRLS будут подгружены в пространство конфигурирования бизнес-приложения или технологического сервиса.
Скорректировать значения параметров шаблонизации и стендозависимых параметров.
Для создания артефакта GlobalRateLimit необходимо выставить значение
Trueпараметра шаблонизации srls.deployLimits и заполнить параметры шаблонизации endpoints и bodySizesEntries в соответствии с разделом «Параметры установки» настоящего документа.Если требуется установить артефакты EnvoyFilter, необходимо настроить соответствующие параметры, описанные в разделе «Установка EnvoyFilter для SRLS» данного документа.
Если требуется установить дистрибутив в децентрализованном варианте развертывания SRLS, необходимо настроить соответствующие параметры, описанные в разделах «Параметры установки» и «Параметры установки, специфичные для выбранного варианта развертывания» настоящего документа.
Если установка не требуется, необходимо выставить значение
Falseпараметров шаблонизации srls.deployCentr, srls.deployDecentr.
Запустить установку бизнес-приложения или технологического сервиса, указав в поле параметров Job
COMPONENTSсконфигурированный агент — набор сценариев HELM_DEPLOY.
Автоматизированная установка сервиса с использованием Synapse Installer#
Скачать необходимую версию дистрибутива.
Получить из дистрибутива конфигурационный файл:
<дистрибутив>/package/conf/helm/application/srls/values.yaml.Поместить полученный в пункте выше файл в git-репозиторий со стендозависимыми параметрами.
Важно!
Для корректной установки файл должен быть помещен по следующему пути:
<git-репозиторий>/<namespace>/package/conf/helm/srls/values.yaml.Скорректировать значения параметров шаблонизации и стендозависимых параметров.
Примечание — значение параметра srls.deployToK8s определяет платформу контейнеризации для запуска компонентов сервиса (для установки Kubernetes и Platform V DropApp значение
True).Запустить 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: ${srls.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 – метрики для биллинга потребителей;
SRLS Radish.json — метрики работы Radish;
SRLS Radish Go Metrics.json — метрики потребления ресурсов Radish.
Место хранения:
Объединенный мониторинг Unimon — папка
package/conf/other/dashboard.Сбор и анализ метрик GATM — папка
package/conf/other/dashboard/GATM.
Для корректной работы Dashboard необходимо знать название таблицы в базе данных Druid, в которую осуществляется загрузка метрик от RL Service и RL Operator (узнать название таблицы можно у администраторов Platform V Monitor).
Для установки dashboard необходимо:
Выполнить вход в Indicator Platform V Monitor.
Перейти на вкладку «Dashboards» → «Manage» (1).
Нажать на кнопку «Import» (2).

Рисунок. Вкладка «Dashboards» компонента Indicator Platform V Monitor
Нажать на кнопку «Upload JSON file» (3).

Рисунок. Экран компонента Indicator Platform V Monitor, кнопка «Upload JSON file»
В появившемся окне выбрать файл с dashboard.
В окне выбрать источник базы данных для получения метрик «Indicator-Abyss» из выпадающего списка (4).
В поле «druidtable» изменить название (srlsunimon) таблицы в базе данных Druid на требуемое (5).

Рисунок. Экран компонента Indicator Platform V Monitor для настройки загруженного dashboard
Нажать на кнопку «Import».
Примеры dashboard:

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

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

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

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

Рисунок. Dashboard SRLS Radish.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 — приращение числа запросов свыше соответствующей квоты за период агрегации данных.
Настройка интеграции#
Ниже описана интеграция с компонентами MONA и LOGA рекомендованного АО «СберТех» продукта Platform V Monitor, с компонентом GATM рекомендованного АО «СберТех» продукта Platform V Synapse Service Mesh и Системой управления секретами Secret Management System. На усмотрение пользователя могут быть настроены интеграции с аналогичными по функциональности продуктами от других производителей.
Интеграция с программным компонентом Объединенный мониторинг Unimon (MONA) реализована в соответствии с требованиями MONA: компонент публикует метрики в формате Prometheus. Для артефактов Service RL Operator, RL Service, Radish добавлены необходимые аннотации Prometheus:
prometheus.io.path;
prometheus.io.port;
prometheus.io.scrape.
Интеграция с программным компонентом Сбор и анализ метрик (GATM) реализована в соответствии с требованиями GATM: компонент публикует метрики в формате Prometheus. Для артефактов Deployment RL Operator, RL Service, Radish добавлены необходимые аннотации:
metrics.synapse.sber/path;
metrics.synapse.sber/port;
metrics.synapse.sber/scrape.
Интеграция с программным компонентом Журналирование (LOGA) реализована в соответствии с требованиями сервиса журналирования: используется FluentBit sidecar для компонентов RL Operator и RL Service.
При установке должна быть включена опция:
srls.fluentBitSidecarEnabled = true и заполнены соответствующие поля «ufs-logger» (см. раздел «Параметры установки»).
Название |
Описание |
Значение по умолчанию |
|---|---|---|
srls.fluentBitSidecarEnabled |
Если True, то RL Operator и RL Service будут запущены с sidecar fluent-bit |
true |
TENANT_CODE |
Код тенанта, используемый в конфигурации fluent-bit ufs-logger |
Если параметр не задан в настройках инструмента/распаковки, то используется значение srls.tenantCode |
fluentBit.bootstrapServers |
Список адресов кластера брокеров Kafka для журналирования |
{ IP_ADDRESS }:9092 |
fluentBit.topic |
Название topic для журналирования |
eventlog |
fluentBit.securityProtocol |
Конфигурация закрытого соединения с Kafka |
plaintext / ssl |
Интеграция с Системой управления секретами Secret Management System реализована установкой значения
trueстендозависимого параметраsrls.vaultAgentEnabled(см. раздел «Параметры установки» данного документа).