|
|
|
@@ -29,49 +29,6 @@ Runbook: **[README-pliki.md](README-pliki.md)**. Ekran „Pliki" wymaga zapisu d
|
|
|
|
|
udziału z bazami, więc znosi gwarancję z DAN-25, że baz nie da się zmienić przez
|
|
|
|
|
NFS. Co zostaje z zabezpieczeń i jak to wdrożyć — w runbooku.
|
|
|
|
|
|
|
|
|
|
## ⚠️ Wymóg węzłów: klient NFS
|
|
|
|
|
|
|
|
|
|
Wszystkie warstwy montują udziały z NAS-a, więc **każdy węzeł, na którym może
|
|
|
|
|
wylądować pod, musi mieć klienta NFS**. Bez niego kubelet nie zamontuje wolumenu:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
mount: ... bad option; for several filesystems (e.g. nfs, cifs) you might need
|
|
|
|
|
a /sbin/mount.<type> helper program
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Ten komunikat **nie oznacza problemu z udziałem ani z uprawnieniami** — serwer
|
|
|
|
|
w ogóle nie został zapytany. Jądro nie znalazło programu pomocniczego
|
|
|
|
|
`/sbin/mount.nfs`.
|
|
|
|
|
|
|
|
|
|
### Sprawdzenie
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
for N in 192.168.1.73 192.168.1.80 192.168.1.81; do
|
|
|
|
|
printf "%-15s " "$N"
|
|
|
|
|
ssh hammer@$N 'test -x /sbin/mount.nfs && echo MA-KLIENTA || echo BRAK-KLIENTA'
|
|
|
|
|
done
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Instalacja
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
ssh hammer@<węzeł> 'sudo apt-get update && sudo apt-get install -y nfs-common'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> **Na WSZYSTKICH węzłach, nie tylko na tym, gdzie pod stoi teraz.** Braku na
|
|
|
|
|
> pozostałych nie widać, dopóki scheduler tam czegoś nie przeniesie — a wtedy
|
|
|
|
|
> awaria wygląda na nagłą, choć przyczyna leżała od dawna. Dokładnie tak wyszło
|
|
|
|
|
> za pierwszym razem: pody działały miesiącami na jednym węźle, aż zejście do
|
|
|
|
|
> zera replik przy innej naprawie przeplanowało je gdzie indziej.
|
|
|
|
|
|
|
|
|
|
### Skąd wiadomo, że to TO
|
|
|
|
|
|
|
|
|
|
| komunikat | co znaczy |
|
|
|
|
|
|---|---|
|
|
|
|
|
| `bad option ... mount.<type> helper program` | **brak `nfs-common` na węźle** — serwer niepytany |
|
|
|
|
|
| `access denied by server while mounting` | serwer odmawia: eksport nieprzeładowany, węzła nie ma na liście `hosts`, albo udział wyłączony |
|
|
|
|
|
| `Permission denied` przy zapisie | montowanie działa, brakuje praw — patrz `mapall_user` i właściciel katalogu |
|
|
|
|
|
|
|
|
|
|
## ⚠️ Sekret `astrololo-auth` — utwórz PRZED wdrożeniem
|
|
|
|
|
|
|
|
|
|
Aplikacja wystawia treść **oryginalnych baz interpretacyjnych**, dlatego wymaga
|
|
|
|
@@ -90,11 +47,26 @@ read -rs -p "Hasło do aplikacji (APP_PASSWORD): " APP_PASSWORD; echo
|
|
|
|
|
|
|
|
|
|
kubectl -n astrololo create secret generic astrololo-auth \
|
|
|
|
|
--from-literal=APP_PASSWORD="$APP_PASSWORD" \
|
|
|
|
|
--from-literal=INTERNAL_TOKEN="$(openssl rand -hex 32)"
|
|
|
|
|
--from-literal=INTERNAL_TOKEN="$(openssl rand -hex 32)" \
|
|
|
|
|
--from-literal=SESSION_SECRET="$(openssl rand -hex 32)"
|
|
|
|
|
|
|
|
|
|
unset APP_PASSWORD
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`SESSION_SECRET` podpisuje ciasteczka sesji (LOG-34). **Pod bez niego celowo nie
|
|
|
|
|
wstanie**: usługa z kontami, ale bez klucza, nie odróżniłaby ważnej sesji od
|
|
|
|
|
podrobionej. Nikt go nigdy nie musi oglądać.
|
|
|
|
|
|
|
|
|
|
> **Rotacja tego klucza wylogowuje WSZYSTKICH.** To nie usterka, tylko awaryjny
|
|
|
|
|
> wyłącznik: gdy podejrzewasz, że ktoś przechwycił cudzą sesję, podmiana klucza
|
|
|
|
|
> unieważnia je wszystkie naraz.
|
|
|
|
|
>
|
|
|
|
|
> ```bash
|
|
|
|
|
> kubectl -n astrololo patch secret astrololo-auth --type=json \
|
|
|
|
|
> -p="[{\"op\":\"replace\",\"path\":\"/data/SESSION_SECRET\",\"value\":\"$(openssl rand -hex 32 | base64 | tr -d '\n')\"}]"
|
|
|
|
|
> kubectl -n astrololo rollout restart deploy/presentation
|
|
|
|
|
> ```
|
|
|
|
|
|
|
|
|
|
`INTERNAL_TOKEN` jest losowany i **nikt go nigdy nie musi oglądać** — służy tylko
|
|
|
|
|
usługom do rozmowy między sobą. `APP_PASSWORD` wpisujesz w przeglądarce
|
|
|
|
|
(użytkownik: `astrololo`, zmienny przez `APP_USER` w `presentation.yaml`).
|
|
|
|
|