Установка сервисов
Список сервисов
Список развертываемых сервисов и их описание:
Установка микросервисов в связке с монолитом
Данная инструкция поможет в авторизации и развертывании микросервисов и инфраструктурной обвязки.
-
Установка начинается с
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.stgKafkaSecurityProtocol
SASL механизм global.kafka.stgKafkaSaslMechanism
JAAS конфигурация 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.