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>
76 lines
2.5 KiB
YAML
76 lines
2.5 KiB
YAML
# Wejście do aplikacji po HTTPS (PRE-16).
|
|
#
|
|
# Poza bezpieczeństwem — Basic Auth po zwykłym http leci siecią czytelny dla
|
|
# każdego, kto słucha — TLS naprawia DWIE funkcje zepsute dziś z tego samego
|
|
# powodu: geolokalizacja przeglądarki („Tu i teraz") oraz kopiowanie promptu do
|
|
# schowka działają wyłącznie w tzw. secure context i po http po prostu odmawiają.
|
|
---
|
|
apiVersion: traefik.io/v1alpha1
|
|
kind: Middleware
|
|
metadata:
|
|
name: security-headers
|
|
namespace: astrololo
|
|
spec:
|
|
headers:
|
|
stsSeconds: 31536000 # HSTS: rok
|
|
stsIncludeSubdomains: false # dotyczy tylko tego hosta
|
|
stsPreload: false # preload to wpis na listę w przeglądarkach
|
|
# — praktycznie nieodwracalny, nie wchodzimy
|
|
forceSTSHeader: true # nagłówek także przy odpowiedziach z backendu
|
|
contentTypeNosniff: true
|
|
frameDeny: true
|
|
referrerPolicy: same-origin
|
|
---
|
|
apiVersion: traefik.io/v1alpha1
|
|
kind: Middleware
|
|
metadata:
|
|
name: redirect-https
|
|
namespace: astrololo
|
|
spec:
|
|
redirectScheme:
|
|
scheme: https
|
|
permanent: true
|
|
---
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: astrololo
|
|
namespace: astrololo
|
|
annotations:
|
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
|
traefik.ingress.kubernetes.io/router.middlewares: astrololo-security-headers@kubernetescrd
|
|
spec:
|
|
tls:
|
|
- hosts: [astrololo.czernobog.pl]
|
|
secretName: astrololo-tls # wypełnia cert-manager (tls.yaml)
|
|
rules:
|
|
- host: astrololo.czernobog.pl
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service: { name: presentation, port: { number: 8000 } }
|
|
---
|
|
# Osobny Ingress wyłącznie na porcie 80 — istnieje po to, żeby odesłać na https.
|
|
# Rozdzielone świadomie: gdyby przekierowanie wisiało na tym samym routerze, co
|
|
# wejście po https, odsyłałoby samo do siebie w kółko. Backend jest tu formalnością,
|
|
# bo żadne żądanie do niego nie dojdzie.
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: astrololo-redirect
|
|
namespace: astrololo
|
|
annotations:
|
|
traefik.ingress.kubernetes.io/router.entrypoints: web
|
|
traefik.ingress.kubernetes.io/router.middlewares: astrololo-redirect-https@kubernetescrd
|
|
spec:
|
|
rules:
|
|
- host: astrololo.czernobog.pl
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service: { name: presentation, port: { number: 8000 } }
|