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

Admin.API

Сервис веб-API для управления учетными записями пользователей в Medikt.

Версия чарта: 260717.173.1600 OCI-репозиторий: cr.yandex/crpt9c7igqasaqddbg0p/backend/admin.api/charts/admin-api Ingress: adm.medikt.net (управляется через Terraform) Важно: Управление Ingress для всех сервисов осуществляется через Terraform. Параметр ingress.enabled должен быть установлен в false в values.yaml.

Необходимые Secret'ы

Для развертывания необходимы следующие Secret'ы:

ConfigMap'ы генерируются автоматически из шаблонов чарта. Ingress управляется через Terraform модуль medikt-infra (параметр nginx_ingress_admin_api).

Получение чарта из OCI-репозитория

Команда для скачивания чарта

helm pull oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/admin.api/charts/admin-api \
--version 260717.173.1600 \
--untar --untardir ./charts

Развертывание с помощью Helm

Установка

helm install admin-api ./charts/admin-api \
--namespace prod \
--create-namespace \
-f .values/admin-api_prod.yaml \
--version 260717.173.1600

Обновление

helm upgrade admin-api ./charts/admin-api \
--namespace prod \
-f .values/admin-api_prod.yaml \
--version 260717.173.1600

Удаление

helm uninstall admin-api --namespace prod

Конфигурация

values.yaml (базовые параметры)

ПараметрЗначение по умолчаниюОписание
dotnet_environmentStagingСреда выполнения (.NET)
mediktHosthttps://ycdev.mvscp.comХост Medikt
mediktRules/legal-informationПуть к правовой информации
yc.publicBucketNamepublicИмя S3 bucket
replicaCount2Количество реплик
notificationApiGrpcAddresshttp://medikt-notification-api:8081Адрес gRPC нотификационного API
transcoderApiGrpcAddresshttp://medikt-transcoder-api:8081Адрес gRPC транскодера
featureFlags.eventUrihttps://els-featuremgr.medikt.netURI для событий Feature Flags
featureFlags.streamUriwss://els-featuremgr.medikt.netURI для стриминга Feature Flags
featureFlags.apiKey<env_specific>API-ключ Feature Flags (считывается из Secret)

values.yaml для продакшена (.values/admin-api_prod.yaml)

ПараметрЗначениеОписание
dotnet_environmentProductionСреда выполнения (.NET)
yc.publicBucketNamepublic.medikt.netИмя S3 bucket
mediktHosthttps://medikt.netХост Medikt
cors.origins[0]https://admin.medikt.netРазрешенный источник CORS
cdn.imageHosthttps://cdn.medikt.netХост для хранения изображений

Конфигурация CDN

ПараметрЗначение по умолчаниюОписание
cdn.imageHosthttps://cdn.medikt.netХост для хранения изображений

Конфигурация CORS

ПараметрЗначение по умолчаниюОписание
cors.origins["https://admin.medikt.net"]Разрешенные источники CORS (принимает запросы только с поддомена, на котором развернут admin-spa)

Конфигурация образа

ПараметрЗначение по умолчаниюОписание
image.repositorycr.yandex/crpt9c7igqasaqddbg0p/backend/admin.api/apiРепозиторий образа
image.pullPolicyIfNotPresentПолитика загрузки образа
image.tagnullТег образа (по умолчанию: версия чарта)
imagePullSecrets[0].nameyc-cr-pullerSecret для доступа к OCI-репозиторию

Конфигурация сервиса

ПараметрЗначение по умолчаниюОписание
service.typeClusterIPТип сервиса
service.port8080Порт сервиса
service.nodeport8088Порт NodePort (для ALB)
service.portNamePrefixadminapiПрефикс имени порта

Конфигурация ресурсов

ПараметрЗначение по умолчаниюОписание
resources.requests.memory300MiЗапрошенная память
resources.limits.memorynullЛимит памяти

Конфигурация health probes

ПараметрЗначение по умолчаниюОписание
livenessProbe.httpGet.path/healthz/liveПуть liveness probe
readinessProbe.httpGet.path/healthz/readyПуть readiness probe
livenessProbe.httpGet.portadminapi-httpПорт health probe

Конфигурация autoscaling

ПараметрЗначение по умолчаниюОписание
autoscaling.enabledfalseВключить autoscaling
autoscaling.minReplicas1Минимальное количество реплик
autoscaling.maxReplicas100Максимальное количество реплик
autoscaling.targetCPUUtilizationPercentage80Целевой процент CPU

Конфигурация affinity

ПараметрЗначениеОписание
affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].keyapi_affinityУзел должен иметь label api_affinity=true
affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].keyyandex.cloud/preemptibleУзел не должен быть preemptible

Конфигурация приложения (appsettings.json)

Формируется из шаблона charts/admin-api/templates/configmap.yaml:

{
"Cdn": {
"ImageHost": "{{ .Values.cdn.imageHost }}"
},
"PublicBucketName": "{{ .Values.yc.publicBucketName }}",
"MediktHost": "{{ .Values.mediktHost }}",
"Cors": {
"Origins": [...]
},
"NotificationApiGrpcAddress": "{{ .Values.notificationApiGrpcAddress }}",
"TranscoderApiGrpcAddress": "{{ .Values.transcoderApiGrpcAddress }}",
"FeatureFlags": {
"EventUri": "{{ include "admin-api.GetFeatbitSecretEventsUri" . }}",
"StreamUri": "{{ include "admin-api.GetFeatbitSecretStreamingUri" . }}"
},
"Serilog": {
"Properties": {
"Environment": "{{ .Release.Namespace }}"
}
}
}

Продакшн конфигурация (.values/admin-api_prod.yaml)

dotnet_environment: Production

yc:
publicBucketName: "public.medikt.net"

mediktHost: "https://medikt.net"

cors:
origins:
- "https://admin.medikt.net"

cdn:
imageHost: "https://cdn.medikt.net"

Проверка развертывания

Проверка статуса релиза

helm list -n prod | grep

Проверка подов

kubectl get pods -n prod -l app.kubernetes.io/name=admin-api

Проверка сервиса

kubectl get svc -n prod medikt-admin-api

Проверка ConfigMap

kubectl get configmap -n prod medikt-admin-api -o jsonpath={.data}

Проверка логов

kubectl logs -n prod -l app.kubernetes.io/name=admin-api -f

Health Checks

kubectl port-forward -n prod svc/admin-api 8080:8080

Затем открыть в браузере:

  • curl -X GET http://localhost/healthz/live - liveness probe
  • curl -X GET http://localhost/healthz/ready - readiness probe

Примечания

Отправка email

Отправка email осуществляется через gRPC-сервис OutboxService из сервиса notification-api. Конфигурация email не передается в admin-api напрямую.

Feature Flags

API-ключ (featureFlags.apiKey) считывается из Secret featbit-appsettings (ключ server_secret), а не из values.yaml.