Fluxheim/Dokumentacja/Rozszerzenia WASM

Rozszerzenia WASM

Dedykowana kompilacja Wasm oparta na pełnym profilu produkcyjnym, z ograniczonymi punktami polityk, ACME, metrykami i OpenTelemetry

Co daje

Dedykowana kompilacja Wasm oparta na pełnym profilu produkcyjnym, z ograniczonymi punktami polityk, ACME, metrykami i OpenTelemetry.

FunkcjaUżyj do
Decyzje dostępuDziałające na żywo natywne hooki HTTP/1 access-decision używają kolejności priorytetów, kompozycji first-deny-wins i zachowania fail-closed.
Header-hookiHooki request-headers i response-headers mogą ustawiać lub usuwać tylko dozwolone syntetyczne headery, jak w przykładzie policy-tier.
Decyzje trasHooki route-decision mogą tylko kontynuować, odrzucać albo wybierać skonfigurowane pasujące gałęzie tras canary i mirror.
Decyzje cacheHooki cache-lookup mogą kontynuować, przekazać do origin, ominąć cache albo odmówić. Hooki cache-store mogą kontynuować, pominąć zapis albo odmówić przed zapisami w cache pamięci/dysku.

Uruchom

Użyj dedykowanego archiwum lub obrazu profile-wasm; zwykła pełna kompilacja celowo pozostaje bez Wasm.

Oficjalny obraz Wasm zawiera środowisko uruchomieniowe, ale nie zawiera wtyczek operatora. Zamontuj sprawdzone moduły tylko do odczytu i przypnij każdy moduł skrótem SHA-256.

podman pull ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

podman run --rm \
  -v ./fluxheim.toml:/etc/fluxheim/fluxheim.toml:ro,Z \
  -v /srv/infra/fluxheim/plugins:/etc/fluxheim/plugins:ro,Z \
  ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

Zatwierdzone katalogi główne pluginów

Pliki pluginów muszą być zwykłymi plikami o ścieżkach bezwzględnych pod zatwierdzonymi katalogami głównymi, bez dowiązań symbolicznych ani ścieżek nadrzędnych.

[wasm]
enabled = true
plugin_roots = ["/etc/fluxheim/plugins"]
max_total_concurrent_executions = 256
max_total_preview_concurrent_executions = 32
max_total_cache_concurrent_executions = 256

[[wasm.plugins]]
name = "security_headers"
path = "/etc/fluxheim/plugins/security_headers.wasm"
sha256 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
abi = "fluxheim-policy-v1"
host_call_namespace = "fluxheim-policy-v1"
phases = ["response-headers"]
fail_mode = "fail-closed"

[[wasm.attachments]]
plugin = "security_headers"
vhost = "example"
priority = 100
phases = ["response-headers"]

Ograniczone wykonanie

Fuel, memory, table, instance, compile-timeout, compile-worker and per-call watchdog limits keep the sandbox bounded.

[wasm.plugins.limits]
max_module_bytes = "1MiB"
max_compiled_artifact_bytes = "32MiB"
max_memory_bytes = "16MiB"
max_table_elements = 10000
fuel = 5000000
timeout_ms = 50
compile_timeout_ms = 500

Notatki production

Montowanie kontenera tylko do odczytu nie chroni jego plików na hoście. Konfiguracja hosta i katalog wtyczek powinny należeć do zaufanego konta bez prawa zapisu.

  • Publiczne manifesty wtyczek muszą zawierać stały skrót SHA-256. W całym procesie jednocześnie kompilowane są najwyżej dwa moduły. Skompilowane dane mają domyślny limit 32 MiB i nie mogą przekroczyć 256 MiB.
  • Pliki konfiguracyjne i wszystkie istniejące katalogi nadrzędne muszą należeć do zaufanego właściciela i nie mogą być zapisywalne przez grupę ani innych użytkowników.
  • Przypnij wersje release albo image digests.
  • Trzymaj sekrety w plikach, environment albo container secrets, nie w public docs.

Full docs on GitHub

Polski