b617068b16aae004426952ffb4522caaa7b8f768
11
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b31a18918c
|
docs(gotenberg): point the values comments at the switch, not at extraPorts
Validate Helm Charts / Detect changed charts (pull_request) Successful in 4s
Validate Helm Charts / Bump level (pull_request) Successful in 5s
Validate Helm Charts / Resource quantities (pull_request) Successful in 16s
Validate Helm Charts / Selector match (pull_request) Successful in 10s
Validate Helm Charts / YAML scalars (pull_request) Successful in 18s
Validate Helm Charts / NetworkPolicy (pull_request) Successful in 19s
Validate Helm Charts / Build apache-tika (pull_request) Successful in 9s
Validate Helm Charts / Trivy config apache-tika (pull_request) Successful in 19s
Validate Helm Charts / Build bentopdf (pull_request) Successful in 12s
Validate Helm Charts / Build bulwark (pull_request) Successful in 9s
Validate Helm Charts / Build calibre-web-automated (pull_request) Successful in 12s
Validate Helm Charts / Build freesailarr (pull_request) Successful in 4s
Validate Helm Charts / Build garage (pull_request) Successful in 4s
Validate Helm Charts / Build gotenberg (pull_request) Successful in 5s
Validate Helm Charts / Build homeassistant (pull_request) Successful in 7s
Validate Helm Charts / Build matrix-synapse (pull_request) Successful in 5s
Validate Helm Charts / Build keycloak (pull_request) Successful in 6s
Validate Helm Charts / Build minecraft-router (pull_request) Successful in 5s
Validate Helm Charts / Build minecraft-server (pull_request) Successful in 6s
Validate Helm Charts / Build outline (pull_request) Successful in 5s
Validate Helm Charts / Build paperless-ngx (pull_request) Successful in 7s
Validate Helm Charts / Build patchmon (pull_request) Successful in 8s
Validate Helm Charts / Build rallly (pull_request) Successful in 9s
Validate Helm Charts / Build rss-bridge (pull_request) Successful in 5s
Validate Helm Charts / Build samba (pull_request) Successful in 7s
Validate Helm Charts / Build satisfactory (pull_request) Successful in 6s
Validate Helm Charts / Build searxng (pull_request) Successful in 7s
Validate Helm Charts / Build stalwart (pull_request) Successful in 7s
Validate Helm Charts / Build sure (pull_request) Successful in 5s
Validate Helm Charts / Build teamspeak-server (pull_request) Successful in 5s
Validate Helm Charts / Build template-chart (pull_request) Successful in 6s
Validate Helm Charts / Build urlaubsverwaltung (pull_request) Successful in 8s
Validate Helm Charts / Build valkey (pull_request) Successful in 16s
Validate Helm Charts / Build ytdlp-web-player (pull_request) Successful in 9s
Validate Helm Charts / Build zipline (pull_request) Successful in 4s
Validate Helm Charts / Trivy config bulwark (pull_request) Successful in 12s
Validate Helm Charts / Trivy config cyberchef (pull_request) Successful in 15s
Validate Helm Charts / Trivy config gotenberg (pull_request) Successful in 22s
Validate Helm Charts / Trivy config bentopdf (pull_request) Successful in 14s
Validate Helm Charts / Trivy config calibre-web-automated (pull_request) Successful in 12s
Validate Helm Charts / Trivy config freesailarr (pull_request) Successful in 15s
Validate Helm Charts / Trivy config garage (pull_request) Successful in 25s
Validate Helm Charts / Trivy config homeassistant (pull_request) Successful in 17s
Validate Helm Charts / Trivy config keycloak (pull_request) Successful in 13s
Validate Helm Charts / Trivy config matrix-synapse (pull_request) Successful in 14s
Validate Helm Charts / Trivy config minecraft-router (pull_request) Successful in 11s
Validate Helm Charts / Trivy config rss-bridge (pull_request) Successful in 15s
Validate Helm Charts / Trivy config satisfactory (pull_request) Successful in 14s
Validate Helm Charts / Trivy config sure (pull_request) Successful in 13s
Validate Helm Charts / Trivy config outline (pull_request) Successful in 16s
Validate Helm Charts / Trivy config paperless-ngx (pull_request) Successful in 20s
Validate Helm Charts / Trivy config rallly (pull_request) Successful in 14s
Validate Helm Charts / Trivy config samba (pull_request) Successful in 14s
Validate Helm Charts / Trivy config searxng (pull_request) Successful in 15s
Validate Helm Charts / Trivy config stalwart (pull_request) Successful in 14s
Validate Helm Charts / Trivy config template-chart (pull_request) Successful in 13s
Validate Helm Charts / Trivy config urlaubsverwaltung (pull_request) Successful in 14s
Validate Helm Charts / Trivy config valkey (pull_request) Successful in 15s
Validate Helm Charts / Trivy config voucher-vault (pull_request) Successful in 13s
Validate Helm Charts / Trivy config ytdlp-web-player (pull_request) Successful in 14s
Install-test / Install-test bulwark (pull_request) Successful in 1m15s
Install-test / Install-test garage (pull_request) Successful in 1m6s
Install-test / Install-test keycloak (pull_request) Successful in 2m13s
Install-test / Install-test matrix-synapse (pull_request) Successful in 1m15s
Install-test / Install-test minecraft-server (pull_request) Successful in 1m51s
Install-test / Install-test patchmon (pull_request) Successful in 1m14s
Install-test / Install-test apache-tika (pull_request) Successful in 1m4s
Install-test / Install-test bentopdf (pull_request) Successful in 1m10s
Install-test / Install-test calibre-web-automated (pull_request) Successful in 1m55s
Install-test / Install-test cyberchef (pull_request) Successful in 51s
Install-test / Install-test homeassistant (pull_request) Successful in 2m9s
Install-test / Install-test minecraft-router (pull_request) Successful in 41s
Install-test / Install-test outline (pull_request) Successful in 2m23s
Install-test / Install-test paperless-ngx (pull_request) Successful in 2m53s
Install-test / Install-test rallly (pull_request) Successful in 1m32s
Install-test / Install-test sure (pull_request) Successful in 2m11s
Install-test / Install-test rss-bridge (pull_request) Successful in 1m4s
Install-test / Install-test samba (pull_request) Successful in 1m12s
Install-test / Install-test searxng (pull_request) Successful in 1m1s
Install-test / Install-test stalwart (pull_request) Successful in 1m25s
Install-test / Install-test urlaubsverwaltung (pull_request) Successful in 1m40s
Install-test / Install-test valkey (pull_request) Successful in 1m16s
Install-test / Install-test voucher-vault (pull_request) Successful in 1m53s
Install-test / Install-test ytdlp-web-player (pull_request) Successful in 55s
Install-test / Install-test zipline (pull_request) Successful in 1m57s
Validate Helm Charts / HTTPRoute match (pull_request) Successful in 10s
Validate Helm Charts / Build cyberchef (pull_request) Successful in 8s
Validate Helm Charts / Build voucher-vault (pull_request) Successful in 17s
Validate Helm Charts / Trivy config minecraft-server (pull_request) Successful in 12s
Validate Helm Charts / Trivy config patchmon (pull_request) Successful in 17s
Validate Helm Charts / Trivy config teamspeak-server (pull_request) Successful in 25s
Validate Helm Charts / Trivy config zipline (pull_request) Successful in 18s
Install-test / Install-test freesailarr (pull_request) Successful in 3m20s
Install-test / Install-test gotenberg (pull_request) Successful in 1m19s
Install-test / Install-test teamspeak-server (pull_request) Successful in 1m20s
Validate Helm Charts / Install-test (pull_request) Successful in 44m14s
Two leftovers from before the switch existed. The summary still told the reader to set egress.extraPorts: [80, 443] for remote assets, and the extraPorts hint still offered the same pair as its headline case - both now say to use egress.remoteAssets instead, and the extraPorts hint says why: a bare 80/443 in that list records no reason, which is the whole argument for the named value. Also sharpens the sentence that matters: HTML conversion keeps the EMBEDDED content and loses the images it would have FETCHED. The two words were doing the work and the old wording blurred them. Part of #5 |
||
|
|
e3f6256244
|
feat(gotenberg): a named switch for remote assets, off by default
Validate Helm Charts / Detect changed charts (pull_request) Successful in 51s
Validate Helm Charts / Selector match (pull_request) Successful in 10s
Validate Helm Charts / Resource quantities (pull_request) Successful in 11s
Validate Helm Charts / HTTPRoute match (pull_request) Successful in 10s
Validate Helm Charts / Build apache-tika (pull_request) Successful in 5s
Validate Helm Charts / Trivy config apache-tika (pull_request) Successful in 13s
Validate Helm Charts / Build calibre-web-automated (pull_request) Successful in 5s
Validate Helm Charts / Bump level (pull_request) Successful in 4s
Validate Helm Charts / YAML scalars (pull_request) Successful in 9s
Validate Helm Charts / NetworkPolicy (pull_request) Successful in 10s
Validate Helm Charts / Build bulwark (pull_request) Successful in 6s
Validate Helm Charts / Build cyberchef (pull_request) Successful in 6s
Validate Helm Charts / Build freesailarr (pull_request) Successful in 5s
Validate Helm Charts / Build gotenberg (pull_request) Successful in 6s
Validate Helm Charts / Build homeassistant (pull_request) Successful in 5s
Validate Helm Charts / Build keycloak (pull_request) Successful in 6s
Validate Helm Charts / Build matrix-synapse (pull_request) Successful in 5s
Validate Helm Charts / Build minecraft-router (pull_request) Successful in 6s
Validate Helm Charts / Build outline (pull_request) Successful in 5s
Validate Helm Charts / Build paperless-ngx (pull_request) Successful in 5s
Validate Helm Charts / Build rallly (pull_request) Successful in 5s
Validate Helm Charts / Build samba (pull_request) Successful in 5s
Validate Helm Charts / Build satisfactory (pull_request) Successful in 5s
Validate Helm Charts / Build searxng (pull_request) Successful in 6s
Validate Helm Charts / Build teamspeak-server (pull_request) Successful in 5s
Validate Helm Charts / Build patchmon (pull_request) Successful in 5s
Validate Helm Charts / Build template-chart (pull_request) Successful in 5s
Validate Helm Charts / Build urlaubsverwaltung (pull_request) Successful in 5s
Validate Helm Charts / Build valkey (pull_request) Successful in 5s
Validate Helm Charts / Build voucher-vault (pull_request) Successful in 6s
Validate Helm Charts / Build ytdlp-web-player (pull_request) Successful in 6s
Validate Helm Charts / Trivy config bulwark (pull_request) Successful in 19s
Validate Helm Charts / Trivy config calibre-web-automated (pull_request) Successful in 16s
Validate Helm Charts / Trivy config cyberchef (pull_request) Successful in 13s
Validate Helm Charts / Trivy config bentopdf (pull_request) Successful in 11s
Install-test / Install-test apache-tika (pull_request) Successful in 1m31s
Validate Helm Charts / Trivy config garage (pull_request) Successful in 21s
Validate Helm Charts / Trivy config homeassistant (pull_request) Successful in 12s
Validate Helm Charts / Trivy config keycloak (pull_request) Successful in 13s
Validate Helm Charts / Trivy config matrix-synapse (pull_request) Successful in 18s
Install-test / Install-test bentopdf (pull_request) Successful in 55s
Validate Helm Charts / Trivy config minecraft-router (pull_request) Successful in 14s
Validate Helm Charts / Trivy config minecraft-server (pull_request) Successful in 13s
Validate Helm Charts / Trivy config outline (pull_request) Successful in 15s
Install-test / Install-test bulwark (pull_request) Successful in 1m20s
Validate Helm Charts / Trivy config patchmon (pull_request) Successful in 15s
Validate Helm Charts / Trivy config rallly (pull_request) Successful in 11s
Validate Helm Charts / Trivy config rss-bridge (pull_request) Successful in 12s
Validate Helm Charts / Trivy config samba (pull_request) Successful in 14s
Validate Helm Charts / Trivy config satisfactory (pull_request) Successful in 26s
Validate Helm Charts / Trivy config searxng (pull_request) Successful in 23s
Validate Helm Charts / Trivy config stalwart (pull_request) Successful in 13s
Install-test / Install-test calibre-web-automated (pull_request) Successful in 1m52s
Validate Helm Charts / Trivy config sure (pull_request) Successful in 15s
Validate Helm Charts / Trivy config teamspeak-server (pull_request) Successful in 12s
Validate Helm Charts / Trivy config template-chart (pull_request) Successful in 14s
Validate Helm Charts / Trivy config urlaubsverwaltung (pull_request) Successful in 21s
Install-test / Install-test cyberchef (pull_request) Successful in 1m2s
Validate Helm Charts / Trivy config valkey (pull_request) Successful in 15s
Validate Helm Charts / Trivy config voucher-vault (pull_request) Successful in 13s
Validate Helm Charts / Trivy config ytdlp-web-player (pull_request) Successful in 13s
Validate Helm Charts / Trivy config zipline (pull_request) Successful in 14s
Install-test / Install-test freesailarr (pull_request) Successful in 3m42s
Install-test / Install-test garage (pull_request) Successful in 1m14s
Install-test / Install-test gotenberg (pull_request) Successful in 1m32s
Install-test / Install-test keycloak (pull_request) Successful in 2m34s
Install-test / Install-test matrix-synapse (pull_request) Successful in 1m31s
Install-test / Install-test minecraft-router (pull_request) Successful in 48s
Install-test / Install-test minecraft-server (pull_request) Successful in 1m52s
Install-test / Install-test outline (pull_request) Successful in 2m7s
Install-test / Install-test paperless-ngx (pull_request) Successful in 2m56s
Install-test / Install-test patchmon (pull_request) Successful in 1m22s
Install-test / Install-test rallly (pull_request) Successful in 1m38s
Install-test / Install-test rss-bridge (pull_request) Successful in 42s
Install-test / Install-test samba (pull_request) Successful in 1m12s
Install-test / Install-test searxng (pull_request) Successful in 1m13s
Install-test / Install-test stalwart (pull_request) Successful in 1m18s
Install-test / Install-test teamspeak-server (pull_request) Successful in 1m19s
Install-test / Install-test urlaubsverwaltung (pull_request) Successful in 1m33s
Install-test / Install-test valkey (pull_request) Successful in 1m14s
Install-test / Install-test voucher-vault (pull_request) Successful in 1m54s
Validate Helm Charts / Install-test (pull_request) Successful in 45m59s
Install-test / Install-test ytdlp-web-player (pull_request) Successful in 54s
Install-test / Install-test zipline (pull_request) Successful in 1m57s
Validate Helm Charts / Build bentopdf (pull_request) Successful in 6s
Validate Helm Charts / Build garage (pull_request) Successful in 6s
Validate Helm Charts / Build minecraft-server (pull_request) Successful in 5s
Validate Helm Charts / Build stalwart (pull_request) Successful in 5s
Validate Helm Charts / Build sure (pull_request) Successful in 6s
Validate Helm Charts / Build rss-bridge (pull_request) Successful in 6s
Validate Helm Charts / Build zipline (pull_request) Successful in 6s
Validate Helm Charts / Trivy config freesailarr (pull_request) Successful in 20s
Validate Helm Charts / Trivy config gotenberg (pull_request) Successful in 12s
Validate Helm Charts / Trivy config paperless-ngx (pull_request) Successful in 21s
Install-test / Install-test homeassistant (pull_request) Successful in 2m24s
Install-test / Install-test sure (pull_request) Successful in 2m15s
The maintainer's decision, and it keeps restrictive-by-default intact: not an
opening but networkPolicy.egress.remoteAssets, whose purpose is in its name
instead of being an unplaceable [80, 443] in extraPorts. Additive inside the
major this chart already carries in this PR, so no second version step.
WHAT IT BUYS, measured rather than assumed. paperless-ngx splits a mail into
two steps with two separate cluster-internal endpoints: the .eml goes to TIKA
for parsing (PAPERLESS_TIKA_ENDPOINT) and the resulting HTML comes here for
rendering (PAPERLESS_TIKA_GOTENBERG_ENDPOINT). Of the images in that HTML,
EMBEDDED ones are MIME parts inside the file and need no network from either
service - which is why apache-tika stays DNS-only and is unchanged - while
REMOTE ones (<img src="https://...">) are fetched by Chromium here, at render
time. With the switch off they are silently dropped: the PDF is produced and is
simply missing them, nothing fails, nothing is logged, no probe notices. That
invisibility is the reason the switch exists.
NOT CHECKED, and written down as not checked rather than implied: whether
paperless-ngx re-embeds the images Tika extracted before handing the HTML over.
If it does not, embedded images would be lost too - but that would be
pre-existing paperless behaviour and not this policy, so the switch is not a
fix for it.
The SSRF argument is unchanged and is why the default is off: Gotenberg drives
a headless Chromium and 3000 is its probe port, so the service is reachable
from the whole cluster, and outbound web access turns anything that can POST
here into a way of fetching arbitrary URLs.
Two things the implementation needed, and one of them was a real defect. The
NOTES.txt branch read .Values.networkPolicy.egress.remoteAssets directly, which
fails the whole render with "nil pointer evaluating interface
{}.remoteAssets" when an operator erases the egress block - the schema permits
null there, and issue #99's rule is that an erased block means "the default
applies", not a broken render. It is null-safe now, and an erased block falls
back to DNS-only, which is the restrictive direction. And ci/networkpolicy/
gotenberg.yaml makes the switch's ON state permanent in CI rather than checked
once by hand: it renders both the switch's egress rule and the
source-restricted probe branch, so all five assertions run over the toggle in
both positions on every pull request. Worth having precisely because assertions
2 and 3 look at INGRESS rules - an egress mistake has no other mechanical
check.
Also, three things that were load-bearing and written nowhere:
- NO CHART SHIPS allowedNamespaces PRE-FILLED. A chart naming mc-router or
stalwart in its defaults would bake in an assumption about this cluster's
namespace layout, which a chart cannot keep true. Restrictive is the default
and filling it is the DEPLOYMENT adaptation - so the release-side one-liners
this sweep produces are the expected procedure, not a defect list, and the
major on each chart is what announces them. ingressController is the one
exception, because it names a cluster component rather than a tenant.
- A POLICY APPLIES TO TRAFFIC THAT CAME THROUGH A SERVICE, and that is why the
ingressController rule works at all. A Service is only destination NAT and
the policy acts at the pod's interface. What the Service changes is the
SOURCE ADDRESS: pod -> ClusterIP -> pod preserves it, so a podSelector can
still match Traefik; NodePort traffic with the default externalTrafficPolicy:
Cluster is masqueraded to a node, which is why those rules are left open.
stalwart's template already carried the second half; the first half is the
one everything rests on.
- AND THE ONE CLUSTER SETTING THIS CONVENTION DEPENDS ON AND CANNOT CHECK:
Traefik must not run with hostNetwork. Measured 2026-10-14 - the DaemonSet
has none and its pods carry real pod IPs (10.42.3.120, 10.42.4.94,
10.42.0.187 in the pod CIDR 10.42.0.0/16, nodes on entirely different
addresses), and only because of that does a podSelector match it. On host
networking those pods share the node's namespace, stop being selectable,
and EVERY WEB CHART GOES DARK AT ONCE while every pod stays Ready, because
the probe path does not run through the controller. Same class as
--enable-certificate-owner-ref in #126: undetectable from here. It is in
README and in the header of template-chart's policy, so whoever changes the
controller's networking meets the consequence on the thing they are changing.
Part of #5
|
||
|
|
ee9ae8a724
|
feat!: NetworkPolicy in six more charts, on by default
Install-test / Install-test apache-tika (pull_request) Successful in 1m21s
Install-test / Install-test bentopdf (pull_request) Successful in 1m16s
Install-test / Install-test cyberchef (pull_request) Successful in 1m6s
Install-test / Install-test gotenberg (pull_request) Successful in 1m32s
Install-test / Install-test outline (pull_request) Failing after 1m16s
Install-test / Install-test rss-bridge (pull_request) Successful in 1m1s
Install-test / Install-test searxng (pull_request) Successful in 1m13s
Validate Helm Charts / Install-test (pull_request) Failing after 9m57s
Install-test / Install-test ytdlp-web-player (pull_request) Successful in 1m11s
Validate Helm Charts / Detect changed charts (pull_request) Successful in 3s
Validate Helm Charts / HTTPRoute match (pull_request) Failing after 13s
Validate Helm Charts / Selector match (pull_request) Failing after 17s
Validate Helm Charts / YAML scalars (pull_request) Failing after 16s
Validate Helm Charts / NetworkPolicy (pull_request) Failing after 9s
Validate Helm Charts / Build apache-tika (pull_request) Successful in 5s
Validate Helm Charts / Trivy config apache-tika (pull_request) Successful in 13s
Validate Helm Charts / Build bentopdf (pull_request) Successful in 5s
Validate Helm Charts / Build outline (pull_request) Successful in 5s
Validate Helm Charts / Build template-chart (pull_request) Successful in 5s
Validate Helm Charts / Trivy config outline (pull_request) Failing after 12s
Validate Helm Charts / Trivy config searxng (pull_request) Successful in 15s
Validate Helm Charts / Trivy config template-chart (pull_request) Successful in 14s
Validate Helm Charts / Build gotenberg (pull_request) Successful in 5s
Validate Helm Charts / Build rss-bridge (pull_request) Successful in 5s
Validate Helm Charts / Build searxng (pull_request) Successful in 5s
Validate Helm Charts / Build ytdlp-web-player (pull_request) Successful in 5s
Validate Helm Charts / Trivy config bentopdf (pull_request) Successful in 14s
Validate Helm Charts / Trivy config cyberchef (pull_request) Successful in 13s
Validate Helm Charts / Trivy config gotenberg (pull_request) Successful in 13s
Validate Helm Charts / Trivy config rss-bridge (pull_request) Successful in 14s
Validate Helm Charts / Trivy config ytdlp-web-player (pull_request) Successful in 15s
Validate Helm Charts / Resource quantities (pull_request) Failing after 18s
Validate Helm Charts / Bump level (pull_request) Successful in 8s
Validate Helm Charts / Build cyberchef (pull_request) Successful in 6s
bentopdf, apache-tika, gotenberg, rss-bridge, searxng, ytdlp-web-player. One major each, networkPolicy.enabled defaults to true. Three of them differ from the simple case in ways worth naming: GOTENBERG gets DNS-only egress as a deliberate, documented trade. It drives a headless Chromium, and 3000 is its probe port - so it is reachable from the whole cluster by default, and an egress rule for 80/443 would turn a service anyone can POST to into a way of fetching arbitrary URLs. The price is the remote-asset half of HTML conversion: inline content converts, images the page would have fetched silently do not. That degrades a PDF instead of failing a pod, so nothing alerts on it, which is why it is in the template header, in values.yaml and in NOTES.txt, with extraPorts: [80, 443] named as the knowing opt-in. RSS-BRIDGE, SEARXNG and YTDLP-WEB-PLAYER get the open internet on their web ports, because reaching other people's servers IS the application and this object cannot name a host. Said plainly in each, so none of them reads stricter than it is. What the cap still buys is real: no other outbound port, so a compromised pod reaches no database, no mail server and no SSH anywhere. APACHE-TIKA and GOTENBERG render no Ingress - their consumers are other pods, in other namespaces here - so neither gets an ingressController value and both say in NOTES.txt that narrowing probeSources means listing the consumers' namespaces in allowedNamespaces in the same change, or extraction and conversion stop. YTDLP-WEB-PLAYER names the gap this convention has: its oauth2-proxy subchart renders its own Deployment with its own labels and ships no policy, so with the proxy enabled the pod that actually faces the Ingress is unrestricted in both directions. Nothing in this chart can change that - an upstream chart is consumed as it comes - so it is written down instead. ci/outline/test-values.yaml gains egress.extraPorts: [5556]. The CI dex runs there rather than on 443, and Outline fetches the discovery document at boot - so this is the chart's documented escape hatch used for exactly the case it was written for, and the one place in the repo where the cap's upgrade risk is actually exercised. Part of #5 |
||
|
|
37b76e353c
|
gotenberg: seccompProfile RuntimeDefault in the pod context
Sets seccompProfile.type: RuntimeDefault in the pod security context, so the container runtime's default syscall filter applies to every container in the pod. The value lives in the pod context rather than the container context because it covers init containers and any container added later without being repeated; a container that needs a different filter can still override it under securityContext.container, which wins over the pod value. Gotenberg is the chart where a syscall filter was most likely to bite: it drives headless Chromium and LibreOffice, and browser sandboxes are the classic casualty of a restrictive seccomp profile. Verified in k3d that both engines still work under the filter - Chromium HTML->PDF and LibreOffice document->PDF both return real, non-empty PDFs, and the kernel reports Seccomp: 2 (filter mode) inside the container. Major bump: runtime behavior changes. Refs #84 |
||
|
|
0c403b6100
|
gotenberg: small requests, explicit higher limits
The computed limits (limitFactor 3 x request = 1536Mi memory, 30Mi ephemeral storage) were too small for real documents: a 12 MB HTML already gets the container OOM-killed, and the caller sees no HTTP error at all, just a dropped connection and a rising RESTARTS counter. Rather than raise the requests and reserve conversion-sized capacity on the node around the clock, requests and limits are decoupled: the requests stay as they were, and both limits are now set explicitly. The chart already supported this - an explicit limit wins over the limitFactor computation. Measured in a throwaway k3d cluster with the official image (HTML via Chromium), building on the series in the issue: 18 MB HTML, 2Gi -> OOMKilled 18 MB HTML, 2560Mi -> OOMKilled 18 MB HTML, 3Gi -> HTTP 200 in ~22s, 21 MB PDF 12 MB HTML, 1536Mi -> OOMKilled (the old computed limit) 12 MB HTML, 2Gi -> HTTP 200 in ~13s Memory beyond 3Gi buys nothing: gotenberg's own request timeout is 30s and the chart passes no flags to change it, so a document needing more memory has already run out of time (a 25 MB HTML misses the 30s even at 4Gi). The ephemeral-storage limit is raised in the same change, because raising memory alone only moves the failure. With 3Gi memory and the old 30Mi limit, /tmp peaked at 40 MB on a single conversion and at ~125 MB over a short series, and the pod was evicted: Pod ephemeral local storage usage exceeds the total limit of containers 30Mi That failure is worse than the OOM-kill: the pod does not restart, it is replaced, and the old one is left behind as Evicted. The defaults in the effectiveResources helper are updated in lockstep with values.yaml, so an erased "resources:" block (#99) falls back to the new explicit limits instead of the old computed ones. NOTES.txt is pulled along. Its numbers came from effectiveResources already, but the text described a threshold that has moved and advice that no longer holds: raising the request no longer drags the limit with it now that the limits are explicit. The warning is kept but no longer claims memory is the first limit you hit - with these limits, the 30s timeout is. Major, because the runtime behaviour changes and the pod may occupy more memory during large conversions than it was allowed to before. Fixes #106 |
||
|
|
c88ce80750
|
Conventions batch 4: env blocks, homeassistant className default, strict clusterIssuer
- apache-tika, gotenberg, cyberchef, homeassistant, patchmon: additive env value blocks rendered through tpl (value, secretKeyRef and configMapKeyRef forms), following the template-chart/outline pattern; patchmon gets separate blocks for the server container and the guacd sidecar. - homeassistant: ingress.className now defaults to nginx; an empty className omits ingressClassName from the rendered Ingress, so the flexible upstream ingress style stays intact. - outline, paperless-ngx: remove the ingress.clusterIssuer defaults (letsencrypt / letsencrypt-issuer) - the value is now strictly required, consistent with the repo-wide ingress standard; CI test-values set it explicitly. Chart bumps: apache-tika 7.2.0, gotenberg 4.2.0, cyberchef 5.2.0, patchmon 5.2.0, homeassistant 4.2.0 (minor); outline 5.0.0, paperless-ngx 10.0.0 (major). |
||
|
|
6779e49355
|
Add per-workload replicas values and a chart-global scaleDown flag
Every Deployment/StatefulSet now takes its replica count from a replicas value (default 1, explicit 0 allowed) via a new per-chart <chart>.replicas helper; the helper uses a kindIs "invalid" nil check so an explicit 0 is not swallowed by Helm's default function. A chart-global scaleDown flag (default false) takes precedence: it renders every workload with replicas: 0 and suspends the paperless-ngx consume CronJob, stopping the app without uninstalling it (PVCs, Secrets, Services and Ingress remain). Defaults leave the rendered manifests byte-identical to main, so all published charts get a minor version bump; the template-chart carries the reference helper implementation and stays unversioned. Fixes #25 |
||
|
|
91a2fbcb05
|
Compute memory/ephemeral-storage limits from requests, drop default CPU limits
Every chart now renders its container resources through a duplicated _helpers.tpl helper (reference implementation in template-chart): requests ship as chart defaults, missing memory and ephemeral-storage limits are computed as resources.limitFactor x the request (default 3, satisfactory keeps 2 to preserve its previously published 8Gi limit), an explicitly set limit always wins, and a CPU limit is only rendered when set explicitly. Fixed limit defaults are removed from all values.yaml files; teamspeak-server gains a values-driven resources block instead of hardcoded template values. Major version bump for all published charts. |
||
|
|
b5eba4cbf1
|
Harden pod and container security contexts across all workloads
Add securityContext hardening (runAsNonRoot, readOnlyRootFilesystem, capabilities drop ALL, allowPrivilegeEscalation false) to the 10 workloads that lacked it: apache-tika, cyberchef, gotenberg, homeassistant, matrix-delegation-nginx, paperless-server, paperless-consume cronjob (plus automountServiceAccountToken false), patchmon-frontend, urlaubsverwaltung and zipline. All contexts are configurable via securityContext.pod / securityContext.container in values.yaml; writable paths are provided as emptyDirs. Image-forced deviations (Home Assistant root start for s6-overlay + NET_RAW for discovery, paperless root init container for /run ownership) are documented in the charts' values.yaml. Major version bump for every changed published chart. |
||
|
|
78d78973c5
|
Ensure liveness, readiness and startup probes on all workloads
Every container in every Deployment/StatefulSet now defines all three probes. The paperless-ngx consume CronJob intentionally has none (batch workload). - Add probes: apache-tika, calibre-web-automated, cyberchef, gotenberg, homeassistant, patchmon-backend, samba (tcp/445), teamspeak-server (tcp/30033), zipline (/api/healthcheck) - Fix voucher-vault null probe values with real defaults - Fix startup-probe semantics in template-chart and rallly (no initialDelaySeconds, generous failureThreshold) - Switch outline probes to its /_health endpoint - Add readiness/startup probes to satisfactory - Add startup probes to matrix-synapse, matrix-delegation-nginx, paperless-server, patchmon-frontend, urlaubsverwaltung - Major version bump for all published charts |
||
|
|
36eced0a3f
|
feat(gotenberg): added initial chart |