Graph FAQ

This section describes some known issues in Kiali that may not be fixed in the very short term, and lead to limitations in a restricted number of cases. Hopefully, you won’t even notice them.

If you are hitting a problem, whether it is listed here or not, do not hesitate to use the GitHub issue tracker. You can simply vote (using emojis) for any existing bug or feature request, this will help us to understand the most demanded enhancements, or you can create a new ticket. For existing JIRA tickets, use the vote link or add a comment describing your expectation or scenario.

The whole list of JIRA tickets can be found here.

     In general, we use the GitHub tracker for issues raised by the community, and JIRA for issues raised by the core engineering team. Both are publicly accessible.

  1. Why is the graph badly laid out?

    If you search in the mailing list, you will find a number of discussions about the graph layouts.

    The layout for Kiali Graph may render differently, depending on the data to display (number of graph nodes and their interactions) and it’s sometimes difficult, not to say impossible, to have a single layout that renders nicely in every situations. That’s why Kiali offers a choice of several layout algorithms. However, we may still find some scenarios where none of the proposed algorithm offer a satisfying display. If Kiali doesn’t not render your graph layout in a satisfactory manner please switch to another layout option. This can be done from the Graph Toolbar located on the bottom left of the graph.

    If Kiali doesn’t produce a good graph for you, don’t hesitate to open an issue in GitHub or reach us in the mailing lists, and describe your situation.

  2. Why are there many unknown nodes in the graph?

    In some situations you can see a lot of connections from an "Unknown" node to your services in the graph, because some software external to your mesh might be periodically pinging or fetching data. This is typically the case when you setup Kubernetes liveness probes, or have some application metrics pushed or exposed to a monitoring system such as Prometheus. Perhaps you wouldn’t like to see these connections because they make the graph harder to read.

    From the Graph page, you can filter them out by typing node = unknown in the Graph Hide input box.

    Graph Hide
    Figure 1. Hide the Unknown node

     

    For a more definitive solution, there are several ways to prevent Istio from gathering this kind of telemetry.

    The first is to have these endpoints (like /health or /metrics) exposed on a different port and server than your main application, and to not declare this port in your Pod's container definition as containerPort. This way, the requests will be completely ignored by the Istio proxy, as mentioned in Istio documentation (at the bottom of that page).

    The second way is to modify Istio’s Prometheus rule to explicitly exclude some requests based on the User Agent. This is the Rule resource named promhttp located in istio-system. To edit it:

    kubectl edit rule promhttp -n istio-system

    or for OpenShift:

    oc edit rule promhttp -n istio-system

    Then locate the match field under spec section. Change it to filter out, for instance, the Kubernetes probes:

    match: (context.protocol == "http" || context.protocol == "grpc") && (match((request.useragent | "-"), "kube-probe*") == false)

    Note that, starting from Istio 1.1, Kubernetes probes will be filtered out in that way by default. But you may still want to do something equivalent with other User Agents.

  3. Why do I have missing edges?

    Kiali just shows the telemetry in Prometheus and if you don’t see what you expect it probably means that it has not been reported in Prometheus. Which means ususally that 1) the requests are not actually sent, 2) sidecars are missing, 3) requests are leaving the mesh and are not configured for telemetry

    Kiali builds the graph from Istio’s telemetry. If you don’t see what you expect it probably means that it has not been reported in Prometheus. This usually means that:

    1- The requests are not actually sent.

    2- Sidecars are missing.

    For example, If you don’t see traffic going from node A to node B, but you are sure there is traffic, the first thing you should be doing is checking the telemetry by querying the metrics, for example, if you know that MyWorkload-v1 is sending requests to ServiceA try looking for metrics of the type:

    istio_requests_total{destination_service="ServiceA"}

    If telemetry is missing then it may be better to take it up with Istio

  4. Why can't I see traffic leaving the mesh?

    See Why do I have missing edges?, and additionally consider:

    3- Requests are not configured for telemetry.

    You need to create a ServiceEntry (or several) to allow the requests to be mapped correctly.

    There are a couple of bugs related to this, one incorrectly maps traffic to other ServiceEntry while the other is about not seeing a ServiceEntry even if is configured correctly.

    You can check this article on how to visualize your external traffic in Kiali for more information.

  5. Why my external HTTPS traffic is showing as TCP?

    Istio can’t recognize HTTPS request that go directly to the service, the reason is that these requests are encrypted and are recognized as TCP traffic.

    You can however configure your mesh to use TLS origination for your egress traffic. This will allow to see your traffic as HTTP instead of TCP.