fix: immediate fixes from Opus review (v0.1.22)
- trigger: CronJob moved to deployNS (sless-fn-{userNS}), was tr.Namespace
Reason: with NetworkPolicy default-deny, pod in user-ns can't reach
Service in sless-fn-ns. Co-locating CronJob with Service guarantees
connectivity regardless of NetworkPolicy configuration.
handleTriggerDeletion updated consistently.
- trigger: pin curlimages/curl to 8.5.0 (was :latest)
Reason: reproducibility, no unexpected behavior changes from image updates.
- function: sort env vars in buildDeployment (was non-deterministic map range)
Reason: non-deterministic order caused k8s to detect container spec 'change'
on every reconcile → unnecessary pod restarts. Sorted order is stable.
- function: cleanup kaniko Job in handleDeletion
Reason: if Function deleted during Building phase, kaniko Job continued
running, wasting CPU/memory and pushing an unused image.
- invoke: filter hop-by-hop headers in proxy response (RFC 2616 §13.5.1)
Reason: Transfer-Encoding especially dangerous — forwarding it corrupts
response body framing for the client.
- config: SLESS_API_TOKEN no longer required
Reason: dead code — field loaded but never passed to any component.
Auth uses validateJWT() middleware, not static token.
Namespace lifecycle: user namespaces preserved on destroy (not changed).
E2E: apply 4 resources + destroy clean. Operator v0.1.22 deployed.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Изменено: 2026-03-07
|
||||
// Изменено: 2026-03-11
|
||||
// Конфигурация сервиса — читается из env переменных при старте.
|
||||
// Все компоненты (API, builder, runner) получают конфиг через эту структуру.
|
||||
// Используем env а не файлы конфигурации — стандарт для k8s (ConfigMap/Secret → env).
|
||||
@@ -46,8 +46,9 @@ type Config struct {
|
||||
// Это позволяет обойтись без wildcard DNS *.fn.
|
||||
ExternalURL string
|
||||
|
||||
// APIToken — статический Bearer-токен для v1 REST API аутентификации.
|
||||
// В prod заменить на вызов auth-сервиса.
|
||||
// APIToken — статический Bearer-токен (legacy, не используется после перехода на JWT).
|
||||
// Поле сохранено для совместимости конфигурации.
|
||||
// Аутентификация происходит в middleware/auth.go через validateJWT().
|
||||
APIToken string
|
||||
}
|
||||
|
||||
@@ -123,11 +124,9 @@ func Load() (*Config, error) {
|
||||
// ExternalURL — публичный URL сервиса для формирования URL функций
|
||||
cfg.ExternalURL = os.Getenv("EXTERNAL_URL")
|
||||
|
||||
// APIToken — обязательный токен для REST API
|
||||
// APIToken — legacy поле, JWT от nubes читается напрямую из Authorization заголовка.
|
||||
// Не required: auth middleware использует validateJWT, а не статический токен.
|
||||
cfg.APIToken = os.Getenv("SLESS_API_TOKEN")
|
||||
if cfg.APIToken == "" {
|
||||
return nil, fmt.Errorf("SLESS_API_TOKEN is required")
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user