Symptom
adaptive_export logs on every boot:
level=warning msg="control surface: TLS DISABLED — bearer JWT crosses the CNI in cleartext (set CONTROL_TLS=true)"
Root cause
The control surface (:9100 — the endpoint dx calls for /export/start, /dx/evidence_graph, /dx/evidence_manifest) requires a bearer JWT when CONTROL_REQUIRE_AUTH=true + PL_JWT_SIGNING_KEY is set (which it is in the dx-steered topology). But TLS on that same surface is gated on CONTROL_TLS=true, which is default-OFF (src/vizier/services/adaptive_export/cmd/main.go:724-737, comment: "Default-OFF for incremental rollout").
Result: auth is ON but the channel is plaintext, so the signed token (and the control payloads) travel the pod network unencrypted — anyone able to sniff the CNI on the node can capture a valid AE-control token.
Why it's currently off
CONTROL_TLS is not set in the AE manifest (k8s/vizier/bootstrap/adaptive_export_deployment.yaml), and the service-tls-certs secret (the cert the broker/PEM already use, expected at /certs/server.{crt,key}) is not mounted into the AE DaemonSet.
Investigate / fix
- Confirm the
service-tls-certs (or equivalent) secret is available in pl and mountable into the AE DaemonSet.
- Mount it at
/certs + set CONTROL_TLS=true in adaptive_export_deployment.yaml.
- Set dx's
AE_CONTROL_ADDR to https://adaptive-export-control.pl.svc.cluster.local:9100 (the dx client already does TLS skip-verify for the in-cluster self-signed cert — see k8s/vizier/dx/dx-daemon.yaml comment).
- Verify dx still steers + writes the evidence graph over TLS, and the warning becomes
control surface: TLS ENABLED.
- Decide whether default-ON is appropriate now that the rollout is past incremental (the cert infra already exists).
Refs
src/vizier/services/adaptive_export/cmd/main.go:706-742
k8s/vizier/dx/dx-daemon.yaml (AE_CONTROL_ADDR http, with the flip-to-https comment)
- observed on the sovereign-SOC lab (
fix/ae-protocol-export-pxexport, aeprod63)
Symptom
adaptive_export logs on every boot:
Root cause
The control surface (
:9100— the endpoint dx calls for/export/start,/dx/evidence_graph,/dx/evidence_manifest) requires a bearer JWT whenCONTROL_REQUIRE_AUTH=true+PL_JWT_SIGNING_KEYis set (which it is in the dx-steered topology). But TLS on that same surface is gated onCONTROL_TLS=true, which is default-OFF (src/vizier/services/adaptive_export/cmd/main.go:724-737, comment: "Default-OFF for incremental rollout").Result: auth is ON but the channel is plaintext, so the signed token (and the control payloads) travel the pod network unencrypted — anyone able to sniff the CNI on the node can capture a valid AE-control token.
Why it's currently off
CONTROL_TLSis not set in the AE manifest (k8s/vizier/bootstrap/adaptive_export_deployment.yaml), and theservice-tls-certssecret (the cert the broker/PEM already use, expected at/certs/server.{crt,key}) is not mounted into the AE DaemonSet.Investigate / fix
service-tls-certs(or equivalent) secret is available inpland mountable into the AE DaemonSet./certs+ setCONTROL_TLS=trueinadaptive_export_deployment.yaml.AE_CONTROL_ADDRtohttps://adaptive-export-control.pl.svc.cluster.local:9100(the dx client already does TLS skip-verify for the in-cluster self-signed cert — seek8s/vizier/dx/dx-daemon.yamlcomment).control surface: TLS ENABLED.Refs
src/vizier/services/adaptive_export/cmd/main.go:706-742k8s/vizier/dx/dx-daemon.yaml(AE_CONTROL_ADDRhttp, with the flip-to-https comment)fix/ae-protocol-export-pxexport, aeprod63)