Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
212 commits
Select commit Hold shift + click to select a range
4dee179
adaptive_export: chunk + bound the ordered capture path (flaky-captur…
entlein Aug 1, 2026
743fbd9
adaptive_export/pxl: filter infra noise from node-scoped dark capture…
entlein Aug 2, 2026
831162a
adaptive_export: bound ordered-capture subdivision (circuit-breaker +…
entlein Aug 2, 2026
7645a58
adaptive_export/control: widen near-zero /query windows to the lookback
entlein Aug 2, 2026
438bc3c
k8s/vizier: adaptive-export bootstrap = functional pem-direct DaemonSet
entlein Aug 3, 2026
279b436
adaptive_export: dc_snoop kernel-thread comm filter + adaptive-only d…
entlein Aug 4, 2026
f33b4ee
k8s/vizier/dx: skaffold module for dx-daemon deploy
entlein Aug 6, 2026
c4282c1
k8s/vizier/adaptive_export: skaffold overlay for AE deploy
entlein Aug 6, 2026
2e05ed2
skaffold: move AE/dx deploy configs to skaffold/ with root-relative p…
entlein Aug 6, 2026
0ac57f5
lab: bump dx->rc6 + AE->aeprod63, add evidence_graph env
entlein Aug 14, 2026
3a7672e
lab(dx): raise memory limit 1Gi->2Gi — fix OOM that empties the evide…
entlein Aug 14, 2026
2160f6d
lab(dx): DX_WORKERS=4->1 — fix SIGSEGV under the kill-chain referral …
entlein Aug 14, 2026
0b49e11
lab(dx): rc8 (pxapi nil-Timing SIGSEGV fix) + revert DX_WORKERS band-…
entlein Aug 15, 2026
c9b3742
dx lab manifest: non-garble optdbg2 image + 3Gi + DX_FOREST_PUSHDOWN
entlein Aug 15, 2026
cb1b68d
dx lab manifest: optdbg2 -> rc13 (obfuscated release, #138 fault 2 fi…
entlein Aug 15, 2026
5a52eb6
dx lab manifest: rc13 -> rc14 (clean trivy-free build, same config)
entlein Aug 16, 2026
c5c2736
adaptive_export: bounded-lookback watermark + wall-clock poison clamp…
entlein Aug 16, 2026
29a67c3
adaptive_export: secure-by-default control surface — TLS + auth ON (#96)
entlein Aug 16, 2026
7f4ef7d
ci: release manifest robust to lightweight tags (fix jq 'timestamp: ,…
entlein Aug 16, 2026
417b7a6
AE skaffold: aeprod63 -> aeprod64 (F8 watermark #97 + control secure-…
entlein Aug 16, 2026
573e630
pxl_scripts: dx/evidence_graph 3-level-zoom Live View bundle
entlein Aug 16, 2026
465e4d9
AE skaffold: aeprod64 -> aeprod65 (clean green release: #96 #97 + jq …
entlein Aug 16, 2026
0f5dbcc
pxl_scripts(px/dx_evidence_graph): fold in 3-level-zoom enhancements
entlein Aug 16, 2026
0a47333
pxl_scripts(px/dx_evidence_graph): fix reads validated live against f…
entlein Aug 16, 2026
aa3d30a
pxl_scripts(px/dx_evidence_graph): L3 shows the REAL anomaly records,…
entlein Aug 16, 2026
cef667b
pxl_scripts(px/dx_evidence_graph): join on uniqueID + surface process
entlein Aug 17, 2026
e322caf
pxl_scripts(px/dx_evidence_graph): L2 shows the actual attack cmdline…
entlein Aug 17, 2026
c591ab4
px/dx_evidence_graph: L2 = full pre-correlation record set; dx skaffo…
entlein Aug 17, 2026
75eec19
ae/pxl: stamp hostname on socket_tracer exports (#136 pushdown)
entlein Aug 18, 2026
49b0c2d
ae: dx_order_seeds table + dc_snoop dark-path hostname (#136)
entlein Aug 18, 2026
57268e1
px/dx_evidence_graph: multi-panel pre-correlation dashboard (#136)
entlein Aug 18, 2026
3f6b89f
test(clickhouse): dx_order_seeds joins the OperatorOwnedTables tail g…
Aug 18, 2026
133a226
ae: bake the order-UUID pre-correlation views into the image (#136)
entlein Aug 19, 2026
51652bc
ae: keep soc/AE ownership boundary — views tolerate a not-ready base …
entlein Aug 19, 2026
53d5e3c
test(clickhouse): the kubescape-ownership guard matches CREATE TABLE,…
Aug 19, 2026
9f4c9a8
px/dx_evidence_graph: add dc_snoop + stack_trace panels; rename to Ev…
entlein Aug 19, 2026
38ac499
px/dx_evidence_graph: hide plumbing columns from protocol panels
entlein Aug 19, 2026
e2be5ab
dx: pin dx-daemon image to rc21 (order-seed writer)
entlein Aug 19, 2026
59ed1e0
ae: dx_order_records bridge + dx-assigned order_id (#136 stamping)
entlein Aug 19, 2026
095a17c
ae: bake dx_src__stack_trace view + drop upid from the dx_src__ views…
entlein Aug 19, 2026
ddc7363
px/dx_evidence_graph: graph shows all alerts (process->target); panel…
entlein Aug 19, 2026
407e196
Revert ddc7363db: restore dx_evidence_graph.pxl to the agreed version
entlein Aug 19, 2026
da0c7a4
px/dx_evidence_graph: _consulted drops join/plumbing columns; vis.jso…
entlein Aug 19, 2026
c6fe707
skaffold: pin AE 0.14.19-aeprod71 + dx rc22 (latest order-UUID stampi…
entlein Aug 19, 2026
e426be3
ae: re-key dx_order_seeds + dx_anomaly_orders on order_id (dx owns de…
entlein Aug 19, 2026
1b9ca36
skaffold: pin dx rc23 (finer order_id = uniqueID+RuleID+Disc)
entlein Aug 19, 2026
a057cb6
skaffold: pin AE aeprod72 (order_id re-key; pairs with dx rc23)
entlein Aug 20, 2026
e168d19
px/dx_evidence_graph: order_id deep-links + kubescape detail in graph…
entlein Aug 20, 2026
8a7dd35
px/dx_evidence_graph: order deep-link opens the EXACT consulted set
entlein Aug 20, 2026
d72d904
px/dx_evidence_graph: ORDERS shows the kubescape alert text, not uniq…
entlein Aug 20, 2026
bbb8a5c
px/dx_evidence_graph: restore dx_src__ protocol-view panels (fix v0.0…
entlein Aug 20, 2026
1d24ba5
px/dx_evidence_graph: differential stack-trace flamegraph panel (atta…
entlein Aug 20, 2026
065f1dc
adaptive_export: bridge all consulted protocol tables to orders via u…
entlein Aug 21, 2026
77de8fa
build(ae): add the logrus dep to internal/control (strict deps)
Aug 21, 2026
4e079a5
pxl_scripts: add dx/evidence_graph (SOC, MITRE, deep-links, different…
entlein Aug 21, 2026
88977a3
adaptive_export: MITRE ATT&CK + per-order window views (operator-owne…
entlein Aug 21, 2026
83bab98
dx/evidence_graph: ORDERS disc->Alert, kubescape +pid/ppid -uniqueID,…
entlein Aug 21, 2026
4c7cb8e
deploy: pin AE 0.14.19-aeprod75 (bridge views + MITRE views) + dx 0.5…
entlein Aug 21, 2026
dc317b0
bazel: add sha256-verified mirror for org_libc_musl (musl.libc.org is…
entlein Aug 21, 2026
9827dbe
deploy: pin AE 0.14.19-aeprod76 (aeprod75 CI died on musl outage, ima…
entlein Aug 21, 2026
6512b69
dx/evidence_graph: fix _bridge unique_id compile error via passthroug…
entlein Aug 21, 2026
5b6e0ee
dx/evidence_graph: order-centric graph, revert dc_snoop to _ord, nati…
entlein Aug 21, 2026
1c20524
deploy: pin dx 0.5.0-keepset-rc2 (http collected as pod/ns metadata)
entlein Aug 21, 2026
703ebef
deploy: pin dx 0.5.0-keepset-rc4 (dns hops + dc_snoop union + redis h…
entlein Aug 21, 2026
a736fc2
dx/evidence_graph: differential stack window +/-30s with matched base…
entlein Aug 21, 2026
e12e864
deploy: pin dx 0.5.0-keepset-rc5 (dc_snoop union: comm + tree-pid + p…
entlein Aug 21, 2026
97d759e
dx/evidence_graph: drop redundant stack_trace table panel, shrink fla…
entlein Aug 22, 2026
1bd745e
dx/evidence_graph: final — dc_snoop _bridge (2x) + native stacks + ta…
entlein Aug 22, 2026
68313e0
ae schema: dx/evidence_graph UI views — mitre dedup (uniqueID,rule) +…
entlein Aug 22, 2026
bd7cd01
ae: register dx_base__dc_snoop so Apply actually creates it
Aug 22, 2026
39bb80f
deploy: pin AE 0.14.19-aeprod77 + dx 0.5.0-keepset-rc6 (conn_stats wi…
entlein Aug 22, 2026
9a21091
dx/evidence_graph: dc_snoop via dx_ord__ (real hostname)
entlein Aug 22, 2026
860130e
ae/schema: expose trace_role in dx_src__conn_stats + dx_ord__conn_stats
entlein Aug 22, 2026
f2f0845
ae/pxl: stamp node hostname on pid-keyed dark tables (dc_snoop et al.…
entlein Aug 22, 2026
1f9ddbd
deploy: pin AE 0.14.19-aeprod79 (trace_role + dc_snoop hostname) + dx…
entlein Aug 22, 2026
9fe3154
carnot(clickhouse): keyset pagination + larger batch
entlein Aug 22, 2026
43dfb07
Revert "carnot(clickhouse): keyset pagination + larger batch"
entlein Aug 22, 2026
abf9144
deploy: pin dx 0.5.0-keepset-rc9 (dns ±window)
entlein Aug 22, 2026
5d02448
dx/dns_resolve: per-order DNS resolution reconstruction graph
entlein Aug 23, 2026
b5d2c8a
ae schema: add dx_dns_resolve view; drop 9 dead views
entlein Aug 23, 2026
612c638
dx/dns_resolve: resolve IPs/pods to k8s identities + connect hops + ts
entlein Aug 23, 2026
2cf28e1
dx/dns_resolve: ts as human-readable UTC datetime (ns precision)
entlein Aug 23, 2026
735e035
deploy: pin AE 0.14.19-aeprod80 (dns_resolve view)
entlein Aug 23, 2026
891f46e
deploy: pin dx 0.5.0-keepset-rc11 (streaming loop-1 pull, O(batch) me…
entlein Aug 24, 2026
2774527
deploy: pin AE 0.14.19-aeprod81 (dx_dns_resolve ts column)
entlein Aug 24, 2026
9b4ec24
fix(ae): honour an intentionally tight /query window instead of widen…
entlein Aug 24, 2026
5bc2c1d
ae schema: dx_ord__* event_time as DateTime64 (engage connector time …
entlein Aug 24, 2026
3feccaa
ae: bridge cql/mongodb/creds_change, drop the six phantom tracepoint …
entlein Aug 24, 2026
9352a82
ae: register the three new dx_ord__ bridge views so Apply creates them
Aug 24, 2026
6aa30b1
test(clickhouse): guard schema.sql against the registration lists
Aug 24, 2026
e76cd2e
ae schema: ORDER BY includes the message payload (mirrors dx UID keys)
entlein Aug 24, 2026
dc7230f
ae schema: dx_ord__* window on the order's event_time, not the base r…
entlein Aug 25, 2026
a3ea1bd
dx/evidence_graph: ORDERS ts column + drop namespace from protocol pa…
entlein Aug 25, 2026
634269f
pxl: decommission px/dx_evidence_graph (superseded by dx/evidence_graph)
entlein Aug 25, 2026
c1b96cf
dx/fullchain: cross-sensor exfil narrative graph (v1)
entlein Aug 25, 2026
d68a257
ae schema: dx_orders.culprit_key + dx_cases view (meta-grouping)
entlein Aug 26, 2026
017934e
dx/evidence_graph: CASES view — campaign graph grouped by culprit_key
entlein Aug 26, 2026
15e733f
ae schema: conn_stats.remote_pod + dx_case_links (cross-pod case bridge)
entlein Aug 26, 2026
c4357a6
ae schema: durable dx_alerts (generic) + dx_breakout_story + dx_fullc…
entlein Aug 26, 2026
808b1db
k8s: pin AE aeprod89 + dx rc23, codify forward narrow-window
entlein Aug 26, 2026
d3c8b30
ae schema: views CREATE OR REPLACE — idempotent, no manual DROP on re…
entlein Aug 26, 2026
72b8673
k8s(ae): pin aeprod90 (DDL finalize — CREATE OR REPLACE views)
entlein Aug 26, 2026
f2dc1ce
cockpit: add soc.k8sstormcenter.com ingress hosts alongside the exist…
entlein Aug 30, 2026
e5b7f22
ae schema: expose offender (infectedPID/offender/profile) on dx_src__…
entlein Sep 6, 2026
08eb6f6
ae preset: pid-namespace guard on dc_snoop (K1)
entlein Sep 6, 2026
830070a
ae preset: scope the BTF comment to what is actually proven
entlein Sep 6, 2026
7a1aae4
ae: fix schema apply (semicolon in comment) + stop logging secrets
entlein Sep 6, 2026
e6da2a8
ae: stop re-upserting a live tracepoint on every boot (it undoes K1)
entlein Sep 6, 2026
9dc0ec1
pxl_scripts/dx: strip comments (sync from feat/pixie-native-sbob)
entlein Sep 6, 2026
1f3207b
ae: async_insert on adaptive_attribution writes
entlein Sep 6, 2026
87153c3
ae schema: own the dx shadow/forest surface
entlein Sep 7, 2026
4a36545
Revert "ae schema: own the dx shadow/forest surface"
entlein Sep 7, 2026
c418770
adaptive_export: wire dark-vector pod-enrichment into the streaming s…
entlein Aug 12, 2026
4f860ba
build(ae): add the internal/pxl dep to streaming (strict deps)
Sep 7, 2026
5398211
adaptive_export: gofumpt queryfor.go; regenerate pxl_scripts README
entlein Sep 7, 2026
de6714f
lint: yamllint the AE/dx manifests and skaffold configs; unshadow ref…
entlein Sep 7, 2026
99bda7f
lint: yaml document-start markers
entlein Sep 7, 2026
3adf8e5
adaptive_export: deploy 0.15.2-rc1, the image built from this tree
ConstanzeTU Sep 9, 2026
2090b16
adaptive_export: deploy 0.15.2-rc1, the image built from this tree
ConstanzeTU Sep 9, 2026
36a63dc
adaptive_export: deploy 0.15.2-rc1, the image built from this tree
ConstanzeTU Sep 9, 2026
2ade93c
adaptive_export: assert the control Service selector, and fail loudly…
ConstanzeTU Sep 9, 2026
a744b00
adaptive_export: 0.15.3-rc1
ConstanzeTU Sep 9, 2026
afc921d
adaptive_export: enable the engine migration
ConstanzeTU Sep 9, 2026
2308da0
adaptive_export: 0.15.4-rc1
ConstanzeTU Sep 9, 2026
d07193c
adaptive_export: 0.16.0-rc1
ConstanzeTU Sep 9, 2026
b10ade6
adaptive_export: 0.16.1-rc1
ConstanzeTU Sep 10, 2026
2e0f419
adaptive_export: 0.16.2-rc1
ConstanzeTU Sep 10, 2026
a243014
adaptive_export: 0.16.3-rc1
ConstanzeTU Sep 10, 2026
7b06fd6
adaptive_export: 0.16.4-rc1 (kssync)
ConstanzeTU Sep 10, 2026
0380e80
adaptive_export RBAC: read kubescape CRDs + the trust ConfigMap for k…
ConstanzeTU Sep 10, 2026
05950a1
adaptive_export: 0.16.5-rc1 — adds columns the cluster lacks (roguear…
ConstanzeTU Sep 10, 2026
31edba7
adaptive_export: 0.16.6-rc1 — dx_profiles__latest view
ConstanzeTU Sep 10, 2026
e262fcb
adaptive_export: 0.16.7-rc1 — the profiles view returns rows
ConstanzeTU Sep 10, 2026
7384b9e
adaptive_export: 0.16.8-rc1 — profiles view correct by structure
ConstanzeTU Sep 10, 2026
130bad5
adaptive_export: 0.16.9-rc1 — profiles view projects hostname
ConstanzeTU Sep 10, 2026
cdac038
adaptive_export: 0.16.10-rc1 — kubescape_rogue_lifecycle
ConstanzeTU Sep 10, 2026
8e46535
adaptive_export: 0.16.12-rc1 — node column, connector contract enforced
ConstanzeTU Sep 10, 2026
dae9069
adaptive_export: 0.16.13-rc1
ConstanzeTU Sep 10, 2026
ba22a8b
adaptive_export 0.16.13-rc1: kssync replaces ks-ch-sync; RBAC for the…
ConstanzeTU Sep 11, 2026
f78131f
adaptive_export: 0.16.15-rc1 — 30-day retention on event tables
ConstanzeTU Sep 11, 2026
9c5b653
adaptive_export 0.16.15-rc1: 30-day retention on event tables
ConstanzeTU Sep 11, 2026
5f25aec
dx-daemon: tanzeee/dx-daemon:0.6.0-shadow-rc42, with the pull secret …
ConstanzeTU Sep 11, 2026
fbb7ff4
skaffold_dx: before-hook builds dx-pull from the operator's local reg…
ConstanzeTU Sep 11, 2026
d0a23c9
dx-daemon: comment says what the hook actually does
ConstanzeTU Sep 11, 2026
a949c85
Merge pull request #108 from k8sstormcenter/dx-rc42-edge4
ConstanzeTU Sep 11, 2026
e99b1e7
dx-daemon: rc43 — shadow epoch ticker reads the manager's effective e…
ConstanzeTU Sep 11, 2026
3e13f75
adaptive_export: 0.16.16-rc1 — alerts no longer declared (AE never cr…
ConstanzeTU Sep 11, 2026
06e2f6e
dx-daemon: rc44 — forest verify projects only the tracepoint's printe…
ConstanzeTU Sep 11, 2026
0730ca5
adaptive_export: 0.16.17-rc1 — kubescape views read namespace where t…
ConstanzeTU Sep 11, 2026
ae82a64
dx-daemon: rc45 — ClickHouse writers re-apply their schema once on UN…
ConstanzeTU Sep 11, 2026
8ccba5d
dx-daemon: rc46 — trivial drops counted per surface in the trace reco…
ConstanzeTU Sep 11, 2026
b3043c2
dx-daemon: rc47 — trivial counts written beside surfaces on every epo…
ConstanzeTU Sep 11, 2026
519b9c3
dx-daemon: rc48 — trivial carries one entry per selected surface, zer…
ConstanzeTU Sep 11, 2026
4791a84
adaptive_export: 0.16.18-rc1 — every connector-facing view projects e…
ConstanzeTU Sep 11, 2026
4cc0ee7
adaptive_export: 0.16.19-rc2 — typed reads of the kssync mirrors (dx_…
ConstanzeTU Sep 11, 2026
322a154
adaptive_export: 0.16.20-rc1 — kssync mirrors collapse on content (Re…
ConstanzeTU Sep 11, 2026
ef52809
dx-daemon: rc49 — caps visible (tracked_pids, per-surface row caps, f…
ConstanzeTU Sep 11, 2026
a23c355
adaptive_export: 0.16.21-rc1 — dx_order_edges written_at + daily part…
ConstanzeTU Sep 11, 2026
2d48173
adaptive_export: 0.16.22-rc1 — write-path wipe recovery (sink re-appl…
ConstanzeTU Sep 11, 2026
462fa14
dx-daemon: rc53 — store recovery at the chsink boundary (every read a…
ConstanzeTU Sep 11, 2026
1442c21
dx-daemon: rc54 — the kpi tick, its subcommand, writers and dx_kpi/dx…
ConstanzeTU Sep 11, 2026
b2785c8
adaptive_export: 0.16.26-rc2 — migration on fresh schemas (0.16.23/24…
ConstanzeTU Sep 12, 2026
a35cdd6
adaptive_export: 0.16.30-rc1 — write spool with ordered replay for an…
ConstanzeTU Sep 12, 2026
0de13ba
dx: pin dx-daemon 0.6.0-shadow-rc61 (write spool at the chsink boundary)
ConstanzeTU Sep 12, 2026
92386a4
ae: pin adaptive-export 0.16.31-rc1 (per-row read instant on the stat…
ConstanzeTU Sep 12, 2026
d9118bd
ae: pin adaptive-export 0.16.32-rc1 (workload columns on kubescape_pr…
ConstanzeTU Sep 12, 2026
10c0661
ae: pin adaptive-export 0.16.33-rc1 (mirrors forget deleted objects)
ConstanzeTU Sep 12, 2026
d9160be
ae: pin adaptive-export 0.16.34-rc1 (execs carry argv, mirror_version…
ConstanzeTU Sep 12, 2026
42aaa12
dx: pin dx-daemon 0.6.0-shadow-rc64 (forward evidence window for exec…
ConstanzeTU Sep 12, 2026
6c44eed
dx: pin dx-daemon 0.6.0-shadow-rc65 (stream failures name the script'…
ConstanzeTU Sep 12, 2026
a952d3c
dx: pin dx-daemon 0.6.0-shadow-rc66 (dc_snoop ancestry columns gated …
ConstanzeTU Sep 12, 2026
09f2dae
dx: pin dx-daemon 0.6.0-shadow-rc67; drop DX_FOREST_PUSHDOWN* (no lon…
ConstanzeTU Sep 12, 2026
66b40fe
dx: pin dx-daemon 0.6.0-shadow-rc68 (process-tree pids from map keys;…
ConstanzeTU Sep 12, 2026
db9c260
ae: pin adaptive-export 0.16.35-rc1 (/dx/rows inflight cap per table,…
ConstanzeTU Sep 12, 2026
2743296
dx: pin dx-daemon 0.6.0-shadow-rc69 (backpressure: readiness gate on …
ConstanzeTU Sep 12, 2026
cb2ceb3
ae: pin adaptive-export 0.16.36-rc1 (rows waited/rejected series pres…
ConstanzeTU Sep 12, 2026
1f63edd
dx: pin dx-daemon 0.6.0-shadow-rc70 (AE hand-off spool: refused batch…
ConstanzeTU Sep 12, 2026
8e12f9c
dx: pin dx-daemon 0.6.0-shadow-rc72 (per-pod referral budget, bounded…
ConstanzeTU Sep 12, 2026
99d9f1d
dx: pin dx-daemon 0.6.0-shadow-rc74 (merge extends the order's window…
ConstanzeTU Sep 12, 2026
2f044d2
dx: roll back to dx-daemon 0.6.0-shadow-rc72 (rc74 panicked in PostRo…
ConstanzeTU Sep 12, 2026
27f753a
dx: pin dx-daemon 0.6.0-shadow-rc80 (race fix: copies on cache read; …
ConstanzeTU Sep 13, 2026
6f4cfb0
ae: pin adaptive-export 0.16.38-rc1 (dx_order_records CHECK time_ > 0…
ConstanzeTU Sep 13, 2026
6710300
ae: revert pin to adaptive-export 0.16.36-rc1 (0.16.38 rendered the C…
ConstanzeTU Sep 13, 2026
b32907a
ae: pin adaptive-export 0.16.39-rc1 (dx_order_records CHECK time_ > 0…
ConstanzeTU Sep 13, 2026
3a0cdee
ae: pin adaptive-export 0.16.40-rc1 (/dx/rows refusals carry a reason…
ConstanzeTU Sep 13, 2026
3be8390
dx: pin dx-daemon 0.6.0-shadow-rc82 (/dx/rows bodies chunked by bytes…
ConstanzeTU Sep 13, 2026
3d8c607
k8s,skaffold: tidy deploy comments
Sep 18, 2026
dd1bda6
skaffold: resolve the pull config from DOCKER_CONFIG when the caller …
Sep 18, 2026
81b179d
k8s/vizier: dx 0.6.0-shadow-rc90 + AE 0.16.45-rc1; dx reads kubescape…
Sep 19, 2026
9d60bf8
k8s/vizier/dx: 0.6.0-shadow-rc91; DX_CAPTURE_POLICY on the DaemonSet,…
Sep 19, 2026
ecc441b
k8s/vizier/dx: 0.6.0-shadow-rc92
Sep 19, 2026
5cbd574
k8s/vizier/dx: 0.6.0-shadow-rc93
Sep 19, 2026
57665ef
k8s/vizier/dx: 0.6.0-shadow-rc94
Sep 20, 2026
0df8303
k8s/vizier: AE 0.16.46-rc1
Sep 20, 2026
9c783b1
pins
Oct 4, 2026
3de9b46
k8s/vizier/dx: pin the image in the kustomization, as adaptive_export…
entlein Oct 7, 2026
4b8bd24
k8s/vizier: scope adaptive_export's RBAC to what it uses
entlein Oct 7, 2026
d413835
k8s/vizier, skaffold: adaptive_export owns its own deploy
entlein Oct 7, 2026
54edd72
k8s/vizier: adaptive_export keeps only the cluster grant it uses
entlein Oct 7, 2026
318c4dc
skaffold: one install for the export path
entlein Oct 7, 2026
0d5734f
skaffold: one file for the export path
entlein Oct 7, 2026
3a42653
k8s/vizier, skaffold: the vizier bundle no longer carries adaptive_ex…
entlein Oct 7, 2026
a853252
k8s/vizier: one definition per thing on the export path
entlein Oct 7, 2026
71069c2
skaffold: the export deploy changes nothing when no image changed
entlein Oct 7, 2026
36b2a12
skaffold: the namespace for the export path is set in one place
entlein Oct 7, 2026
7f06579
k8s/vizier: name the export path prerequisites
entlein Oct 7, 2026
28ec82f
dx: optional mount for the alert stream key
ConstanzeTU Oct 8, 2026
fadeada
dx: image pin update
ConstanzeTU Oct 8, 2026
ed95766
dx: image pin update
ConstanzeTU Oct 8, 2026
09e9f04
dx: image pin update
ConstanzeTU Oct 10, 2026
46998ba
dx: bump dx-daemon image
ConstanzeTU Oct 12, 2026
6a10643
dx: restore dx-daemon image
ConstanzeTU Oct 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion bazel/repository_locations.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,10 @@ REPOSITORY_LOCATIONS = dict(
org_libc_musl = dict(
sha256 = "7d5b0b6062521e4627e099e4c9dc8248d32a30285e959b7eecaa780cf8cfd4a4",
strip_prefix = "musl-1.2.3",
urls = ["http://musl.libc.org/releases/musl-1.2.3.tar.gz"],
urls = [
"https://sources.openwrt.org/musl-1.2.3.tar.gz",
"http://musl.libc.org/releases/musl-1.2.3.tar.gz",
],
manual_license_name = "libc/musl",
),
rules_cc = dict(
Expand Down
10 changes: 9 additions & 1 deletion ci/artifact_utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,15 @@ create_manifest_update() {
tag_name="release/${component}/v${version}"
# actions/checkout doesn't get the tag annotation properly.
git fetch origin tag "${tag_name}" -f
timestamp="$(git tag -l --format "%(taggerdate:raw)" "${tag_name}" | awk '{print $1}' | jq '. | todate')"
# taggerdate is empty for a LIGHTWEIGHT tag → produces `timestamp: ,` → jq syntax
# error → release-metadata step fails even though the image built fine. Fall back to
# the tagged commit's committer date so the manifest is well-formed regardless of how
# the release tag was cut (annotated vs lightweight).
raw_ts="$(git tag -l --format "%(taggerdate:raw)" "${tag_name}" | awk '{print $1}')"
if [ -z "${raw_ts}" ]; then
raw_ts="$(git log -1 --format="%ct" "${tag_name}")"
fi
timestamp="$(printf '%s' "${raw_ts}" | jq '. | todate')"

jq -s \
"[{name: \"${component}\", artifact: [{timestamp: ${timestamp}, commitHash: \"${commit_hash}\", versionStr: \"${version}\", availableArtifactMirrors: .}]}]" \
Expand Down
1 change: 0 additions & 1 deletion k8s/vizier/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ load("//bazel:kustomize.bzl", "kustomize_build")
package(default_visibility = ["//visibility:public"])

VIZIER_IMAGE_TO_LABEL = {
"$(IMAGE_PREFIX)/vizier-adaptive_export_image:$(BUNDLE_VERSION)": "//src/vizier/services/adaptive_export:adaptive_export_image",
"$(IMAGE_PREFIX)/vizier-cert_provisioner_image:$(BUNDLE_VERSION)": "//src/utils/cert_provisioner:cert_provisioner_image",
"$(IMAGE_PREFIX)/vizier-cloud_connector_server_image:$(BUNDLE_VERSION)": "//src/vizier/services/cloud_connector:cloud_connector_server_image",
"$(IMAGE_PREFIX)/vizier-kelvin_image:$(BUNDLE_VERSION)": "//src/vizier/services/agent/kelvin:kelvin_image",
Expand Down
58 changes: 58 additions & 0 deletions k8s/vizier/adaptive_export/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# The export path: what is defined where

Two fork-only components move query results off a cluster: `adaptive-export` in the `pl`
namespace, and `dx-daemon` in the `honey` namespace. This file is the map, so nothing has
to be remembered twice.

## One installer

```
skaffold deploy -f skaffold/skaffold_export.yaml
```

Two things have to exist first: a running Vizier, and the ClickHouse that holds
`forensic_db`. adaptive-export applies its own schema at startup and exits rather than run
against tables it cannot verify, so without ClickHouse it installs correctly and then
crashloops on `schema apply failed; refusing to proceed with possibly drifted tables`. That
is adaptive-export being careful, not a broken install. Install ClickHouse, then this.

That is the whole install, on an empty cluster or on top of a running one. It is
idempotent: a second run with no change touches nothing and restarts nothing. A pod is
replaced only when an image pin changes. The file holds two Skaffold configs,
`adaptive-export` and `dx-daemon`, and `dx-daemon` declares `requires: adaptive-export`,
so the order is declared rather than remembered. Select one with `-m <config>`.

## Where each thing lives

| Thing | Defined in |
| --- | --- |
| adaptive-export DaemonSet and Service | `k8s/vizier/adaptive_export/daemonset.yaml` |
| adaptive-export ServiceAccount, Role, ClusterRole and bindings | `k8s/vizier/adaptive_export/rbac.yaml` |
| adaptive-export image pin | `images:` in `k8s/vizier/adaptive_export/kustomization.yaml` |
| dx-daemon DaemonSet | `k8s/vizier/dx/dx-daemon.yaml` |
| dx-daemon image pin | `images:` in `k8s/vizier/dx/kustomization.yaml` |
| every secret and ConfigMap fix-up | the `before` hooks in `skaffold/skaffold_export.yaml` |

Each component is self-contained. The AE kustomization does not reach into `../bootstrap`,
which is what used to render the same two files twice under two different label sets and
leave `adaptive-export-control` with no endpoints.

## Not part of a vizier release

The release bundle is built by the `kustomize_build` targets in `k8s/vizier/BUILD.bazel`,
which glob `base/`, `bootstrap/`, `pem/` and the two metadata overlays. Neither
`adaptive_export/` nor `dx/` is in any of those globs, so a vizier release installs
neither, and this path is rolled on its own with the command above.

## Inputs the installer reads

| Variable | Used for | If unset |
| --- | --- | --- |
| `PIXIE_API_KEY`, or `PX_API_KEY` | the `pixie-api-key` in `pl-adaptive-export-secrets` | a live secret is left alone; on a cluster with no secret the install stops |
| `AE_CH_DSN` | the `clickhouse-dsn` in the same secret | the in-cluster forensic database default |
| `AE_PULL_CONFIG`, or `DOCKER_CONFIG` | the `adaptive-export-pull` image pull secret | an existing pull secret is reused; otherwise the install stops |
| `DX_PULL_CONFIG`, or `DOCKER_CONFIG` | the `dx-pull` image pull secret | a default config location is tried, and the install stops if nothing there is readable |
| `DX_CH_HTTP_URL` | dx's database endpoint | the in-cluster default |

Secrets are only ever seeded, never overwritten with a placeholder. A key is written only
when one is supplied.
109 changes: 109 additions & 0 deletions k8s/vizier/adaptive_export/daemonset.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
---
# adaptive-export: node-local forensic capture operator. DaemonSet so each pod
# queries its own node's vizier-pem (pem-direct). Secret seeded per-cluster.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: adaptive-export
labels: {name: adaptive-export, plane: control}
spec:
selector:
matchLabels: {name: adaptive-export}
template:
metadata:
labels: {name: adaptive-export, plane: control}
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/os, operator: In, values: [linux]}
serviceAccountName: pl-adaptive-export-service-account
imagePullSecrets:
- name: adaptive-export-pull
containers:
- name: adaptive-export
image: vizier-adaptive_export_image:latest
ports:
- {name: control, containerPort: 9100, hostPort: 9100}
resources:
requests: {cpu: 100m, memory: 128Mi}
limits: {cpu: "1", memory: 1Gi}
env:
- name: HOST_IP
valueFrom: {fieldRef: {fieldPath: status.hostIP}}
# Profiling listener, bound to loopback: unreachable from the cluster,
# reachable through `kubectl port-forward` for a heap or CPU sample.
- {name: AE_PPROF_ADDR, value: "127.0.0.1:6061"}
- name: ADAPTIVE_VIZIER_DIRECT_ADDR
value: "$(HOST_IP):50305"
- name: PL_JWT_SIGNING_KEY
valueFrom: {secretKeyRef: {name: pl-cluster-secrets, key: jwt-signing-key}}
- name: PX_DISABLE_TLS
value: "1"
- name: PL_NAMESPACE
valueFrom: {fieldRef: {fieldPath: metadata.namespace}}
- name: NODE_NAME
valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
- name: PIXIE_API_KEY
valueFrom: {secretKeyRef: {name: pl-adaptive-export-secrets, key: pixie-api-key}}
- name: CLICKHOUSE_DSN
valueFrom: {secretKeyRef: {name: pl-adaptive-export-secrets, key: clickhouse-dsn}}
- name: KUBESCAPE_TABLE
value: "kubescape_logs"
- name: EXPORT_MODE
value: "never"
# Control surface is secure-by-default (#96): TLS + bearer-JWT auth are ON
# out of the box. The service-tls-certs keypair mounted at /certs below is
# used for TLS (else AE self-generates an ephemeral in-memory cert), and
# PL_JWT_SIGNING_KEY above turns on auth. CONTROL_TLS / CONTROL_REQUIRE_AUTH
# are deprecated no-ops; set CONTROL_INSECURE=true only to opt out (dev).
- name: CONTROL_ADDR
value: ":9100"
- name: ADAPTIVE_PUSH_PIXIE_ROWS
value: "true"
# Capture is driven by the control surface only; no kubescape_logs poll.
- name: ADAPTIVE_TRIGGER_POLL
value: "false"
# Convert any evidence table still on a plain MergeTree. Leader-only,
# and a no-op once every table has been converted.
- name: ADAPTIVE_MIGRATE_ENGINES
value: "true"
- name: ADAPTIVE_RECONCILE
value: "true"
- name: DEPLOY_TRACEPOINTS
value: "true"
- name: INSTALL_PRESET_SCRIPTS
value: "false"
- name: ADAPTIVE_MAX_INFLIGHT_QUERIES_GLOBAL
value: "4"
- name: ADAPTIVE_ORDER_CHUNK_SEC
value: "600"
- name: VERBOSE
value: "true"
volumeMounts:
- {name: certs, mountPath: /certs, readOnly: true}
securityContext:
allowPrivilegeEscalation: false
capabilities: {drop: [ALL]}
seccompProfile: {type: RuntimeDefault}
volumes:
- name: certs
secret: {secretName: service-tls-certs}
securityContext:
runAsUser: 10100
runAsGroup: 10100
fsGroup: 10100
runAsNonRoot: true
seccompProfile: {type: RuntimeDefault}
---
apiVersion: v1
kind: Service
metadata:
name: adaptive-export-control
spec:
selector: {name: adaptive-export}
internalTrafficPolicy: Local # dx reaches its co-located (same-node) AE
ports:
- {name: control, port: 9100, targetPort: 9100}
23 changes: 23 additions & 0 deletions k8s/vizier/adaptive_export/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: pl
# Everything adaptive-export needs lives in this directory. It used to reach back into
# ../bootstrap, which meant the same two files were rendered by two kustomizations: this
# one and the vizier bootstrap. The two applied different commonLabels, so the Service
# selector written by one did not match the pods written by the other, and a deploy on top
# of a vizier-installed AE left adaptive-export-control with no endpoints at all — dx's
# hand-off silently going nowhere. One definition, one label set, no divergence possible.
# The pl-adaptive-export-secrets secret is NOT a resource here. It is created by the
# before-deploy hook in skaffold/skaffold_export.yaml, which seeds it only when a key is
# supplied and otherwise leaves a live secret untouched. There used to be a second
# definition of the same secret in this directory (secrets.example.yaml); whenever it was
# applied it clobbered the real pixie-api-key with its placeholder, which is the recurring
# "AE unauthenticated / writes 0" bug. One definition, in the installer. See README.md.
resources:
- rbac.yaml
- daemonset.yaml
images:
- name: vizier-adaptive_export_image
newName: docker.io/tanzeee/adaptive-export
newTag: 0.16.50-6dc818c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,22 @@ subjects:
name: pl-adaptive-export-service-account
namespace: pl
---
# The ONE cluster-scoped grant adaptive-export still needs, and why.
#
# config.findVizierNamespace() lists pods across the cluster to locate the vizier
# namespace, then reads pl-cluster-secrets there for cluster-id and cluster-name. Without
# it AE logs "unable to find vizier namespace: pods is forbidden ... at the cluster scope",
# falls back to environment variables, and fatals on a missing PIXIE_CLUSTER_ID. Verified
# by removing it: the pods CrashLoop. main.go's leader election lists pods too, but only in
# its own namespace, so this covers both and the Role above does not repeat it.
#
# What this role no longer grants, because it was dead: read on the kubescape
# containerprofiles and rogueartifacts CRDs and on the node-agent-bundle-policy ConfigMap.
# Those belonged to kssync, which has moved out of adaptive-export and carries its own
# RBAC where it now lives.
#
# To retire this ClusterRole entirely, AE would have to take the vizier namespace from
# PL_NAMESPACE — already injected into its pod spec — instead of discovering it.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
Expand Down
115 changes: 0 additions & 115 deletions k8s/vizier/bootstrap/adaptive_export_deployment.yaml

This file was deleted.

21 changes: 0 additions & 21 deletions k8s/vizier/bootstrap/adaptive_export_secrets.yaml

This file was deleted.

Loading
Loading