Перейти к содержанию

Установка сервисов

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

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

  1. Marivanna.
  2. Calypso.
  3. Camellia.
  4. Apricot.
  5. Dittany.
  6. Umbrella.

Установка микросервисов в связке с монолитом

Данная инструкция поможет в авторизации и развертывании микросервисов и инфраструктурной обвязки.

  1. Установка начинается с stingray-infra:

    • stingray-infra включает в себя все инфраструктурные зависимости;
    • stingray-stack включает в себя микросервисы.
  2. Необходимо получить от поставщика ключ от сервисного аккаунта (далее authorized_key.json) и авторизоваться с устройства, на котором будет осуществляться развертывание.

  3. На устройстве необходимо установить:

    Примечание

    Если вы используете версию Helm ниже 3.8.0, включите поддержку Open Container Initiative в клиенте Helm:

    export HELM_EXPERIMENTAL_OCI=1
    
  4. Необходимо авторизоваться для получения 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
    
  5. После успешной авторизации получим 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
    
  6. В 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
    
  7. Необходимо заполнить все необходимые параметры в 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, развёрнутому в инфраструктуре и включающему следующие параметры:

  1. FQDN сервера.
  2. TCP порт для подключения.
  3. Redis namespace.
  4. Имя пользователя.
  5. Пароль.

Значения параметров 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, а именно переменные окружения:

  1. Если Kafka использует анонимный доступ, то:

    • MINIO_NOTIFY_KAFKA_ENABLE_NO_AUTH=on.
    • MINIO_NOTIFY_KAFKA_BROKERS_NO_AUTH - адреса брокеров Kafka.
    • MINIO_NOTIFY_KAFKA_TOPIC_NO_AUTH - топик для нотификаций S3.
  2. Если 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-сервису, развёрнутому в инфраструктуре и включающему следующие параметры:

  1. URL для подключений к S3 API.
  2. Название бакета.
  3. Название региона.
  4. AWS access key.
  5. AWS secret key.

Значения параметров 1, 2 и 3 необходимо включить в файл values.yaml нашего Helm chart, параметры:

  1. global.s3.stgS3EndpointUrl.
  2. global.s3.stgS3Bucket.
  3. global.s3.stgS3Region.
  4. global.s3.stgS3AccessKey.
  5. 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) создать два сервисных аккаунта:

  1. Для авторизации монолита.
  2. Для авторизации OAuth2-proxy.

Примечание

Ниже приведен пример настройки Keycloak. Описывается необходимая последовательность действий для корректной настройки созданных клиентов.

Настройка клиента для авторизации монолита

  1. Вкладка Settings:

    • Client authentication – Enabled.
    • Authorization – Enabled.
    • Authentication flow - Service accounts roles.
    • Сохранить настройки.
  2. Вкладка Credentials:

    • Client Authenticator - Client Id and Secret.
    • Сгенерировать Client secret.
    • Сохранить настройки.
  3. Вкладка Client scopes:

    • Если есть скоуп email, то выбрать для него тип Optional.
    • Зайти в *-dedicated:
      • Добавить By configuration mapper с названием Audience. Для параметра Included Client Audience выбрать клиента, созданного для авторизации OAuth2-proxy.
      • Add to ID token и Add to access token выставить в true.
  4. Вкладка Advanced:

    • Установить значение Access Token Lifespan в Expires in: 365 days.

Настройка клиента для авторизации OAuth2-proxy

  1. Вкладка Settings:

    • Client authentication – Enabled.
    • Authorization – Enabled.
    • Authentication flow - Service accounts roles.
    • Сохранить настройки.
  2. Вкладка Credentials:

    • Client Authenticator - Client Id and Secret.
    • Сгенерировать Client secret.
    • Сохранить настройки.
  3. Вкладка Client scopes:

    • Если есть скоуп email, то выбрать для него тип Optional.
    • Зайти в *-dedicated:
      • Добавить By configuration mapper с названием Audience. Для параметра Included Client Audience выбрать клиента самого себя.
      • Add to ID token и Add to access token выставить в true.
  4. Вкладка Advanced:

    • Установить значение Access Token Lifespan в Expires in: 365 days.
К началу