82c73f6aa5
Deployment + Service (ClusterIP), wpięcie w kustomization, obraz dopisany do image-updatera i runbook. Obraz na liście image-updatera CELOWO od razu: obraz, którego tam nie ma, nigdy się nie podbije, choćby CI go budowało — tak przez chwilę wisiał render na :latest. Token międzywarstwowy i klucz łącza brane z TYCH SAMYCH sekretów co prezentacja: demo nie jest furtką omijającą ochronę warstwy logicznej. Hasło demo natomiast z OSOBNEGO sekretu astrololo-demo — demo odcina się jego skasowaniem, bez ruszania kont głównej aplikacji. Limit żądań niższy niż w pełnej aplikacji (60/min): demo bywa udostępniane szerzej, a każde zapytanie sięga do treści baz. Runbook zaczyna się od ostrzeżenia, bo to jedyna rzecz, którą trzeba pamiętać za każdym razem: demo pracuje na PRODUKCYJNEJ warstwie danych, więc kto dostaje adres, czyta oryginalne bazy, a jego wgrania trafiają do produkcyjnego zbioru. Pełna izolacja wymagałaby osobnej warstwy danych i nie jest dziś zrobiona. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
71 lines
2.8 KiB
YAML
71 lines
2.8 KiB
YAML
# astroklient — wersja demonstracyjna (PRE-28).
|
|
#
|
|
# Osobna usługa o DWÓCH funkcjach: dodanie pliku bazy i zapytanie o interpretację
|
|
# urodzeniową. Pozostałe funkcje nie są tu ukryte — nie ma ich w obrazie.
|
|
#
|
|
# ⚠️ PRACUJE NA PRODUKCYJNEJ WARSTWIE DANYCH (świadoma decyzja właściciela).
|
|
# Kto ma dostęp do demo, czyta oryginalne bazy interpretacyjne, a pliki przez nie
|
|
# wgrane trafiają do produkcyjnego zbioru. Dlatego konto jest OSOBNE: demo odcina
|
|
# się skasowaniem sekretu astrololo-demo, bez ruszania kont głównej aplikacji.
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: astroklient
|
|
namespace: astrololo
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels: { app: astroklient }
|
|
template:
|
|
metadata:
|
|
labels: { app: astroklient }
|
|
spec:
|
|
containers:
|
|
- name: astroklient
|
|
image: gitea.czernobog.pl/gitea/astrololo-astroklient:latest
|
|
ports: [{ containerPort: 8005 }]
|
|
env:
|
|
- name: LOGIC_URL
|
|
value: "http://logic:8001"
|
|
# Konto demo — WŁASNE, nie astrololo-auth. Sekret tworzony POZA repo
|
|
# (jak pozostałe), patrz README-astroklient.md.
|
|
- name: DEMO_USER
|
|
value: "demo"
|
|
- name: DEMO_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef: { name: astrololo-demo, key: DEMO_PASSWORD }
|
|
# Token międzywarstwowy i klucz łącza — TE SAME co prezentacja:
|
|
# demo nie jest furtką omijającą ochronę warstwy logicznej.
|
|
- name: INTERNAL_TOKEN
|
|
valueFrom:
|
|
secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN }
|
|
- name: LINK_KEY_PRESENTATION_LOGIC
|
|
valueFrom:
|
|
secretKeyRef: { name: astrololo-link, key: LINK_KEY_PRESENTATION_LOGIC }
|
|
- name: LINK_ENCRYPTION_REQUIRED
|
|
value: "true"
|
|
# Za Ingressem bezpośrednim rozmówcą jest pod Traefika. Bez tego limit
|
|
# liczyłby WSZYSTKICH do jednego wiadra i pierwsza osoba, która go
|
|
# wyklika, odcięłaby pozostałe.
|
|
- name: TRUST_PROXY
|
|
value: "true"
|
|
# Niższy niż w pełnej aplikacji: demo bywa udostępniane szerzej,
|
|
# a każde zapytanie sięga do treści baz.
|
|
- name: RATE_LIMIT_PER_MIN
|
|
value: "60"
|
|
resources:
|
|
requests: { cpu: "50m", memory: "96Mi" }
|
|
limits: { cpu: "300m", memory: "256Mi" }
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: astroklient
|
|
namespace: astrololo
|
|
spec:
|
|
# ClusterIP — wejście z zewnątrz wyłącznie przez Ingress po https, tak samo
|
|
# jak prezentacja. Druga, nieszyfrowana droga byłaby obejściem PRE-16.
|
|
type: ClusterIP
|
|
selector: { app: astroklient }
|
|
ports: [{ port: 8005, targetPort: 8005 }]
|