refactor(valkey): ambientMesh becomes an object carrying Istio's two constants
Validate Helm Charts / Detect changed charts (pull_request) Successful in 3s
Validate Helm Charts / Selector match (pull_request) Successful in 9s
Validate Helm Charts / HTTPRoute match (pull_request) Successful in 7s
Validate Helm Charts / YAML scalars (pull_request) Successful in 8s
Validate Helm Charts / NetworkPolicy (pull_request) Successful in 16s
Validate Helm Charts / Build apache-tika (pull_request) Successful in 4s
Validate Helm Charts / Trivy config apache-tika (pull_request) Successful in 10s
Validate Helm Charts / Build bentopdf (pull_request) Successful in 4s
Validate Helm Charts / Build bulwark (pull_request) Successful in 4s
Validate Helm Charts / Build garage (pull_request) Successful in 4s
Validate Helm Charts / Build matrix-synapse (pull_request) Successful in 4s
Validate Helm Charts / Resource quantities (pull_request) Successful in 9s
Validate Helm Charts / Bump level (pull_request) Successful in 3s
Validate Helm Charts / Build calibre-web-automated (pull_request) Successful in 4s
Validate Helm Charts / Build cyberchef (pull_request) Successful in 4s
Validate Helm Charts / Build freesailarr (pull_request) Successful in 5s
Validate Helm Charts / Build gotenberg (pull_request) Successful in 4s
Validate Helm Charts / Build homeassistant (pull_request) Successful in 4s
Validate Helm Charts / Build keycloak (pull_request) Successful in 4s
Validate Helm Charts / Build outline (pull_request) Successful in 4s
Validate Helm Charts / Build rallly (pull_request) Successful in 4s
Validate Helm Charts / Build samba (pull_request) Successful in 4s
Validate Helm Charts / Build satisfactory (pull_request) Successful in 5s
Validate Helm Charts / Build stalwart (pull_request) Successful in 5s
Validate Helm Charts / Build minecraft-router (pull_request) Successful in 4s
Validate Helm Charts / Build minecraft-server (pull_request) Successful in 4s
Validate Helm Charts / Build paperless-ngx (pull_request) Successful in 4s
Validate Helm Charts / Build patchmon (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 teamspeak-server (pull_request) Successful in 4s
Validate Helm Charts / Build template-chart (pull_request) Successful in 5s
Validate Helm Charts / Build valkey (pull_request) Successful in 4s
Validate Helm Charts / Build voucher-vault (pull_request) Successful in 5s
Validate Helm Charts / Build ytdlp-web-player (pull_request) Successful in 6s
Validate Helm Charts / Build zipline (pull_request) Successful in 5s
Validate Helm Charts / Build sure (pull_request) Successful in 4s
Validate Helm Charts / Build urlaubsverwaltung (pull_request) Successful in 5s
Validate Helm Charts / Trivy config bentopdf (pull_request) Successful in 12s
Validate Helm Charts / Trivy config gotenberg (pull_request) Successful in 10s
Validate Helm Charts / Trivy config homeassistant (pull_request) Successful in 10s
Validate Helm Charts / Trivy config keycloak (pull_request) Successful in 11s
Install-test / Install-test bentopdf (pull_request) Successful in 51s
Validate Helm Charts / Trivy config bulwark (pull_request) Successful in 10s
Validate Helm Charts / Trivy config calibre-web-automated (pull_request) Successful in 10s
Validate Helm Charts / Trivy config cyberchef (pull_request) Successful in 11s
Validate Helm Charts / Trivy config freesailarr (pull_request) Successful in 17s
Install-test / Install-test apache-tika (pull_request) Successful in 1m5s
Validate Helm Charts / Trivy config garage (pull_request) Successful in 11s
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 minecraft-server (pull_request) Successful in 12s
Validate Helm Charts / Trivy config outline (pull_request) Successful in 11s
Validate Helm Charts / Trivy config paperless-ngx (pull_request) Successful in 11s
Validate Helm Charts / Trivy config patchmon (pull_request) Successful in 17s
Validate Helm Charts / Trivy config satisfactory (pull_request) Successful in 11s
Validate Helm Charts / Trivy config searxng (pull_request) Successful in 14s
Validate Helm Charts / Trivy config stalwart (pull_request) Successful in 20s
Validate Helm Charts / Trivy config sure (pull_request) Successful in 14s
Validate Helm Charts / Trivy config teamspeak-server (pull_request) Successful in 11s
Validate Helm Charts / Trivy config rallly (pull_request) Successful in 15s
Install-test / Install-test bulwark (pull_request) Successful in 1m18s
Validate Helm Charts / Trivy config rss-bridge (pull_request) Successful in 12s
Validate Helm Charts / Trivy config samba (pull_request) Successful in 12s
Install-test / Install-test calibre-web-automated (pull_request) Successful in 1m37s
Validate Helm Charts / Trivy config template-chart (pull_request) Successful in 12s
Validate Helm Charts / Trivy config urlaubsverwaltung (pull_request) Successful in 10s
Validate Helm Charts / Trivy config valkey (pull_request) Successful in 11s
Validate Helm Charts / Trivy config voucher-vault (pull_request) Successful in 13s
Validate Helm Charts / Trivy config ytdlp-web-player (pull_request) Successful in 20s
Install-test / Install-test cyberchef (pull_request) Successful in 1m3s
Validate Helm Charts / Trivy config zipline (pull_request) Successful in 14s
Install-test / Install-test freesailarr (pull_request) Successful in 3m29s
Install-test / Install-test garage (pull_request) Successful in 1m9s
Install-test / Install-test gotenberg (pull_request) Successful in 1m18s
Install-test / Install-test homeassistant (pull_request) Successful in 2m20s
Install-test / Install-test keycloak (pull_request) Successful in 2m22s
Install-test / Install-test matrix-synapse (pull_request) Successful in 1m35s
Install-test / Install-test minecraft-router (pull_request) Successful in 51s
Install-test / Install-test minecraft-server (pull_request) Successful in 1m40s
Install-test / Install-test outline (pull_request) Successful in 2m7s
Install-test / Install-test paperless-ngx (pull_request) Successful in 3m3s
Install-test / Install-test patchmon (pull_request) Successful in 1m9s
Install-test / Install-test searxng (pull_request) Successful in 56s
Install-test / Install-test stalwart (pull_request) Successful in 1m17s
Install-test / Install-test teamspeak-server (pull_request) Successful in 1m8s
Install-test / Install-test valkey (pull_request) Successful in 1m13s
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 1m1s
Install-test / Install-test sure (pull_request) Successful in 2m8s
Install-test / Install-test urlaubsverwaltung (pull_request) Successful in 1m20s
Install-test / Install-test voucher-vault (pull_request) Successful in 1m46s
Install-test / Install-test ytdlp-web-player (pull_request) Successful in 51s
Install-test / Install-test zipline (pull_request) Successful in 2m0s
Validate Helm Charts / Install-test (pull_request) Successful in 43m0s

Gitea #143, maintainer's instruction. The HBONE port and the redirected probe
source are ISTIO CONSTANTS, not standards, so they move from template literals
into values with documented defaults - an operator can then correct them when
Istio changes a number, without waiting for a chart release.

One object under one "enabled", so the two halves still cannot be set
separately; two values could drift apart, which is what this design exists to
prevent. Every read is null-safe (#99), so a deleted object or one carrying
only "enabled: true" falls back to the defaults declared here rather than
dereferencing nil - the defect #136 shipped one value away.

Provenance now written on each constant: 15008 is Istio's HBONE port, not
IANA-registered for this and unknown to Kubernetes; 169.254.7.127 is link-local
(RFC 3927, never routed), its IPv6 counterpart carries the same digits plus
1337, and neither the NetworkPolicy API nor the kubelet knows the address -
only Istio's data plane rewrites the probe source onto it. Both read for
ztunnel 1.30.6, and a change in either fails silently.

The exception in ci/run-networkpolicy-test.sh stays pinned to the numbers that
test names, and additionally asserts this chart declares the same defaults -
never "whatever the value says", which would let a mistyped port in through a
configurable field.

No version change: nothing is published yet, the default is still off, and the
render at defaults is byte-identical - re-diffed against origin/main.

No redirectedProbeSources here, in neither values.yaml nor the schema: this
chart offers no networkPolicy.probeSources, so its probe rule is never
source-restricted and no ipBlock is ever rendered. The key would reach no rule
and read as a control that does nothing, which is worse than one that is
absent. ci/run-networkpolicy-test.sh asserts that absence rather than
tolerating it.
This commit is contained in:
jklein committed 2026-10-19 17:49:07 +00:00
1 parent 47aaf8ae37
commit 2987f27e9c
3 files changed
+67 -6

No files matched your search

+22 -3
View File
@@ -36,7 +36,15 @@ a port that is genuinely closed to everything but the namespaces named below.
thing as the top-level .Values.ingress (the Ingress object) - both match
a search for "ingress". */}}
{{- $npIngress := .Values.networkPolicy.ingress | default dict }}
{{- $ambientMesh := $npIngress.ambientMesh }}
{{- /* NULL-SAFE ON PURPOSE (#99): ambientMesh is an OBJECT, so every read goes
through a fallback reproducing THIS chart's declared defaults. An
operator who deletes the object, or writes only "enabled: true", must
land on the defaults and not in a nil dereference - #136 shipped exactly
that defect one value away, where the NOTES.txt branch dereferenced
.networkPolicy.egress directly. */}}
{{- $ambient := $npIngress.ambientMesh | default dict }}
{{- $ambientEnabled := $ambient.enabled }}
{{- $ambientPort := $ambient.port | default 15008 }}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
@@ -73,7 +81,7 @@ spec:
ports:
- protocol: TCP
port: 6379
{{- if $ambientMesh }}
{{- if $ambientEnabled }}
{{- /* networkPolicy.ingress.ambientMesh (Gitea #143). 15008/TCP is ztunnel's
HBONE tunnel, the port every inbound connection arrives on once the
namespace carries istio.io/dataplane-mode - ambient "does not and will
@@ -104,10 +112,21 @@ spec:
expressible as a namespaceSelector plus podSelector and not as an
unknowable node CIDR. It cannot be settled before a namespace joins the
mesh, and none has.
AN ISTIO CONSTANT, NOT A STANDARD: 15008 is not registered with
IANA for this, no protocol prescribes it, and Kubernetes knows
nothing about it - Istio picked it for HBONE and Istio can change
it. Hence a VALUE with a documented default rather than a literal
here, so an operator can correct it without a chart release. Read
for ztunnel 1.30.6. The exception ci/run-networkpolicy-test.sh
grants is pinned to the number THAT TEST names, plus a check that
this chart declares the same default - never to whatever the value
says, because that would let a mistyped port ride in through a
configurable field (design A of #143).
NOT MEASURED: that 15008 alone suffices comes from Istio's
documentation. Measured on this cluster is only which listeners ztunnel
opens. Provable at the first namespace to join the mesh; none has. */}}
- protocol: TCP
port: 15008
port: {{ int $ambientPort }}
{{- end }}
{{- end }}