Istio Bookinfo Demo

This document was translated by GPT-4

# 1. Introduction

In this chapter, we demonstrate DeepFlow's AutoTracing capability in a multi-language microservice application, which includes the implementation of Java, Python, Ruby, and Node.js in an Istio service mesh.

# 2. Deploying Istio Bookinfo Demo

# 2.1 Deploying Istio

You can refer to the official Istio documentation (opens new window) for Istio deployment. Alternatively, you can quickly deploy it using the commands below:

curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
1
2
3
4

DeepFlow currently supports HTTPS collection capability for Golang applications, and support for other languages is still under development. In this Demo, we first turned off Istio mTLS using the following command:

kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: "default"
  namespace: "istio-system"
spec:
  mtls:
    mode: DISABLE
EOF
1
2
3
4
5
6
7
8
9
10

# 2.2 Deploying Bookinfo Demo

The Demo we're using is derived from this GitHub repository (opens new window), and its application architecture is as follows:

Bookinfo Application with Istio

Bookinfo Application with Istio

You can quickly deploy the Demo in K8s with the following command:

kubectl apply -f https://raw.githubusercontent.com/deepflowio/deepflow-demo/main/Istio-Bookinfo/bookinfo.yaml
1

The original GitHub code repository uses Jaeger for active tracing. To demonstrate AutoTracing capability, we have purposefully removed Jaeger in the deployment script above.

# 3. Exploring distributed tracing

Navigate to Grafana, open the Distributed Tracing Dashboard, select namespace = deepflow-ebpf-istio-demo, and then select a call for tracing. The effect is shown in the figure below:

eBPF Istio Demo

eBPF Istio Demo

You can also explore the tracing effect by visiting DeepFlow Online Demo (opens new window). The topology diagram corresponding to the flame chart of the call chain in the image above is as follows:

Let's summarize this tracing Demo:

  • Zero-code injection: The entire tracing process does not require manual insertion of any tracing code, nor does it require the injection of any TraceID/SpanID into the HTTP Header.
  • Multi-language: Supports tracing of Java, Python, Ruby, NodeJS language applications, and C/C++ (curl/envoy) language-based services.
  • Trace all links: Using eBPF and BPF, automatically traced 38 Spans of this Trace, including 24 eBPF Spans and 14 BPF Spans.
  • Full-stack: Supports tracing of the network path between two Pods on the same K8s Node, such as Span 4-5, etc.
  • Full-stack: Supports tracing of the network path between two Pods on different K8s Nodes, even if they are encapsulated by a tunnel, such as Span 12-15, etc. (IPIP tunnel encapsulation)
  • Full-stack: Supports tracing the entire process within a Pod from Envoy Ingress, service process, to Envoy Egress, such as Span 6-11, etc.