Stéphane Tailland b8b1b92226 Reconcile the Flux entrypoints instead of applying them by hand
Twenty-four Flux objects across eleven repos, none of them managed by
Flux. Each repo declares its own GitRepository and Kustomization, which
is the right ownership model, but nothing ever watched the directory
those files live in — so editing one in git changed nothing until
someone remembered to kubectl apply it. That cost real time twice this
week: the CONTROL_PLANE_REF_NAME rollout looked applied and was not, and
LLM_INPUT_COST failed the build with "variable not set" while sitting
correctly in git.

The gap is the bootstrap Kustomization that `flux bootstrap` would have
created and flux-operator does not. Add one per repo, watching that
repo's own ./dev, living in ./dev so it manages itself. Nothing moves
between repos; each domain keeps its entrypoints.

This is the first of eleven, starting with platform-llm because its cost
settings are blocked behind exactly this.

Needs one kubectl apply to exist. That is the last one this repo needs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 14:21:09 +02:00
2026-08-20 17:28:05 +02:00

platform-llm

Platform-owned llm bounded context — Gateway infrastructure and the shared LLM proxy in one repo. Never split per functional domain, and never split between infra/routing here either: both are owned by the same (platform) team, unlike catalog's dataplane-catalog/catalog-api split (feature team vs. platform team, a real access boundary that doesn't exist for this domain).

What it does

Fronts OpenRouter (https://openrouter.ai) via one proxy route (/llm/v1/chat/completions) — the client's own model field selects among any OpenRouter-hosted model, not just a fixed set Kong picks.

Active policies:

  • ai-rate-limiting-advanced, token-based, both global (across all callers) and per-client (per authenticated consumer).
  • ai-prompt-guard (regex) and ai-semantic-prompt-guard (embedding-based, backed by Redis Stack) for prompt-injection/jailbreak safeguarding.
  • Two-tier auth: key-auth (static, shared key) for chatbot UIs that can't do OIDC on their outbound LLM connection (LibreChat and similar tools — structural limitation of that whole category, not fixable client-side), openid-connect for agents built in-house. Either succeeds; a request passing neither is rejected (request-termination on the fallback anonymous consumer).

Not yet active: PII redaction (ai-sanitizer) — needs a private Kong Cloudsmith registry image and an AI Gateway Enterprise entitlement, blocked pending that access. Everything else in this repo is unaffected.

Structure

  • dev/ai-gateway-kustomization.yaml + dev/ai-gateway-externalsecret.yaml — Gateway/DataPlane/Control Plane infra (same shared k8s-platform template every domain uses).
  • dev/proxy-kustomization.yaml + dev/proxy-externalsecret.yaml — the LLM proxy itself (./kong).
  • dev/gitrepository.yaml — this repo, self-referential.
S
Description
No description provided
Readme 78 KiB