diff --git a/doc/decisions/log.md b/doc/decisions/log.md index ac13e7e..cb244a5 100644 --- a/doc/decisions/log.md +++ b/doc/decisions/log.md @@ -1,5 +1,63 @@ # Решения и обоснования +## 2026-03-18 — Смена sless API endpoint: sless-api.kube5s.ru → sless.kube5s.ru + +**Решение:** Оператор sless доступен по `https://sless.kube5s.ru` (не `sless-api.kube5s.ru`). Все examples, deployments и ConfigMap обновлены. + +**Причина:** При пересоздании кластера DNS-запись `sless-api.kube5s.ru` не была обновлена — она указывала на IP `5.172.178.182` (старый, мёртвый кластер). Ingress нового кластера закреплён на `185.247.187.147`. Отдельная запись `sless.kube5s.ru` уже корректно указывала на `185.247.187.147`. +TLS handshake timeout возникал потому что старый IP принимал TCP:443, но не завершал TLS (nginx жив, бэкенд мёртв). Go HTTP клиент ждал системный таймаут (~90s) и повторял бесконечно. + +**Изменения:** +- `deployments/k8s/operator.yaml`: `EXTERNAL_URL`, `INGRESS_HOST`, ingress host → `sless.kube5s.ru` +- ConfigMap `sless-operator-config` в кластере: `EXTERNAL_URL` обновлён через `kubectl patch` +- Ingress `sless-operator` в кластере: host + TLS secret → `sless.kube5s.ru` +- Все `examples/**/main.tf`: `endpoint = "https://sless.kube5s.ru"` + +**Правило:** При пересоздании кластера — первым делом проверять соответствие DNS → ingress IP. + +--- + +## 2026-03-17 — Разделение prod/test endpoint'ов в examples/ + +**Решение:** Все `examples/` ОБЯЗАНЫ использовать `deck-api-test.ngcloud.ru` для обоих провайдеров: `nubes` и `sless` (`nubes_endpoint`). Продовый `deck-api.ngcloud.ru` — только для реальных клиентов. + +**Причина:** Смешивание prod и test endpoint'ов в одном `terraform apply` приводит к тому что ресурсы создаются в разных средах. `sless_function`/`sless_job` могут получать данные (PGHOST, credentials) из прода, а pod запускается в тест-кластере — и не может достучаться до хоста. + +**Правило для `main.tf` в examples:** +```hcl +provider "nubes" { + api_endpoint = "https://deck-api-test.ngcloud.ru/api/v1/index.cfm" +} +provider "sless" { + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" +} +``` + +--- + +## 2026-03-17 — terraform apply только на удалённом сервере + +**Решение:** `terraform init/plan/apply/destroy` для `examples/` — исключительно через SSH на сервере `naeel@5.172.178.213`. Локальный запуск запрещён. + +**Причина:** +1. Провайдер `terra.k8c.ru/naeel/sless` кэширован только на удалённом сервере +2. Локальный terraform не имеет сетевого доступа к k8s кластеру и внутренним кластерным адресам (например PGHOST вида `*.svc.cluster.local`) +3. Случайный локальный запуск с prod токенами может затронуть боевую среду + +**Как запускать:** +```bash +# Сначала синхронизировать изменения: +rsync -av -e "ssh -i /home/naeel/remote_dev/common/id_ed25519.txt" \ + /home/naeel/remote_dev/sless/examples// \ + naeel@5.172.178.213:/home/naeel/terra/sless/examples// + +# Затем запускать на remote: +ssh -i /home/naeel/remote_dev/common/id_ed25519.txt naeel@5.172.178.213 \ + 'cd /home/naeel/terra/sless/examples/ && terraform apply -auto-approve -no-color' +``` + +--- + ## 2026-03-06 — Отдельная репа для сервиса **Решение:** Serverless service в отдельной репе, не вместе с Terraform provider. diff --git a/doc/progress.md b/doc/progress.md index ae62381..6ffaa99 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -1,6 +1,22 @@ # Прогресс разработки -Последнее обновление: 2026-03-17 22:00 (все examples переведены на тест-стенд, E2E PASS) +Последнее обновление: 2026-03-18 12:00 (DNS инцидент устранён, POSTGRES E2E PASS) + +## 2026-03-18 — DNS инцидент: sless-api.kube5s.ru → мёртвый кластер + +| # | Задача | Статус | Заметки | +|---|--------|--------|----------| +| 1 | Диагностика TLS handshake timeout при `terraform apply` POSTGRES | ✅ | `sless-api.kube5s.ru` → `5.172.178.182` (старый кластер). Порт 443 принимал TCP, но TLS не завершался — Go HTTP клиент висел бесконечно | +| 2 | Подтверждение нового кластера | ✅ | `kubectl get nodes` в контексте `tazetdinovn@gmail.com@naeel-test-3` → 3 ноды Ready. Ingress IP `185.247.187.147`. DNS `sless.kube5s.ru` уже указывал на него | +| 3 | Обновить Ingress в кластере | ✅ | `kubectl patch ingress sless-operator -n sless`: host + TLS → `sless.kube5s.ru`, secretName → `sless-operator-tls-sless` | +| 4 | Обновить ConfigMap оператора | ✅ | `EXTERNAL_URL: https://sless.kube5s.ru` (было `https://sless-api.kube5s.ru`) | +| 5 | Let's Encrypt сертификат | ✅ | `certificate/sless-operator-tls-sless` READY=True, order valid — выдан сразу после смены ingress host (ACME HTTP-01 challenge на новом IP прошёл) | +| 6 | Заменить `sless-api.kube5s.ru` → `sless.kube5s.ru` во всех examples + deployments | ✅ | `POSTGRES/`, `hello-go/`, `hello-node/`, `simple-node/`, `simple-python/`, `notes-python/`, `pg-list-python/`, `demo-managed-functions/`, `README.md`, `deployments/k8s/operator.yaml` | +| 7 | POSTGRES `terraform apply` с функцией и job | ✅ PASS | `sless_function` `pg-create-table-runner` — создан за 55s. `sless_job` `pg-create-table-job-main-v13` — создан за 20s. `Apply complete! Resources: 2 added` | +| 8 | Коммит и push | ✅ | `cca3a8c` — `fix: migrate sless endpoint from sless-api.kube5s.ru to sless.kube5s.ru` | + +--- + ## 2026-03-17 — E2E тесты всех примеров на тест-стенде