This episode dissects Hubble as Cilium's observability layer: how to enable the relay and UI, read flow logs with hubble observe, trace allowed connections, verify policies, and find dropped traffic. You will also learn to use the Hubble UI as a visual dashboard.

The policies we created in episode 6 need to be proven, and that is the main reason Hubble exists. Hubble is Cilium's observability layer that reads flow logs directly from the eBPF data plane. Every connection that passes through Cilium produces a flow: who the source is, where it is heading, what protocol, and what the data plane's decision was — allowed or dropped.
Episode 7 covers how to enable Hubble, read flows with hubble observe, use the Hubble UI, and most importantly: turn flow logs into evidence for verifying policies and finding dropped traffic.
Hubble is not active by default during Cilium installation. Enable it with the Cilium CLI including the UI:
cilium hubble enable --uicilium hubble enable --ui installs the Hubble relay and Hubble UI components. The relay collects flows from all agents and provides an API for both the CLI and the UI. This process takes a few minutes until the hubble-relay pod is ready.
If using Helm, the equivalent configuration is hubble.relay.enabled=true and hubble.ui.enabled=true. Whatever the method, make sure everything is ready before continuing:
kubectl get pods -n kube-system -l k8s-app=hubble-relay
kubectl get pods -n kube-system -l k8s-app=hubble-uikubectl get pods -n kube-system -l k8s-app=hubble-relay must show the relay with Running status before we use the hubble CLI.
After Hubble is active, check the CLI connection status to the relay:
hubble statushubble status shows the relay version and the number of flows currently being handled. If it shows an error, check the port-forward or connection configuration.
To see flows directly, use hubble observe:
hubble observe --since 5mhubble observe --since 5m shows the flows of the last 5 minutes with the format: time, source, destination, protocol, and verdict. If there is no traffic yet, re-run the pod-to-pod curl from episode 4 or episode 6 to generate new flows.
One flow log line contains important information you need to get used to reading:
FORWARDED means allowed, DROPPED means rejected by policy.Policy denied.For more detailed flows, the JSON format provides all fields including labels:
hubble observe --since 10m --output jsonhubble observe --output json produces complete output suitable for processing with jq or automated pipelines — a pattern that will be used again when doing production observability in episode 21.
Hubble UI provides a browser-based visual dashboard. After the port-forward, open it in your browser:
cilium hubble ui --opencilium hubble ui --open port-forwards to the Hubble UI and opens it in your browser. On the dashboard you can see the cluster map, filter flows by namespace, service, or identity, and observe traffic patterns visually. The UI uses data from the same relay, so the information shown is consistent with hubble observe.
Hubble's most valuable function for policy managers: finding rejected traffic. The verdict filter is very helpful:
hubble observe --verdict DROPPED --since 30mhubble observe --verdict DROPPED shows only the flows dropped by the data plane, complete with the reason for rejection. This is the fastest way to answer the classic question: "why can't my applications reach each other?" — usually the answer is here, not in the application logs.
Combine filters to speed up diagnosis:
hubble observe --verdict DROPPED --namespace defaulthubble observe --verdict DROPPED --namespace default narrows the search to one namespace. This pattern will become your first reflex when troubleshooting policies in episode 19.
Info
Hubble does not add significant data collection cost because flows are generated directly in the eBPF data plane. However, in large clusters, store flows selectively into metrics or log exporters to avoid being flooded with data — episode 21 will discuss the strategy.
Key takeaways:
cilium hubble enable --ui enables the relay and dashboard.hubble observe shows flows; hubble status checks the relay connection.cilium hubble ui --open.hubble observe --verdict DROPPED is the main door for policy troubleshooting.In the next episode 8, we will discuss kube-proxy replacement and basic service mesh — how Cilium replicates ClusterIP, NodePort, and LoadBalancer via eBPF with socket load balancing, session affinity, and DSR, as well as the kube-proxy-replacement: strict configuration and cloud load balancer compatibility. This fundamentally changes how Services work in your cluster.