Skip to main content
Version: 1.12-grodno (current)

Модуль medikt-infra

Модуль medikt-infra развертывает конфигурацию для medikt.net в Kubernetes. Основные функции:

  • Создание Kubernetes Secrets (Featbit, OpenSearch, Payments)
  • Создание Kubernetes Ingress ресурсов (nginx ingress для всех API сервисов)
  • Настройка TLS сертификатов (через cert-manager или собственные)

Расположение: terraform/modules/medikt-infra/


Создаваемые ресурсы

Secrets

Secret NameОписание
featbit-appsettingsНастройки для Feature Bits (client_secret, server_secret, streaming_uri, event_uri)
content-indexer-credsУчетные данные для Content.Indexer (OpenSearch URL, login, password)
content-searcher-credsУчетные данные для Content.Searcher (OpenSearch URL, login, password)
content-api-payment-settingsНастройки платежей (Robokassa, Fiscalization, Reconciliation)

Ingress ресурсы

Создаются только если включен соответствующий флаг nginx_ingress_*_enabled:

СервисХостАннотации
user-ssr*.medikt.netnginx, cert-manager, from-to-www-redirect
admin-spaadmin.*.medikt.netnginx, cert-manager, whitelist
admin-apiadm.*.medikt.netnginx, cert-manager, proxy-body-size
content-apicontent.*.medikt.netnginx, cert-manager, websocket
notification-apinotification.*.medikt.netnginx, cert-manager, websocket
upload-apiupload.*.medikt.netnginx, cert-manager, proxy-body-size
user-apiuser.*.medikt.netnginx, cert-manager, proxy-body-size
user-shareduser-shared.*.medikt.netnginx, cert-manager
userauth-apiauth.*.medikt.netnginx, cert-manager
userreg-apireg.*.medikt.netnginx, cert-manager
transcoder-apitranscoder.*.medikt.netnginx, cert-manager, websocket
logs-apilogs.*.medikt.netnginx, cert-manager

Параметры конфигурации

Базовые параметры

ПараметрОписаниеТипЗначение по умолчанию
namespaceОкружение (только prod)string-
client_secretfeatbit client keystring-
server_secretfeatbit server keystring-
streaming_uriURI для streamingstringwss://els-featuremgr.medikt.net
event_uriURI для событийstringhttps://els-featuremgr.medikt.net

Ingress параметры

ПараметрОписаниеТипЗначение по умолчанию
ingress_whitelist_cidrCIDR для whitelist (non-prod)stringnull
transcoderapi_ingress_whitelist_cidrWhitelist для transcoder APIstringnull
admin_spa_whitelist_cidrОтдельный whitelist для admin-spastringnull
use_cert_managerВключить cert-managerboolfalse
cluster_issuer_nameИмя ClusterIssuerstringyc-clusterissuer

Включение Ingress

ПараметрОписаниеТипЗначение по умолчанию
nginx_ingress_medikt_user_ssrIngress для user-ssrboolfalse
nginx_ingress_medikt_admin_spaIngress для admin-spaboolfalse
nginx_ingress_medikt_admin_apiIngress для admin-apiboolfalse
nginx_ingress_medikt_content_apiIngress для content-apiboolfalse
nginx_ingress_medikt_notification_apiIngress для notification-apiboolfalse
nginx_ingress_medikt_upload_apiIngress для upload-apiboolfalse
nginx_ingress_medikt_user_apiIngress для user-apiboolfalse
nginx_ingress_medikt_user_sharedIngress для user-sharedboolfalse
nginx_ingress_medikt_userauth_apiIngress для userauth-apiboolfalse
nginx_ingress_medikt_userreg_apiIngress для userreg-apiboolfalse
nginx_ingress_medikt_transcoder_apiIngress для transcoder-apiboolfalse
nginx_ingress_medikt_logs_apiIngress для logs-apiboolfalse

OpenSearch параметры

ПараметрОписание
OpenSearch__UrlURL кластера OpenSearch
OpenSearch_Indexer_LoginLogin для Content.Indexer
OpenSearch_Indexer_PasswordPassword для Content.Indexer
OpenSearch_Searcher_LoginLogin для Content.Searcher
OpenSearch_Searcher_PasswordPassword для Content.Searcher

Payments параметры (Robokassa)

ПараметрОписаниеЗначение по умолчанию
Payments_IsTestТестовый режимtrue
Payments_Fiscalization_VatНДС (None, Vat0, Vat5, Vat105, Vat7, Vat107, Vat10, Vat110, Vat20, Vat120, Vat22, Vat122)Vat22
Payments_Gateways_Robokassa_InvIdShardИндекс зоны для счетов0
Payments_Gateways_Robokassa_MerchantLoginMerchant Loginmedikt
Payments_Gateways_Robokassa_Password1Пароль для реальных ссылок-
Payments_Gateways_Robokassa_Password2Пароль для проверки подписи-
Payments_Gateways_Robokassa_TestPassword1Пароль для тестовых ссылокiQbXTDn0hZDz0O1fG8r4
Payments_Gateways_Robokassa_TestPassword2Пароль для проверки тестовых платежейkYrKywvU7n0G8J5aKN0y
Payments_Gateways_Robokassa_PaymentBaseUrlБазовый URL для оплатыhttps://auth.robokassa.ru/Merchant/Index.aspx
Payments_Gateways_Robokassa_StatusServiceUrlURL для опроса статусовhttps://auth.robokassa.ru/Merchant/WebService/Service.asmx/OpStateExt
Payments_PendingInvoiceTtlForProviderВремя жизни счета для провайдера00:10:00
Payments_PendingInvoiceTtlSkewВременной буфер00:02:00
Payments_PaymentReconciliationIntervalИнтервал реконсиляции00:01:00

Пример использования (prod-infra)

module "medikt-infra" {
provider-cloudid = var.provider-cloudid
provider-folderid = var.provider-folderid
provider-token = var.provider-token
provider-zone = var.provider-zone
source = "../modules/medikt-infra"
client_secret = lookup([for k in data.yandex_lockbox_secret_version.referenced.entries : k if k.key == "featbit_client_key"][0], "text_value", "")
server_secret = lookup([for k in data.yandex_lockbox_secret_version.referenced.entries : k if k.key == "featbit_server_key"][0], "text_value", "")
OpenSearch__Url = "https://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200"
OpenSearch_Indexer_Login = "indexer"
OpenSearch_Indexer_Password = lookup([for k in data.yandex_lockbox_secret_version.referenced.entries : k if k.key == "opensearch_indexer"][0], "text_value", "")
OpenSearch_Searcher_Login = "searcher"
OpenSearch_Searcher_Password = lookup([for k in data.yandex_lockbox_secret_version.referenced.entries : k if k.key == "opensearch_searcher"][0], "text_value", "")
namespace = "prod"
use_cert_manager = true
admin_spa_whitelist_cidr = var.admin_spa_whitelist_cidr
nginx_ingress_medikt_admin_api = true
nginx_ingress_medikt_admin_spa = true
nginx_ingress_medikt_content_api = true
nginx_ingress_medikt_logs_api = true
nginx_ingress_medikt_notification_api = true
nginx_ingress_medikt_transcoder_api = true
nginx_ingress_medikt_upload_api = true
nginx_ingress_medikt_user_api = true
nginx_ingress_medikt_user_ssr = true
nginx_ingress_medikt_userauth_api = true
nginx_ingress_medikt_userreg_api = true
}

Аннотации Ingress

Общие аннотации

annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "..." # при use_cert_manager=true
nginx.ingress.kubernetes.io/whitelist-source-range: "..." # prod: да
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";
more_set_headers "X-Forwarded-For $http_x_forwarded_for";

Специфичные аннотации

АннотацияОписаниеИспользуется в
nginx.ingress.kubernetes.io/proxy-body-sizeРазмер тела запросаcontent-api, upload-api, user-api, admin-api
nginx.org/websocket-servicesWebSocket сервисыcontent-api, notification-api, transcoder-api
nginx.ingress.kubernetes.io/from-to-www-redirectРедирект с wwwuser-ssr
nginx.ingress.kubernetes.io/whitelist-source-rangeWhitelist CIDRвсе сервисы (non-prod)

Интеграция с другими модулями

  • k8s_master: использует alb_security_group_id для безопасности
  • k8s_nodes: ingress-ноды с меткой ingress_affinity: true
  • dns_zone: доменные имена для ingress
  • k8s-secret: secrets для service accounts

Примечания

  1. Модуль создает ресурсы только в одном namespace (указанный в параметре)
  2. Ingress ресурсы создают только при включенном флаге nginx_ingress_*_enabled
  3. TLS сертификаты предоставляются через cert-manager (prod) или собственные сертификаты
  4. Whitelist применяется только в non-prod окружениях