Skip to content

How to Fix Kiali Graph Not Showing in Istio

DodaTech Updated 2026-06-24 4 min read

In this tutorial, you'll learn about How to Fix Kiali Graph Not Showing in Istio. We cover key concepts, practical examples, and best practices.

The Problem

You open the Kiali dashboard and the service graph is blank, shows "No data available", or only shows a single node with no edges. The workloads and services tabs may show data but the graph is empty. Without the graph, you cannot visualize service mesh traffic.

Quick Fix

Fix 1: Prometheus Not Connected

WRONG — Kiali cannot reach Prometheus:

# In Kiali UI: Message → "Prometheus connection failed"
# Or check Kiali logs:
kubectl logs -n istio-system deployment/kiali
# time="2024-03-15T10:30:00Z" level=error msg="Prometheus is not available"

RIGHT — configure the Prometheus URL in the Kiali config:

kubectl get configmap kiali -n istio-system -o yaml
spec:
  external_services:
    prometheus:
      url: "http://prometheus.istio-system:9090"

Fix 2: No Traffic in the Mesh

WRONG — expecting a graph without generating traffic:

# The Kiali graph shows only nodes with no edges when there is no
# traffic flowing through the mesh

RIGHT — generate traffic to see the graph:

# From inside the cluster:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | head -1

# From outside:
curl -s http://istio-ingressgateway/productpage | head -1

Now Kiali should show edges between services.

Fix 3: Namespace Not Selected

WRONG — the namespace is not in Kiali's discovery list:

# In Kiali UI, the graph shows "No data" because the namespace
# is not selected in the dropdown

RIGHT — check namespace accessibility:

# Ensure the namespace is labeled:
kubectl label namespace default istio-injection=enabled

# In Kiali UI: Select the namespace from the dropdown
# If it does not appear, the user lacks permissions:
kubectl get namespace default -o yaml | grep kiali

Fix 4: Istio Metrics Not Enabled

WRONG — Istio telemetry is disabled:

# No metrics are generated for the mesh
kubectl get pods -n istio-system | grep istiod
# istiod is running, but telemetry is disabled in MeshConfig

RIGHT — enable telemetry in Istio config:

kubectl edit configmap istio -n istio-system
data:
  mesh: |-
    enablePrometheusMerge: true
    defaultConfig:
      tracing:
        zipkin:
          address: zipkin.istio-system:9411

Fix 5: Kiali Version Mismatch

# Kiali and Istio versions are incompatible
# Kiali logs: "unable to fetch istio status"

RIGHT — match Kiali version to Istio version:

# Check Istio version:
istioctl version
# client version: 1.22.0
# control plane version: 1.22.0

# Install matching Kiali:
kubectl apply -f https://raw.githubusercontent.com/kiali/kiali/v1.73/operator/deploy/kiali.yaml

Fix 6: Service No Istio Sidecar

Services not part of the mesh (no sidecar) do not appear in the graph with traffic edges.

kubectl get pods -l app=my-service -o yaml | grep -c "istio-proxy"
# 0 — no sidecar installed

RIGHT — enable sidecar injection:

kubectl label namespace default istio-injection=enabled --overwrite
kubectl rollout restart deployment my-service

Use DodaTech's Mesh Topology Viewer to analyze service dependencies, traffic flows, and latency between services in your Istio mesh.

Prevention

  • Ensure Prometheus is running and accessible to Kiali.
  • Generate at least some traffic to populate the graph.
  • Verify namespace is selected in Kiali's scope.
  • Keep Kiali and Istio versions in sync.
  • Label namespaces for Istio injection.

Common Mistakes with kiali graph

  1. Forgetting that lazy evaluation defers computation until the value is forced, causing space leaks with unevaluated thunks
  2. Using return to exit a function early instead of wrapping a pure value in the monad
  3. Mixing let bindings with <- bindings in do notation, producing type errors

These mistakes appear frequently in real-world K8S code. DodaTech's contributors have identified these patterns through analysis of open-source projects and production systems.

Practice Exercise

Write a pure function that safely divides two integers using Maybe, then test it with edge cases like division by zero and negative numbers.

This exercise reinforces the concepts covered in this guide. Try implementing it before checking online solutions.

FAQ

### Why does Kiali show "No data" even with traffic flowing?

Check that Prometheus is scraping Istio metrics. Run istioctl dashboard <a href="/devops/prometheus-grafana/">prometheus</a> and query istio_requests_total. If empty, the metrics pipeline is broken. Check istio-proxy sidecar logs for telemetry errors.

How do I see requests from outside the mesh?

Requests from ingress gateways appear as traffic from istio-ingressgateway or istio-egressgateway. The graph shows them as external sources. Enable the "Show Unused Nodes" option to see nodes without traffic.

Can Kiali show traffic between services in different namespaces?

Yes, select "All namespaces" in the Kiali graph dropdown, or select specific namespaces. Ensure the Kiali service account has list and get permissions on pods and services in all target namespaces.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro