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'ы:
- userdb-connection-string
- directorydb-connection-string
- contentdb-connection-string
- nats-connection-string
- adm-sa-creds
- featbit-appsettings
- medikt-jwt-keys
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_environment | Staging | Среда выполнения (.NET) |
mediktHost | https://ycdev.mvscp.com | Хост Medikt |
mediktRules | /legal-information | Путь к правовой информации |
yc.publicBucketName | public | Имя S3 bucket |
replicaCount | 2 | Количество реплик |
notificationApiGrpcAddress | http://medikt-notification-api:8081 | Адрес gRPC нотификационного API |
transcoderApiGrpcAddress | http://medikt-transcoder-api:8081 | Адрес gRPC транскодера |
featureFlags.eventUri | https://els-featuremgr.medikt.net | URI для событий Feature Flags |
featureFlags.streamUri | wss://els-featuremgr.medikt.net | URI для стриминга Feature Flags |
featureFlags.apiKey | <env_specific> | API-ключ Feature Flags (считывается из Secret) |
values.yaml для продакшена (.values/admin-api_prod.yaml)
| Параметр | Значение | Описание |
|---|---|---|
dotnet_environment | Production | Среда выполнения (.NET) |
yc.publicBucketName | public.medikt.net | Имя S3 bucket |
mediktHost | https://medikt.net | Хост Medikt |
cors.origins[0] | https://admin.medikt.net | Разрешенный источник CORS |
cdn.imageHost | https://cdn.medikt.net | Хост для хранения изображений |
Конфигурация CDN
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
cdn.imageHost | https://cdn.medikt.net | Хост для хранения изображений |
Конфигурация CORS
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
cors.origins | ["https://admin.medikt.net"] | Разрешенные источники CORS (принимает запросы только с поддомена, на котором развернут admin-spa) |
Конфигурация образа
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
image.repository | cr.yandex/crpt9c7igqasaqddbg0p/backend/admin.api/api | Репозиторий образа |
image.pullPolicy | IfNotPresent | Политика загрузки образа |
image.tag | null | Тег образа (по умолчанию: версия чарта) |
imagePullSecrets[0].name | yc-cr-puller | Secret для доступа к OCI-репозиторию |
Конфигурация сервиса
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
service.type | ClusterIP | Тип сервиса |
service.port | 8080 | Порт сервиса |
service.nodeport | 8088 | Порт NodePort (для ALB) |
service.portNamePrefix | adminapi | Префикс имени порта |
Конфигурация ресурсов
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
resources.requests.memory | 300Mi | Запрошенная память |
resources.limits.memory | null | Лимит памяти |
Конфигурация health probes
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
livenessProbe.httpGet.path | /healthz/live | Путь liveness probe |
readinessProbe.httpGet.path | /healthz/ready | Путь readiness probe |
livenessProbe.httpGet.port | adminapi-http | Порт health probe |
Конфигурация autoscaling
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
autoscaling.enabled | false | Включить autoscaling |
autoscaling.minReplicas | 1 | Минимальное количество реплик |
autoscaling.maxReplicas | 100 | Максимальное количество реплик |
autoscaling.targetCPUUtilizationPercentage | 80 | Целевой процент CPU |
Конфигурация affinity
| Параметр | Значение | Описание |
|---|---|---|
affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key | api_affinity | Узел должен иметь label api_affinity=true |
affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].key | yandex.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 probecurl -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.