Установка сервисов
Список сервисов
Список развертываемых сервисов и их описание:
Установка микросервисов в связке с монолитом
Данная инструкция поможет в авторизации и развертывании микросервисов и инфраструктурной обвязки.
-
Установка начинается с
stingray-infra:stingray-infraвключает в себя все инфраструктурные зависимости;stingray-stackвключает в себя микросервисы.
-
Необходимо получить от поставщика ключ от сервисного аккаунта (далее
authorized_key.json) и авторизоваться с устройства, на котором будет осуществляться развертывание. -
На устройстве необходимо установить:
Примечание
Если вы используете версию Helm ниже 3.8.0, включите поддержку Open Container Initiative в клиенте Helm:
export HELM_EXPERIMENTAL_OCI=1 -
Необходимо авторизоваться для получения Helm charts:
yc config set service-account-key authorized_key.json export YC_IAM_TOKEN=$(yc iam create-token) echo $YC_IAM_TOKEN | helm registry login cr.yandex -u iam --password-stdin -
После успешной авторизации получим Helm charts:
helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/calypso:latest --untar helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/marivanna:latest --untar helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/camellia:latest --untar helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/apricot:latest --untar helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/dittany:latest --untar helm pull oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/umbrella:latest --untar -
В Kubernetes в
namespace, куда планируется развертка, необходимо создать секрет при авторизации в YCR (authorized_key.json) для пула образов с именемregistrypullsecretили заменить на свой в данной секции:imagePullSecrets: - name: registrypullsecret apiVersion: v1 kind: Secret metadata: name: registrypullsecret namespace: # где будет установлен stingray-stack data: .dockerconfigjson: >- # содержимое ключа для авторизации type: kubernetes.io/dockerconfigjson -
Необходимо заполнить все необходимые параметры в
valuesи установить чарт сstingray-infraв необходимыйnamespace, а далее и вstingray-stack.
stingray-infra
Состоит из:
dependencies:
- condition: keycloak.enabled
name: keycloak
repository: oci://registry-1.docker.io/bitnamicharts
- condition: postgresql.enabled
name: postgresql
repository: oci://registry-1.docker.io/bitnamicharts
- condition: redis.enabled
name: redis
repository: oci://registry-1.docker.io/bitnamicharts
- condition: minio.enabled
name: minio
repository: oci://registry-1.docker.io/bitnamicharts
- condition: kafka.enabled
name: kafka
repository: oci://registry-1.docker.io/bitnamicharts
- condition: oauth2-proxy.enabled
name: oauth2-proxy
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/charts
У каждой инфраструктурной зависимости есть helm-хук для контроля развертывания.
Порядок создания следующий:
- PostgreSQL.
- Keycloak / ZooKeeper.
- Keycloak-provisioning / Kafka / Redis.
- MinIO.
- MinIO-provisioning.
- OAuth2.
Примечание
stingray-infra в дефолтной развертке не имеет PV/PVC. Если это необходимо, укажите для них персистентное хранилище данных. Примеры указания есть в исходных чартах stingray-infra/charts/$SERVICE/values.yaml.
stingray-stack
Состоит из:
dependencies:
- condition: marivanna.enabled
name: marivanna
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/calypso:latest
- condition: calypso.enabled
name: calypso
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/marivanna:latest
- condition: camellia.enabled
name: camellia
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/camellia:latest
- condition: apricot.enabled
name: apricot
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/apricot:latest
- condition: dittany.enabled
name: dittany
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/dittany:latest
- condition: umbrella.enabled
name: umbrella
repository: oci://cr.yandex/crp8p3a3l1ri2431n3ce/microservices/charts/release/umbrella:latest
Описание переменных сервиса
Доступ к S3
| Имя переменной | Описание | Варианты значений | Обязательно | ConfigMap или секрет | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
STG_S3_ENDPOINT_URL |
Базовый URL для подключения к S3 | - | Да | cm | https://minio-api.k8s.stingray-mobile.ru |
.Values.global.s3.stgS3EndpointUrl |
STG_S3_ACCESS_KEY |
Ключ доступа для S3 | - | Да | secret | **** |
.Values.global.s3.stgS3AccessKey |
STG_S3_SECRET_KEY |
Секретный ключ для доступа к S3 | - | Да | secret | **** |
.Values.global.s3.stgS3SecretKey |
STG_S3_REGION |
Значение региона для Bucket S3 | - | Нет | cm | yandex-stingray-1 |
.Values.global.s3.stgS3Region |
STG_S3_BUCKET |
Содержит имя S3-бакета, который этот сервис будет использовать для создания ссылок для загрузки приложений пользователями | - | Да | cm | stingray |
.Values.global.s3.stgS3Bucket |
Доступ к Redis
| Имя переменной | Описание | Варианты значений | Обязательно | ConfigMap или секрет | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
STG_REDIS_HOST |
Сервер Redis для подключения | - | Да | cm | redis.k8s.stingray-mobile.ru |
.Values.global.redis.stgRedisHost |
STG_REDIS_PORT |
Порт для подключения к Redis | - | Да | cm | 6379 |
.Values.global.redis.stgRedisPort |
STG_REDIS_NAMESPACE |
Неймспейс в конце URL для подключения (например в redis://localhost:6379/0 неймспейсом является 0) |
- | Да | cm | 0 |
.Values.global.redis.stgRedisNamespace |
STG_REDIS_USER |
Имя пользователя для подключения в Redis | - | Да | cm | stingray-user |
.Values.global.redis.stgRedisUser |
STG_REDIS_PASS |
Пароль пользователя для подключения в Redis | - | Да | secret | stingray-password |
.Values.global.redis.stgRedisPass |
Доступ к PostgreSQL
| Имя переменной | Описание | Примечание | Варианты значений | Обязательно | ConfigMap или секрет | Пример значения | Значение в values |
|---|---|---|---|---|---|---|---|
STG_POSTGRES_HOST |
Адрес PostgreSQL-базы данных | - | - | Да | cm | postgresql.k8s.stingray-mobile.ru |
.Values.global.postgresql.stgPostgresHost |
STG_POSTGRES_PORT |
Порт для подключения | По умолчанию значение 5432 |
- | Да | cm | 5432 |
.Values.global.postgresql.stgPostgresPort |
STG_POSTGRES_DB |
БД для работы | - | - | Да | cm | stingray |
.Values.global.postgresql.stgPostgresDb |
STG_POSTGRES_USER |
Пользователь для подключения к БД | - | - | Да | cm | approcot_user |
.Values.global.postgresql.stgPostgresUser |
STG_POSTGRES_PASS |
Пароль пользователя для подключения к БД | - | - | Да | secret | approcot_password |
.Values.global.postgresql.stgPostgresPass |
STG_POSTGRES_SCHEMA |
Схема, в которой будет работать сервис | При отсутствии сервис будет определять схему по умолчанию | - | Нет | cm | approcot |
.Values.postgresql.schema |
Так же при выполнении миграций необходимо указать соответствующую УЗ, а если учетная запись одна и та же – просто продублировать значения.
| Значение в values | Обязательно | ConfigMap или секрет |
|---|---|---|
.Values.global.postgresql.stgPostgresMigrateUser |
Да | cm |
.Values.global.postgresql.stgPostgresMigratePassword |
Да | secret |
Доступ к Kafka
| Имя переменной | Описание | Примечание | Варианты значений | Обязательно | ConfigMap/секрет | Пример значения | Значение в values |
|---|---|---|---|---|---|---|---|
STG_KAFKA_BROKER_URL |
URL, где находится Kafka-брокер | - | - | Да | cm | kafka-broker-0.k8s.stingray-mobile.ru |
.Values.global.kafka.stgKafkaBrokerUrl |
STG_KAFKA_USER |
Пользователь для подключения к брокеру | При аутентификации по сертификатам не указывается | - | Нет | cm | stingray-user |
.Values.global.kafka.stgKafkaUser |
STG_KAFKA_PASSWORD |
Пароль пользователя для подключения к брокеру | При аутентификации по сертификатам не указывается | - | Нет | secret | stingray-password |
.Values.global.kafka.stgKafkaPassword |
STG_KAFKA_SASL_JAAS_CONFIG |
Настройка для SASL аутентификации | - | Нет | secret | org.apache.kafka.common.security.scram.ScramLoginModule required username="stingray-user" password=""; |
.Values.global.kafka.stgKafkaSaslJaasConfig |
|
STG_KAFKA_SECURITY_PROTOCOL |
Протокол аутентификации в Kafka-брокере | SCRAM-SHA-512 |
Нет | cm | SCRAM-SHA-512 |
.Values.global.kafka.stgKafkaSecurityProtocol |
|
STG_KAFKA_SASL_MECHANISM |
Способ аутентификации в Kafka-брокере | PLAINTEXT / SASL_PLAINTEXT / SSL |
Нет | cm | SASL_PLAINTEXT |
.Values.global.kafka.stgKafkaSaslMechanism |
|
STG_KAFKA_GROUP_ID |
Потребительская группа в Kafka | - | - | Да | cm | rose-group |
.Values.kafka.stgKafkaGroupId |
Настройки логирования
| Имя переменной | Описание | Примечание | Варианты значений | Обязательно | ConfigMap/секрет | Пример значения | Значение в values |
|---|---|---|---|---|---|---|---|
STG_LOG_LEVEL |
Определяет уровень логирования сервиса. Каждый следующий уровень включает значения предыдущего и расширяет их дополнительными сообщениями. | Значение по умолчанию - WARNING |
CRITICAL / ERROR / WARNING / INFO / DEBUG |
Нет | cm | INFO |
.Values.log.level |
STG_LOG_FILE |
Определяет файл, куда выводится лог для сервиса | Если значения нет, в файл не выводится, только в консоль | - | Нет | cm | /var/log/$SERVICE-async.log |
.Values.log.path.$SERVICE |
Для настройки логирования необходимо выполнить монтирование дополнительного volume, задать соответствующий уровень и пути, например:
log:
level: DEBUG
path:
async: /var/log/$SERVICE-async.log
rest: /var/log/$SERVICE-rest.log
migrate: /var/log/$SERVICE-migrate.log
Настройка Redis
Для настройки Redis необходимо предоставить доступ к Redis, развёрнутому в инфраструктуре и включающему следующие параметры:
- FQDN сервера.
- TCP порт для подключения.
- Redis namespace.
- Имя пользователя.
- Пароль.
Значения параметров 1, 2, 3 и 4 необходимо включить в файл values.yaml нашего Helm chart, параметры:
global.redis.stgRedisHost.global.redis.stgRedisPort.global.redis.stgRedisNamespace.global.redis.stgRedisUser.
Примечание
Значение параметра 5 global.redis.stgRedisPass необходимо включить в состав секретов.
У пользователя должны быть включены следующие права доступа: GET, SET, DELETE, RPOP, BRPOP, LPUSH.
Настройка Kafka
Для настройки Kafka необходимо предоставить доступ к Kafka, развёрнутому в инфраструктуре и включающему следующие параметры:
-
Для Kafka с анонимным доступом:
Параметр Значение в values Адреса брокеров Kafka global.kafka.stgKafkaBrokerUrlТопик для нотификаций S3 kafka.stgKafkaGroupId -
Для Kafka с авторизацией:
Параметр Значение в values Адреса брокеров Kafka global.kafka.stgKafkaBrokerUrlИмя пользователя Kafka global.kafka.stgKafkaUserПароль пользователя Kafka global.kafka.stgKafkaPasswordПротокол безопасности global.kafka.stgKafkaSecurityProtocolSASL механизм global.kafka.stgKafkaSaslMechanismJAAS конфигурация global.kafka.SaslJaasConfigТопик для нотификаций S3 kafka.stgKafkaGroupId
Примечание
Значения параметров global.kafka.stgKafkaPassword и global.kafka.SaslJaasConfig необходимо включить в состав секретов.
Настройка S3
Для настройки S3 необходимо развернуть S3-хранилище.
Примечание
В данной документации предполагается использование MinIO.
При установке MinIO необходимо задать параметры нотификаций о событиях в Kafka, а именно переменные окружения:
-
Если Kafka использует анонимный доступ, то:
MINIO_NOTIFY_KAFKA_ENABLE_NO_AUTH=on.MINIO_NOTIFY_KAFKA_BROKERS_NO_AUTH- адреса брокеров Kafka.MINIO_NOTIFY_KAFKA_TOPIC_NO_AUTH- топик для нотификаций S3.
-
Если Kafka использует авторизацию, то:
MINIO_NOTIFY_KAFKA_ENABLE=on.MINIO_NOTIFY_KAFKA_BROKERS- адреса брокеров Kafka.MINIO_NOTIFY_KAFKA_TOPIC- топик для нотификаций S3.MINIO_NOTIFY_KAFKA_SASL_USERNAME- имя пользователя Kafka.MINIO_NOTIFY_KAFKA_SASL_PASSWORD- пароль пользователя Kafka.MINIO_NOTIFY_KAFKA_SASL_MECHANISM- SASL mechanism.
Также необходимо создать бакет и ключи для авторизации в S3 API.
Необходимо предоставить доступ к S3-сервису, развёрнутому в инфраструктуре и включающему следующие параметры:
- URL для подключений к S3 API.
- Название бакета.
- Название региона.
- AWS access key.
- AWS secret key.
Значения параметров 1, 2 и 3 необходимо включить в файл values.yaml нашего Helm chart, параметры:
global.s3.stgS3EndpointUrl.global.s3.stgS3Bucket.global.s3.stgS3Region.global.s3.stgS3AccessKey.global.s3.stgS3SecretKey.
Примечание
Значение параметров 4 и 5 необходимо включить в состав секретов.
Настройка OAuth2-proxy
Для настройки OAuth2-proxy необходимо добавить в values.yaml чарта OAuth2-proxy следующие значения:
config:
annotations: {}
clientID: "client-id-keycloak-client-oauth2"
clientSecret: "client-secret-keycloak-client-oauth2"
cookieSecret: "(сгенерировать с помощью команды openssl rand -base64 32 | head -c 32 | base64 )"
configFile: |-
provider = "keycloak-oidc"
provider_display_name = "Keycloak"
oidc_issuer_url = "https://keycloak.cluster.local/realms/stingray" email_domains = [ "*" ]
insecure_oidc_allow_unverified_email = true
skip_jwt_bearer_tokens = true
code_challenge_method = "S256"
set_xauthrequest = true
set_authorization_header = true
cookie_secure = true
cookie_domains = [ ".cluster.local" ]
whitelist_domains = [ "*.cluster.local:*" ]
skip_auth_routes = [ "/internal/.*" ]
cookie_refresh = "1m"
cookie_expire = "10m"
Примечание
Если используются самоподписанные сертификаты, то необходимо добавить следующую строку:
ssl_insecure_skip_verify = true
Настройка авторизации
Для настройки авторизации необходимо в IAM-сервисе (Keycloak/Platform V IAM) создать два сервисных аккаунта:
- Для авторизации монолита.
- Для авторизации OAuth2-proxy.
Примечание
Ниже приведен пример настройки Keycloak. Описывается необходимая последовательность действий для корректной настройки созданных клиентов.
Настройка клиента для авторизации монолита
-
Вкладка Settings:
- Client authentication – Enabled.
- Authorization – Enabled.
- Authentication flow - Service accounts roles.
- Сохранить настройки.
-
Вкладка Credentials:
- Client Authenticator - Client Id and Secret.
- Сгенерировать Client secret.
- Сохранить настройки.
-
Вкладка Client scopes:
- Если есть скоуп email, то выбрать для него тип Optional.
- Зайти в *-dedicated:
- Добавить By configuration mapper с названием Audience. Для параметра Included Client Audience выбрать клиента, созданного для авторизации OAuth2-proxy.
- Add to ID token и Add to access token выставить в true.
-
Вкладка Advanced:
- Установить значение Access Token Lifespan в Expires in: 365 days.
Настройка клиента для авторизации OAuth2-proxy
-
Вкладка Settings:
- Client authentication – Enabled.
- Authorization – Enabled.
- Authentication flow - Service accounts roles.
- Сохранить настройки.
-
Вкладка Credentials:
- Client Authenticator - Client Id and Secret.
- Сгенерировать Client secret.
- Сохранить настройки.
-
Вкладка Client scopes:
- Если есть скоуп email, то выбрать для него тип Optional.
- Зайти в *-dedicated:
- Добавить By configuration mapper с названием Audience. Для параметра Included Client Audience выбрать клиента самого себя.
- Add to ID token и Add to access token выставить в true.
-
Вкладка Advanced:
- Установить значение Access Token Lifespan в Expires in: 365 days.