mirror of
https://github.com/taylanbakircioglu/flowfish.git
synced 2026-09-17 08:05:09 +00:00
6e503368f7
- Grafana Beyla DaemonSet for kernel-level HTTP/gRPC/DNS capture (passive, zero application changes, W3C traceparent header propagation) - flowfish-l7-collector in-cluster bridge: OTLP receiver + buffered pull API - L7 Ingestion Service: K8s service-proxy poll → enrich → RabbitMQ - ClickHouse l7_http_flows / l7_grpc_flows / l7_dns_flows + APM RED MVs - Neo4j L7Workload nodes + SAME_WORKLOAD cross-cluster bridges - New pages: Service Map, Trace Explorer, APM Services List, APM Service Detail - Analysis Wizard now supports L4 / L7 / Both modes with HTTP/gRPC/DNS picks - Integration Hub gains L7 dependency summary + tree-summary integrations - Multi-Cluster Management: dual-agent install (Inspector Gadget L4 + Beyla L7), runtime OpenShift detection so SCCs auto-install with kubectl too - ServiceMap edge → Trace Explorer drill-down with virtual_trace_id correlation - Docs: new L7 architecture diagram, README L7 sections, 3 new screenshots
5.9 KiB
5.9 KiB
Migration Notes
Operational upgrade notes for Flowfish.
v2.5.0 → v2.6.0
Summary
This release closes the L7 parity gap in the Integration Hub. L7 dependency summaries can now be filtered by annotation, label, owner/workload name and pod name (matching the L4 surface), and the Integration Hub fans BOTH-mode analyses out to L4 and L7 endpoints in parallel.
The release is backwards compatible for all existing API consumers. No data migration is required.
Breaking changes
None.
API surface changes
GET /api/v1/l7/dependencies/summary
New optional parameters:
| Parameter | Type | Default | Notes |
|---|---|---|---|
annotation_key |
string | — | fnmatch glob supported |
annotation_value |
string | — | fnmatch glob supported |
label_key |
string | — | fnmatch glob supported |
label_value |
string | — | fnmatch glob supported |
owner_name |
string | — | Server-side alias for workload_name; workload_name takes precedence when both are supplied |
pod_name |
string | — | Case-insensitive substring match against L7Workload.name |
workload_name |
string | — | Case-insensitive substring match against L7Workload.name |
filter_noise_annotations |
boolean | false |
Strips infrastructure annotation prefixes (kubectl.kubernetes.io/, kubernetes.io/, openshift.io/) from the response |
Response shape additions:
- Every workload entry now includes
is_matched: boolean.- With no filter active:
is_matched=trueon every entry (no neighbour expansion). - With any filter active: matched workloads are
is_matched=true; their immediate neighbours are returned withis_matched=falseso callers retain dependency context.
- With no filter active:
- The Neo4j query LIMIT is multiplied by 10 internally when a filter is active so post-filtering does not truncate results. Callers can still set their own
limitupstream.
GET /api/v1/l7/dependencies/tree-summary
New optional parameter:
| Parameter | Type | Default | Notes |
|---|---|---|---|
workload_name_exact |
boolean | true |
Default preserves existing exact-match behaviour. Set false for case-insensitive substring match (mirrors L4 owner_name semantics). |
OpenAPI
analysis_idon both L7 endpoints is now typed asstringto match the multi-cluster sub-analysis prefix already used at runtime.- The
namespaceandinclude_metadataparameters on/l7/dependencies/summaryare now explicitly listed in the spec (the runtime already supported them).
Frontend / Integration Hub changes
- The dedicated L7 Workload Search card has been removed. The unified Service Identification card now handles every analysis level.
- Namespace is now an orthogonal field — it applies to every identification method (annotation, label, namespace + deployment / workload, pod name, advanced), not just
namespace_deployment. - The
namespace_deploymentmethod label has been renamed to Namespace + Deployment / Workload for clarity across L4 and L7. - BOTH-mode analyses fan out to L4 and L7 endpoints in parallel and render two preview tabs plus an L4/L7 snippet toggle.
- Snippet builders emit the full filter surface (annotation/label/owner_name/pod_name) for L4 and L7 alike. L7 tree snippets now always set
workload_name_exact=false.
Behavioural changes operators should know
| Behaviour | v2.5.0 | v2.6.0 |
|---|---|---|
GET /l7/dependencies/summary with annotation filter |
Filter parameters ignored; full namespace result returned. | Cypher CONTAINS pre-filter + Python fnmatch post-filter; only matched workloads + immediate neighbours returned. |
Integration Hub with analysis_level=both |
L4 endpoint only; L7 data missing in Preview and snippets. | Both endpoints queried in parallel; Network/Application tabs in Preview; L4/L7 toggle in Integration Code. |
| Integration Hub Service Identification card visibility | Hidden for L7 analyses (only the L7 Workload Search card shown). | Always visible. |
tree-summary workload_name semantic |
Exact match only. | Default exact (workload_name_exact=true); opt-in substring (workload_name_exact=false). The Integration Hub explicitly opts in. |
Required actions
| Audience | Action |
|---|---|
| Cluster operators | None — drop-in upgrade. |
| API consumers (read-only) | None — defaults preserve existing behaviour. |
API consumers using the L7 tree-summary substring trick |
Explicitly pass workload_name_exact=false. |
| Integration Hub snippet copy/paste users | Re-copy snippets after upgrading; new identification parameters are emitted. |
Verification scenarios
After deploying v2.6.0, run the following smoke tests against any cluster:
- L7 annotation filter parity. Start a BOTH analysis, then in the Integration Hub configure
annotation_key=mycompany.com/project,annotation_value=NBA. Verify the workload count on the Application Dependencies (L7) tab matches what the Service Map renders for the same filter. - Pure L7 with namespace. Start an L7-only analysis, pick Namespace + Deployment / Workload, fill in a namespace + workload name. Verify the Preview lists matched workloads + neighbours and that the Integration Code emits the L7 query string.
- Partial failure. Temporarily scale
graph-querydown (or simulate by blocking/l7/*at the gateway), launch a BOTH-mode query, and verify the L4 tab renders while the L7 tab shows an inline error banner. - Multi-cluster annotation. With two clusters connected, run the annotation filter scenario and verify workloads from both clusters appear with the correct
clusterfield. Frontend deduplication uses the(cluster, namespace, name)tuple — re-confirm there are no duplicates. - Backward compatibility. Call
GET /api/v1/l7/dependencies/tree-summaryfrom any existing pipeline withoutworkload_name_exact; verify the response matches v2.5.0 exact-match behaviour.
Older releases
Pre-v2.5.0 release notes are not tracked in this file.