feat: proxy /fn/{namespace}/{name} — обход wildcard DNS
Проблема: wildcard DNS *.fn.kube5s.ru недоступен.
Решение: прокси через sless-api.kube5s.ru/fn/{ns}/{name}.
- handler/invoke.go: прокси к Service функции внутри кластера
- router.go: /fn/ без auth токена, /v1/ с auth (gorilla Use())
- config.go: поле ExternalURL (EXTERNAL_URL env)
- trigger_controller.go: если ExternalURL задан — URL = ExternalURL/fn/{ns}/{fn}
иначе fallback: Ingress + поддомен (прежнее поведение)
- operator.yaml: EXTERNAL_URL=https://sless-api.kube5s.ru, image v0.1.5
Оператор v0.1.5 задеплоен.
E2E: curl https://sless-api.kube5s.ru/fn/default/hello-node → {"message":"Hello, Naeel! (nodejs20)"}
This commit is contained in:
@@ -41,10 +41,15 @@ type Config struct {
|
||||
// BuilderImage — образ для сборки функций (kaniko или buildah)
|
||||
BuilderImage string
|
||||
|
||||
// IngressHost — базовый домен для HTTP триггеров, например: fn.kube5s.ru
|
||||
// URL функции будет: https://{funcName}-{namespace}.{IngressHost}
|
||||
// IngressHost — базовый домен для HTTP триггеров (используется только
|
||||
// если ExternalURL не задан, для обратной совместимости).
|
||||
IngressHost string
|
||||
|
||||
// ExternalURL — публичный URL API сервера, например: https://sless-api.kube5s.ru
|
||||
// Если задан, URL функции формируется как: {ExternalURL}/fn/{namespace}/{name}
|
||||
// Это позволяет обойтись без wildcard DNS *.fn.
|
||||
ExternalURL string
|
||||
|
||||
// APIToken — статический Bearer-токен для v1 REST API аутентификации.
|
||||
// В prod заменить на вызов auth-сервиса.
|
||||
APIToken string
|
||||
@@ -117,12 +122,15 @@ func Load() (*Config, error) {
|
||||
cfg.BuilderImage = v
|
||||
}
|
||||
|
||||
// IngressHost — базовый домен для HTTP триггеров
|
||||
// IngressHost — базовый домен для HTTP триггеров (fallback)
|
||||
cfg.IngressHost = os.Getenv("INGRESS_HOST")
|
||||
if cfg.IngressHost == "" {
|
||||
cfg.IngressHost = "fn.kube5s.ru"
|
||||
}
|
||||
|
||||
// ExternalURL — публичный URL сервиса для формирования URL функций
|
||||
cfg.ExternalURL = os.Getenv("EXTERNAL_URL")
|
||||
|
||||
// APIToken — обязательный токен для REST API
|
||||
cfg.APIToken = os.Getenv("SLESS_API_TOKEN")
|
||||
if cfg.APIToken == "" {
|
||||
|
||||
Reference in New Issue
Block a user