d4a57cc4f5
Do tej pory aplikacja chodzila po zwyklym http, a logowanie szlo przez HTTP Basic — czyli haslo leciało siecia w postaci trywialnej do podsluchania. Poza bezpieczenstwem TLS naprawia DWIE funkcje zepsute dzis z tego samego powodu: geolokalizacja przegladarki („Tu i teraz") i kopiowanie promptu do schowka dzialaja wylacznie w secure context, wiec po http po prostu odmawialy. Wlasne CA, nie Let's Encrypt — klaster stoi w LAN (traefik trzyma LoadBalancera na 192.168.1.x), wiec walidacja HTTP-01 nie ma jak dojsc z internetu, a DNS-01 wymagalby trzymania w klastrze tokena API do domeny. Co dochodzi: - tls.yaml — Issuer selfSigned -> korzen CA (10 lat, importowany raz do przegladarki) -> Issuer CA -> certyfikat serwera (90 dni, odnawiany sam). Krotki termin certyfikatu serwera jest CELOWY: odnawianie sprawdza sie wtedy co kwartal, a nie dopiero za dekade. - ingress.yaml — wejscie po https + naglowki (HSTS rok, nosniff, frameDeny) oraz osobny Ingress na porcie 80 robiacy przekierowanie. Rozdzielone swiadomie: gdyby redirect wisial na tym samym routerze co wejscie po https, odsylalby sam do siebie w kolko. - presentation: Service NodePort -> ClusterIP. NodePort byl druga, nieszyfrowana droga do aplikacji, czyli obejsciem calego PRE-16. Zmiana wymagajaca uwagi: TRUST_PROXY=true. Za Ingressem bezposrednim rozmowca jest zawsze pod Traefika, wiec bez tego limit zadan liczylby WSZYSTKICH do jednego wiadra i pierwsza osoba, ktora go wyklika, odcielaby pozostalych. Sprawdzone: Ingress i Middleware przechodza `kubectl apply --dry-run=server` na zywym klastrze (CRD traefik.io/v1alpha1 sa, entrypointy web/websecure sa). Obiekty cert-managera zwalidowane offline wobec oficjalnego schematu z CRD v1.21.0 z additionalProperties=false — literowka w nazwie pola zostalaby zlapana. `kubectl kustomize` przechodzi dla obu profili (bazowego i swisseph). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
66 lines
2.4 KiB
YAML
66 lines
2.4 KiB
YAML
# Certyfikat dla wejścia do aplikacji (PRE-16).
|
|
#
|
|
# Dlaczego WŁASNE CA, a nie Let's Encrypt: klaster stoi w LAN (traefik trzyma
|
|
# LoadBalancera na 192.168.1.x), więc walidacja HTTP-01 nie ma jak dojść z
|
|
# internetu, a DNS-01 wymagałby trzymania w klastrze tokena API do domeny.
|
|
# Własne CA nie potrzebuje niczego z zewnątrz, a certyfikaty odnawia samo.
|
|
#
|
|
# WYMAGANIE WSTĘPNE: cert-manager musi być w klastrze PRZED synchronizacją tego
|
|
# katalogu — inaczej API odrzuci poniższe obiekty jako nieznane rodzaje zasobów.
|
|
# Instalacja jednorazowa: patrz README.md.
|
|
#
|
|
# Wszystko jest w namespace `astrololo` (Issuer, nie ClusterIssuer) świadomie:
|
|
# ArgoCD ma tu włączone `prune`, a zasoby o zasięgu całego klastra chcemy trzymać
|
|
# poza aplikacją, która może zostać skasowana.
|
|
---
|
|
apiVersion: cert-manager.io/v1
|
|
kind: Issuer
|
|
metadata:
|
|
name: selfsigned
|
|
namespace: astrololo
|
|
spec:
|
|
selfSigned: {}
|
|
---
|
|
# Korzeń zaufania. TO JEST certyfikat, który raz importujesz do przeglądarki
|
|
# i systemu — patrz README. Stąd długi termin ważności: importu nie chcemy
|
|
# powtarzać co kwartał.
|
|
apiVersion: cert-manager.io/v1
|
|
kind: Certificate
|
|
metadata:
|
|
name: astrololo-ca
|
|
namespace: astrololo
|
|
spec:
|
|
isCA: true
|
|
commonName: astrololo internal CA
|
|
secretName: astrololo-ca # tu lądują klucz i certyfikat korzenia
|
|
duration: 87600h # 10 lat
|
|
renewBefore: 8760h # odnowienie na rok przed końcem
|
|
privateKey: { algorithm: ECDSA, size: 256 }
|
|
issuerRef: { name: selfsigned, kind: Issuer, group: cert-manager.io }
|
|
---
|
|
apiVersion: cert-manager.io/v1
|
|
kind: Issuer
|
|
metadata:
|
|
name: astrololo-ca
|
|
namespace: astrololo
|
|
spec:
|
|
ca: { secretName: astrololo-ca }
|
|
---
|
|
# Właściwy certyfikat serwera. Krótki termin CELOWO: przy 90 dniach odnawianie
|
|
# jest sprawdzane w praktyce co kwartał, więc awaria wyjdzie od razu, a nie za
|
|
# dziesięć lat, gdy nikt już nie będzie pamiętał, jak to działa.
|
|
apiVersion: cert-manager.io/v1
|
|
kind: Certificate
|
|
metadata:
|
|
name: astrololo-tls
|
|
namespace: astrololo
|
|
spec:
|
|
secretName: astrololo-tls # tego szuka Ingress
|
|
commonName: astrololo.czernobog.pl
|
|
dnsNames:
|
|
- astrololo.czernobog.pl
|
|
duration: 2160h # 90 dni
|
|
renewBefore: 720h # 30 dni zapasu
|
|
privateKey: { algorithm: ECDSA, size: 256, rotationPolicy: Always }
|
|
issuerRef: { name: astrololo-ca, kind: Issuer, group: cert-manager.io }
|