7.6 KiB
Диагностика: create прошёл, адрес Polygon не открывается
Дата инцидента: 25.10.2026
Наблюдения
- В интерфейсе создания показан ответ
201; в строке также указано время завершения 08:25:13. - Браузер для
https://polygon.pythonk8s.dev.nubes.ru/сообщаетDNS_PROBE_FINISHED_NXDOMAIN. NXDOMAINозначает, что DNS-имя не найдено. Браузер не дошёл до HTTP-запроса к Flask.- Ответ
201подтверждает ответ API на создание, но сам по себе не доказывает, что все стадии операции завершились успешно, под запущен и DNS-запись доступна.
Стадии и errorLog операции не приложены, поэтому точная причина по имеющимся данным не установлена.
Проверенные риски
Домен сервиса Nubes Flask
Источник схемы Flask — /home/naeel/TF/tf_provider/generated/<stand>/resources_yaml/89_flask.yaml.
В accessConfiguration.domain короткое имя в одном октете предназначено для создания имени в служебной DNS-зоне. Для полного FQDN схема описывает проверку уже существующей A-записи, направленной на ingress.
Проверенный пример для DEV: domain = "flask-crud" даёт flask-crud.pythonk8s.dev.nubes.ru (/home/naeel/TF/tf_provider/stack/test/flask/facts.md). Поэтому следует сверить фактически отправленное значение domain и адрес state_out.connectionUrl. Если в create отправили полный FQDN, но A-запись заранее не существует, DNS-стадия может не пройти. Это гипотеза до просмотра стадий операции.
Относительный путь к YAML в Polygon
В loader.py пути заданы относительно текущей рабочей директории: по умолчанию services, а в POLYGON_STANDS обычно services/dev, services/test, services/prod. Фактические каталоги находятся внутри site/services/.
Инструкция Nubes Flask (~/HowTo/howto-flask-nubes.md) указывает запуск python site/app.py из корня репозитория. Если рабочая директория процесса действительно корень репозитория, загрузчик будет искать <repo>/services, а не <repo>/site/services; импорт конфигурации упадёт с FileNotFoundError до старта Flask и /health. Если платформа меняет рабочую директорию на site, этот путь работает. Фактический CWD деплоя и логи пода не проверены.
Этот риск может объяснить неготовность приложения после создания, но сам по себе не создаёт NXDOMAIN: DNS-имя проверяется до соединения с Flask.
Healthcheck
В app.py есть маршрут /health, возвращающий OK. Схема Nubes Flask разрешает пустой healthPath, при котором платформа проверяет доступность приложения по порту. Если в create указан непустой healthPath, нужно проверить, что это существующий маршрут и что под действительно слушает ожидаемый платформой порт.
Проверка гипотезы о старых YAML и задержке
config/loader.py перечисляет YAML только в каталогах, заданных POLYGON_STANDS, либо в services/ при отсутствии этой переменной. Каждый файл открывается и разбирается один раз при импорте config.loader; обработчики API затем используют загруженные словари из памяти. Резервные каталоги resources_yaml.bak-* из tf_provider Polygon не сканирует.
Следовательно, старый YAML может оставить устаревший сервис или параметры в ответах API и способен помешать запуску, если файл невалиден или отсутствует ожидаемый каталог. Но в коде нет основания заключать, что чтение старых YAML вызвало заметную задержку, а тем более DNS NXDOMAIN. Время загрузки YAML отдельно не измерялось.
Исправление прежнего ответа: оценки размера и времени чтения YAML, а также предположение о конкретном negative-cache TTL DNS ранее были приведены без измерений и не являются установленными фактами. То, что адрес позднее открылся, доказывает только, что в момент повторной проверки он разрешался и отвечал; почему это изменилось, без DNS-диагностики и журналов Nubes неизвестно.
Локальные удаления YAML в Polygon не отправлялись в Gitea и не развёртывались, поэтому сами по себе не меняли работающий сервис.
Что проверить для точного диагноза
- В карточке инстанса: фактические
startupConfiguration.resourceRealm,accessConfiguration.domain,appConfiguration.gitPath,appConfiguration.healthPathиstate_out.connectionUrl. - У операции
create: списокstages, результат каждой стадии иerrorLog, особенно стадии DNS и запуска приложения. - В логах пода: статус контейнера и traceback. Ошибка
Services directory not found: servicesподтвердит проблему CWD/YAML-пути. - В DNS: существует ли A-запись для точного
state_out.connectionUrlи указывает ли она на ingress выбранного resource realm.
Вывод
Непосредственно DNS_PROBE_FINISHED_NXDOMAIN означает отсутствие разрешаемой DNS-записи для запрошенного имени. Наиболее важные проверки — сопоставить domain с state_out.connectionUrl и изучить DNS-стадию. Отдельно нужно проверить рабочую директорию процесса: текущий loader.py использует относительные пути и может не найти YAML при запуске из корня репозитория.
tf_provider — источник истины для схемы Flask; его YAML в рамках этого анализа не менялись.