# astrodemo — 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. # # IZOLACJA (PRE-29): astrodemo ma WŁASNĄ warstwę logiczną i WŁASNĄ warstwę # danych (astrodemo-stack.yaml), pracujące na osobnym, pustym na starcie # udziale. Oryginalne bazy interpretacyjne są dla demo NIEOSIĄGALNE. # # Wewnątrz demo każde konto ma własną pulę plików — swój podkatalog na tym # udziale — niewidoczną dla pozostałych kont. Dzięki temu demo można rozdawać # szeroko, a pliki jednego klienta da się później przenieść do pełnej aplikacji # jako jeden katalog (patrz README-astrodemo.md). apiVersion: apps/v1 kind: Deployment metadata: name: astrodemo namespace: astrololo spec: replicas: 1 selector: matchLabels: { app: astrodemo } template: metadata: labels: { app: astrodemo } spec: containers: - name: astrodemo image: gitea.czernobog.pl/gitea/astrololo-astrodemo:latest ports: [{ containerPort: 8005 }] env: # WŁASNA warstwa logiczna, wskazująca na WŁASNĄ warstwę danych. # Wpisanie tu produkcyjnego `logic` cofnęłoby całą izolację demo # jednym słowem — dlatego stoi to tuż obok siebie w jednym pliku. - name: LOGIC_URL value: "http://logic-demo:8001" # Konto demo — WŁASNE, nie astrololo-auth. Sekret tworzony POZA repo # (jak pozostałe), patrz README-astrodemo.md. # KONTA DEMO — lista `login:sekret` po przecinku. Każde konto ma # WŁASNĄ, niewidoczną dla pozostałych pulę baz (PRE-29), więc jedno # wspólne konto oznaczałoby klientów oglądających swoje wgrania # nawzajem. Sekrety najlepiej jako hash scrypt. - name: ASTRODEMO_USERS valueFrom: secretKeyRef: { name: astrololo-astrodemo, key: ASTRODEMO_USERS } # 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" # Klucz podpisu ciasteczek sesji (LOG-34). WYMAGANY — pod bez niego # celowo nie wstaje. WŁASNY, nie ten z pełnej aplikacji: demo i produkcja # nie mają powodu uznawać nawzajem swoich sesji, a wspólny klucz # znaczyłby, że sesja z demo bywa ważna tam, gdzie nie powinna. - name: SESSION_SECRET valueFrom: secretKeyRef: { name: astrololo-astrodemo, key: SESSION_SECRET } # 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: astrodemo 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: astrodemo } ports: [{ port: 8005, targetPort: 8005 }]