doc: обновлена документация — FunctionJob, proxy /fn/, operator v0.1.5, provider v0.1.3
This commit is contained in:
@@ -130,3 +130,32 @@
|
||||
- `runtimes/nodejs20/server.js` — `http.createServer`, динамический `require(HANDLER_PATH)`
|
||||
- Зависимости через `package.json` → `npm install --omit=dev` (аналог `requirements.txt` → `pip install`)
|
||||
- `entrypoint` в HCL игнорируется для Node.js (всегда `handler.js` + `exports.handle`) — TODO: поддержать произвольный entrypoint в v1.1
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-07 — FunctionJob CRD: одноразовые запуски функций
|
||||
|
||||
**Решение:** Добавлен `FunctionJob` CRD для одноразового запуска функции с произвольным JSON-событием.
|
||||
**Причина:** Нужны sync-вызовы без HTTP — для батч-обработки, миграций, крон-задач через Terraform.
|
||||
**Реализация:**
|
||||
- `api/v1alpha1/job_types.go` — CRD: `FunctionRef`, `EventJSON`, phases: Pending/Running/Succeeded/Failed
|
||||
- `controllers/functionjob_controller.go` — создаёт k8s Job, ждёт завершения, синхронизирует статус
|
||||
- `internal/api/handler/jobs.go` — REST: CreateJob/GetJob/DeleteJob
|
||||
- `terraform/provider/internal/resources/job_resource.go` — ресурс `sless_job`
|
||||
- Настраиваемые таймауты: `build_timeout_sec` (sless_function), `wait_timeout_sec` (sless_job)
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-07 — Прокси /fn/ вместо wildcard Ingress
|
||||
|
||||
**Проблема:** wildcard DNS `*.fn.kube5s.ru` недоступен (провайдер не позволяет).
|
||||
**Решение:** HTTP-прокси внутри оператора — маршрут `GET|POST|... /fn/{namespace}/{name}` на `sless-api.kube5s.ru`.
|
||||
**Реализация:**
|
||||
- `internal/api/handler/invoke.go` — форвардит запрос к `http://{fn}.sless-fn-{ns}.svc.cluster.local:8080`
|
||||
- `internal/api/router.go` — `/fn/` регистрируется **до** auth middleware, публично доступен; `/v1/` — по-прежнему с Bearer токеном (gorilla `Use()`)
|
||||
- `internal/config/config.go` — новое поле `ExternalURL` (env `EXTERNAL_URL`)
|
||||
- `controllers/trigger_controller.go` — если `ExternalURL` задан, `Trigger.Status.URL = ExternalURL/fn/{ns}/{name}`; иначе fallback: создаёт Ingress с поддоменом (прежнее поведение)
|
||||
- `deployments/k8s/operator.yaml` — `EXTERNAL_URL=https://sless-api.kube5s.ru`
|
||||
|
||||
**URL функции:** `https://sless-api.kube5s.ru/fn/{namespace}/{name}`
|
||||
**E2E:** `curl https://sless-api.kube5s.ru/fn/default/hello-node` → `{"message":"Hello, Naeel! (nodejs20)"}`
|
||||
|
||||
Reference in New Issue
Block a user