diff --git a/api/flowcollector/v1beta2/flowcollector_types.go b/api/flowcollector/v1beta2/flowcollector_types.go
index 012f299893..0a2194faa8 100644
--- a/api/flowcollector/v1beta2/flowcollector_types.go
+++ b/api/flowcollector/v1beta2/flowcollector_types.go
@@ -188,7 +188,8 @@ type FlowCollectorIPFIX struct {
// - `EbpfManager`, to enable using eBPF Manager to manage NetObserv eBPF programs. [Unsupported (*)].
// - `UDNMapping`, to enable interfaces mapping to UDN.
// - `IPSec`, to track flows between nodes with IPsec encryption.
-// +kubebuilder:validation:Enum:="PacketDrop";"DNSTracking";"FlowRTT";"NetworkEvents";"PacketTranslation";"EbpfManager";"UDNMapping";"IPSec"
+// - `TLSTracking`, to track TLS usage.
+// +kubebuilder:validation:Enum:="PacketDrop";"DNSTracking";"FlowRTT";"NetworkEvents";"PacketTranslation";"EbpfManager";"UDNMapping";"IPSec";"TLSTracking"
type AgentFeature string
const (
@@ -200,6 +201,7 @@ const (
EbpfManager AgentFeature = "EbpfManager"
UDNMapping AgentFeature = "UDNMapping"
IPSec AgentFeature = "IPSec"
+ TLSTracking AgentFeature = "TLSTracking"
)
// Name of an eBPF agent alert.
@@ -404,6 +406,7 @@ type FlowCollectorEBPF struct {
// This feature requires mounting the kernel debug filesystem, so the eBPF agent pods must run as privileged via `spec.agent.ebpf.privileged`.
// It requires using the OVN-Kubernetes network plugin with the Observability feature.
// - `IPSec`, to track flows between nodes with IPsec encryption.
+ // - `TLSTracking`, to track TLS usage.
// +optional
Features []AgentFeature `json:"features,omitempty"`
diff --git a/api/flowcollector/v1beta2/helper.go b/api/flowcollector/v1beta2/helper.go
index 95346f0fc0..c58ac7abd7 100644
--- a/api/flowcollector/v1beta2/helper.go
+++ b/api/flowcollector/v1beta2/helper.go
@@ -119,6 +119,10 @@ func (spec *FlowCollectorEBPF) IsIPSecEnabled() bool {
return spec.IsAgentFeatureEnabled(IPSec)
}
+func (spec *FlowCollectorEBPF) IsTLSTrackingEnabled() bool {
+ return spec.IsAgentFeatureEnabled(TLSTracking)
+}
+
func (spec *FlowCollectorEBPF) IsEBPFMetricsEnabled() bool {
return spec.Metrics.Enable == nil || *spec.Metrics.Enable
}
diff --git a/bundle/manifests/flows.netobserv.io_flowcollectors.yaml b/bundle/manifests/flows.netobserv.io_flowcollectors.yaml
index e4556cb6d0..64975fcd0b 100644
--- a/bundle/manifests/flows.netobserv.io_flowcollectors.yaml
+++ b/bundle/manifests/flows.netobserv.io_flowcollectors.yaml
@@ -1141,6 +1141,7 @@ spec:
This feature requires mounting the kernel debug filesystem, so the eBPF agent pods must run as privileged via `spec.agent.ebpf.privileged`.
It requires using the OVN-Kubernetes network plugin with the Observability feature.
- `IPSec`, to track flows between nodes with IPsec encryption.
+ - `TLSTracking`, to track TLS usage.
items:
description: |-
Agent feature, can be one of:
@@ -1152,6 +1153,7 @@ spec:
- `EbpfManager`, to enable using eBPF Manager to manage NetObserv eBPF programs. [Unsupported (*)].
- `UDNMapping`, to enable interfaces mapping to UDN.
- `IPSec`, to track flows between nodes with IPsec encryption.
+ - `TLSTracking`, to track TLS usage.
enum:
- PacketDrop
- DNSTracking
@@ -1161,6 +1163,7 @@ spec:
- EbpfManager
- UDNMapping
- IPSec
+ - TLSTracking
type: string
type: array
flowFilter:
diff --git a/config/crd/bases/flows.netobserv.io_flowcollectors.yaml b/config/crd/bases/flows.netobserv.io_flowcollectors.yaml
index 1900755baa..5b003f32ab 100644
--- a/config/crd/bases/flows.netobserv.io_flowcollectors.yaml
+++ b/config/crd/bases/flows.netobserv.io_flowcollectors.yaml
@@ -1067,6 +1067,7 @@ spec:
This feature requires mounting the kernel debug filesystem, so the eBPF agent pods must run as privileged via `spec.agent.ebpf.privileged`.
It requires using the OVN-Kubernetes network plugin with the Observability feature.
- `IPSec`, to track flows between nodes with IPsec encryption.
+ - `TLSTracking`, to track TLS usage.
items:
description: |-
Agent feature, can be one of:
@@ -1078,6 +1079,7 @@ spec:
- `EbpfManager`, to enable using eBPF Manager to manage NetObserv eBPF programs. [Unsupported (*)].
- `UDNMapping`, to enable interfaces mapping to UDN.
- `IPSec`, to track flows between nodes with IPsec encryption.
+ - `TLSTracking`, to track TLS usage.
enum:
- PacketDrop
- DNSTracking
@@ -1087,6 +1089,7 @@ spec:
- EbpfManager
- UDNMapping
- IPSec
+ - TLSTracking
type: string
type: array
flowFilter:
diff --git a/config/samples/flowmetrics/tls_egress_traffic.yaml b/config/samples/flowmetrics/tls_egress_traffic.yaml
new file mode 100644
index 0000000000..90be6f8174
--- /dev/null
+++ b/config/samples/flowmetrics/tls_egress_traffic.yaml
@@ -0,0 +1,37 @@
+apiVersion: flows.netobserv.io/v1alpha1
+kind: FlowMetric
+metadata:
+ name: tls-egress-traffic
+ namespace: netobserv
+spec:
+ type: Counter
+ valueField: Bytes
+ labels: [SrcSubnetLabel,SrcK8S_Namespace,SrcK8S_OwnerName,SrcK8S_OwnerType,DstSubnetLabel,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType,Proto,TLSVersion,TLSTypes]
+ direction: Egress
+ filters:
+ - field: SrcK8S_Namespace
+ matchType: Presence
+ charts:
+ - dashboardName: TLS
+ title: "Egress TLS traffic"
+ unit: percent
+ type: SingleStat
+ queries:
+ - promQL: 'sum(rate(netobserv_tls_egress_traffic{TLSVersion!=""}[2m])) / sum(rate(netobserv_tls_egress_traffic[2m]))'
+ legend: ""
+ - dashboardName: TLS
+ sectionName: Per namespace
+ title: Egress traffic without TLS
+ unit: Bps
+ type: StackArea
+ queries:
+ - promQL: 'topk(10, sum(rate(netobserv_tls_egress_traffic{TLSVersion=""}[2m])) by (SrcK8S_Namespace))'
+ legend: "{{SrcK8S_Namespace}}"
+ - dashboardName: TLS
+ sectionName: Per version
+ title: Egress traffic per TLS version
+ unit: Bps
+ type: StackArea
+ queries:
+ - promQL: 'topk(10, sum(rate(netobserv_tls_egress_traffic{TLSVersion!~"|.*0x.*"}[2m])) by (TLSVersion))'
+ legend: "{{TLSVersion}}"
diff --git a/config/samples/flowmetrics/tls_ingress_traffic.yaml b/config/samples/flowmetrics/tls_ingress_traffic.yaml
new file mode 100644
index 0000000000..b2eb92f225
--- /dev/null
+++ b/config/samples/flowmetrics/tls_ingress_traffic.yaml
@@ -0,0 +1,37 @@
+apiVersion: flows.netobserv.io/v1alpha1
+kind: FlowMetric
+metadata:
+ name: tls-ingress-traffic
+ namespace: netobserv
+spec:
+ type: Counter
+ valueField: Bytes
+ labels: [SrcSubnetLabel,SrcK8S_Namespace,SrcK8S_OwnerName,SrcK8S_OwnerType,DstSubnetLabel,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType,Proto,TLSVersion,TLSTypes]
+ direction: Ingress
+ filters:
+ - field: DstK8S_Namespace
+ matchType: Presence
+ charts:
+ - dashboardName: TLS
+ title: "Ingress TLS traffic"
+ unit: percent
+ type: SingleStat
+ queries:
+ - promQL: 'sum(rate(netobserv_tls_ingress_traffic{TLSVersion!=""}[2m])) / sum(rate(netobserv_tls_ingress_traffic[2m]))'
+ legend: ""
+ - dashboardName: TLS
+ sectionName: Per namespace
+ title: Ingress traffic without TLS
+ unit: Bps
+ type: StackArea
+ queries:
+ - promQL: 'topk(10, sum(rate(netobserv_tls_ingress_traffic{TLSVersion=""}[2m])) by (DstK8S_Namespace))'
+ legend: "{{DstK8S_Namespace}}"
+ - dashboardName: TLS
+ sectionName: Per version
+ title: Ingress traffic per TLS version
+ unit: Bps
+ type: StackArea
+ queries:
+ - promQL: 'topk(10, sum(rate(netobserv_tls_ingress_traffic{TLSVersion!~"|.*0x.*"}[2m])) by (TLSVersion))'
+ legend: "{{TLSVersion}}"
diff --git a/config/samples/flows_v1beta2_flowcollector.yaml b/config/samples/flows_v1beta2_flowcollector.yaml
index 082ad1c477..675b55974d 100644
--- a/config/samples/flows_v1beta2_flowcollector.yaml
+++ b/config/samples/flows_v1beta2_flowcollector.yaml
@@ -27,6 +27,7 @@ spec:
# - "EbpfManager"
# - "UDNMapping"
# - "IPSec"
+ # - "TLSTracking"
interfaces: []
excludeInterfaces: ["lo"]
# kafkaBatchSize: 1048576
diff --git a/docs/FlowCollector.md b/docs/FlowCollector.md
index 056a547a95..333b278ce8 100644
--- a/docs/FlowCollector.md
+++ b/docs/FlowCollector.md
@@ -313,9 +313,10 @@ IMPORTANT: This feature is available as a Technology Preview.
- `UDNMapping`: Enable interfaces mapping to User Defined Networks (UDN).
This feature requires mounting the kernel debug filesystem, so the eBPF agent pods must run as privileged via `spec.agent.ebpf.privileged`.
It requires using the OVN-Kubernetes network plugin with the Observability feature.
-- `IPSec`, to track flows between nodes with IPsec encryption.
+- `IPSec`, to track flows between nodes with IPsec encryption.
+- `TLSTracking`, to track TLS usage.
- Enum: PacketDrop, DNSTracking, FlowRTT, NetworkEvents, PacketTranslation, EbpfManager, UDNMapping, IPSec
+ Enum: PacketDrop, DNSTracking, FlowRTT, NetworkEvents, PacketTranslation, EbpfManager, UDNMapping, IPSec, TLSTracking