From 4eed10557123b475d28d508c547d880285224b48 Mon Sep 17 00:00:00 2001 From: migatu Date: Tue, 21 Jul 2026 22:33:39 +0200 Subject: [PATCH] feat(astrololo): klucze do modeli w chmurze + konfiguracja modelu lokalnego MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domyslnie dziala model LOKALNY i nic nie opuszcza sieci. Zeby dalo sie wybrac w UI OpenAI albo Anthropic, logika potrzebuje ich kluczy. - LLM_PROVIDER=local, LOCAL_BASE_URL, LOCAL_MODEL, LLM_TIMEOUT, LLM_MAX_TOKENS jawnie (nie sa tajne), - OPENAI_API_KEY i ANTHROPIC_API_KEY z osobnego sekretu `astrololo-llm`. Sekret jest OPCJONALNY (optional: true) — inaczej niz `astrololo-auth`. Auth to zabezpieczenie i ma zatrzymac pody, gdy go brak; klucze do chmury to funkcja, wiec ich brak nie moze wywracac wdrozenia. Bez nich pody startuja normalnie, tylko chmura jest niedostepna. Osobny sekret, a nie doklejenie do astrololo-auth, zeby klucze LLM dalo sie wymieniac bez dotykania hasla i tokenu miedzywarstwowego. Zwalidowane kubectl kustomize; w wyniku nadal zadnego `kind: Secret`. Instrukcja tworzenia i podmiany kluczy w astrololo/README.md. Co-Authored-By: Claude Opus 4.8 --- astrololo/README.md | 37 +++++++++++++++++++++++++++++++++++++ astrololo/logic.yaml | 24 ++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/astrololo/README.md b/astrololo/README.md index 0cd7036..c6e2900 100644 --- a/astrololo/README.md +++ b/astrololo/README.md @@ -56,6 +56,43 @@ curl -s -o /dev/null -w "z hasłem: %{http_code}\n" -u astrololo:'' http ``` Oczekiwane: **401** bez hasła, **200** z hasłem. `/health` zostaje publiczny (sondy k8s). +## Klucze do modeli w chmurze — sekret `astrololo-llm` (opcjonalny) + +Domyślnie działa **model lokalny** i nic nie opuszcza sieci. Żeby móc wybrać w UI +OpenAI lub Anthropic, potrzebne są ich klucze. Ten sekret jest **opcjonalny** +(`optional: true`) — bez niego pody startują normalnie, tylko chmura jest niedostępna. + +```bash +read -rs -p "OPENAI_API_KEY (Enter = pomiń): " OPENAI_KEY; echo +read -rs -p "ANTHROPIC_API_KEY (Enter = pomiń): " ANTHROPIC_KEY; echo + +kubectl -n astrololo create secret generic astrololo-llm \ + --from-literal=OPENAI_API_KEY="$OPENAI_KEY" \ + --from-literal=ANTHROPIC_API_KEY="$ANTHROPIC_KEY" + +unset OPENAI_KEY ANTHROPIC_KEY +kubectl -n astrololo rollout restart deploy/logic # klucze wstrzykują się przy starcie +``` + +Podmiana pojedynczego klucza (bez kasowania drugiego): +```bash +kubectl -n astrololo create secret generic astrololo-llm \ + --from-literal=OPENAI_API_KEY="$(kubectl -n astrololo get secret astrololo-llm \ + -o jsonpath='{.data.OPENAI_API_KEY}' | base64 -d)" \ + --from-literal=ANTHROPIC_API_KEY='NOWY-KLUCZ' \ + --dry-run=client -o yaml | kubectl apply -f - +kubectl -n astrololo rollout restart deploy/logic +``` + +**Adres modelu lokalnego** ustawia `LOCAL_BASE_URL` w `logic.yaml` — dopasuj do miejsca, +gdzie faktycznie stoi Ollama/vLLM. Konfiguracja jest **per dostawca** +(`LOCAL_*`, `OPENAI_*`, `ANTHROPIC_*`), więc ustawienia lokalnego modelu nie przejmują +żądań do chmury. + +> Wybór dostawcy w chmurze oznacza, że **oryginalne opisy z baz opuszczają naszą sieć**. +> Prompt można obejrzeć przed wysłaniem. Warto zawnioskować u dostawcy o Zero Data +> Retention — patrz LOG-32. + ## Czego to nie załatwia - **Brak TLS** — Basic Auth idzie po sieci w postaci łatwej do podsłuchania. Przy niezaufanej sieci potrzebny ingress z certyfikatem. diff --git a/astrololo/logic.yaml b/astrololo/logic.yaml index 82d62cc..d0c8b6e 100644 --- a/astrololo/logic.yaml +++ b/astrololo/logic.yaml @@ -26,6 +26,30 @@ spec: - name: INTERNAL_TOKEN valueFrom: secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN } + + # --- Model językowy (LOG-31) --- + # Domyślnie LOKALNY: prompt niesie oryginalne opisy z baz, więc nic nie + # opuszcza sieci. Dostawcę można przełączyć w UI przy pojedynczym żądaniu. + - name: LLM_PROVIDER + value: "local" + - name: LOCAL_BASE_URL + value: "http://ollama.ollama.svc.cluster.local:11434/v1" + - name: LOCAL_MODEL + value: "llama3.1:8b" + - name: LLM_TIMEOUT + value: "180" # dłuższe horoskopy potrafią trwać + - name: LLM_MAX_TOKENS + value: "2000" + + # Klucze do chmury — OPCJONALNE (optional: true), bo to funkcja, nie + # zabezpieczenie: bez sekretu pody startują normalnie i działa model + # lokalny. Wybór chmury w UI oznacza, że treść baz OPUSZCZA naszą sieć. + - name: OPENAI_API_KEY + valueFrom: + secretKeyRef: { name: astrololo-llm, key: OPENAI_API_KEY, optional: true } + - name: ANTHROPIC_API_KEY + valueFrom: + secretKeyRef: { name: astrololo-llm, key: ANTHROPIC_API_KEY, optional: true } resources: requests: { cpu: "100m", memory: "128Mi" } limits: { cpu: "500m", memory: "512Mi" } -- 2.52.0